使用circleci config.yml的Azure应用程序服务插槽和交换部署

使用circleci config.yml的Azure应用程序服务插槽和交换部署,azure,web-applications,swap,circleci,slot,Azure,Web Applications,Swap,Circleci,Slot,使用circleci config.yml部署Azure应用程序服务插槽 version: 2.1 jobs: build: docker: - image: circleci/node:10.16.3 steps: ## Fetch all release tags - checkout - run: name: Install Node.js dependencies with Npm

使用circleci config.yml部署Azure应用程序服务插槽

version: 2.1

jobs:
  build:
    docker:
        - image: circleci/node:10.16.3
    steps:

      ## Fetch all release tags
      - checkout
      - run:
          name: Install Node.js dependencies with Npm
          command: npm install
      - run:
          name: Test
          command: CI=true npm run coverage



  dev-deploy:
    machine: true
    steps:
      - checkout
      - run:

          name: create / update infrastructure
          command: |

            docker login -u $REGISTRY_UN -p $REGISTRY_PW $REGISTRY_SERVER

            docker run --rm -it -e TF_VAR_repo_branch=$CIRCLE_BRANCH -e vaultkey=$VAULT_KEY -v `pwd`:/dp/config  dockerimage/dpdeployer:beta-1.0  .dp.yaml



workflows:
  version: 2
  build_and_test_publish:
    jobs:
       - build
      #  - hold: # <<< A job that will require manual approval in the CircleCI web application.
      #      type: approval # <<< This key-value pair will set your workflow to a status of "On Hold"
      #      requires: # We only run the "hold" job when test2 has succeeded
      #       - build

       - dev-deploy:
          requires:

            - build

          filters:
            branches: 
              only : feature/appservice

需要添加一个步骤以部署到生产插槽或临时插槽,然后修改配置以交换部署

描述:当我运行此配置文件时,默认情况下它会部署到azure应用程序服务的生产插槽,但我想先部署到阶段插槽,然后进行交换

下面的文件工作正常,但需要一些配置更改,以便我能够部署到后台插槽,然后将插槽交换到生产插槽

使用Circleci config.yml,下面是我的config.yml

version: 2.1

jobs:
  build:
    docker:
        - image: circleci/node:10.16.3
    steps:

      ## Fetch all release tags
      - checkout
      - run:
          name: Install Node.js dependencies with Npm
          command: npm install
      - run:
          name: Test
          command: CI=true npm run coverage



  dev-deploy:
    machine: true
    steps:
      - checkout
      - run:

          name: create / update infrastructure
          command: |

            docker login -u $REGISTRY_UN -p $REGISTRY_PW $REGISTRY_SERVER

            docker run --rm -it -e TF_VAR_repo_branch=$CIRCLE_BRANCH -e vaultkey=$VAULT_KEY -v `pwd`:/dp/config  dockerimage/dpdeployer:beta-1.0  .dp.yaml



workflows:
  version: 2
  build_and_test_publish:
    jobs:
       - build
      #  - hold: # <<< A job that will require manual approval in the CircleCI web application.
      #      type: approval # <<< This key-value pair will set your workflow to a status of "On Hold"
      #      requires: # We only run the "hold" job when test2 has succeeded
      #       - build

       - dev-deploy:
          requires:

            - build

          filters:
            branches: 
              only : feature/appservice

版本:2.1
工作:
建造:
码头工人:
-图:circleci/节点:10.16.3
步骤:
##获取所有发布标签
-结帐
-运行:
名称:使用Npm安装Node.js依赖项
命令:npm install
-运行:
名称:测试
命令:CI=真实的npm运行覆盖率
开发人员部署:
机器:对
步骤:
-结帐
-运行:
名称:创建/更新基础结构
命令:|
docker登录-u$REGISTRY\u UN-p$REGISTRY\u PW$REGISTRY\u服务器
docker run--rm-it-e TF\u VAR\u repo\u branch=$CIRCLE\u branch-e vaultkey=$VAULT\u KEY-v`pwd`:/dp/config dockrimage/dpdeployer:beta-1.0.dp.yaml
工作流程:
版本:2
生成和测试发布:
工作:
-建造

#-按住:#Hmmm,这可能是查看以下内容的好链接:

但是,我认为这取决于您希望如何将代码部署到Azure应用程序服务。有很多不同的方法可以做到这一点。检查您的配置,您已经在使用Docker。此链接介绍将容器部署为Azure应用程序服务的步骤。 其要点似乎是,您需要配置您的WebApp,以从每个Azure应用程序插槽的docker注册表中提取

然后在成功构建之后,让circleci将docker映像推/标记到该注册表。然后Azure应用程序服务将启动应用程序的新版本

为了在Azure应用程序服务插槽之间切换,您可以将circleci配置推送到不同的docker注册表图像标记。这需要使用稍微不同的配置设置每个Azure应用程序服务槽。例如

# Dev
  az webapp config container set --name <app-name> --resource-group <rg> --docker-custom-image-name <registry-name>/mydockerimage:$VERSION_FOR_DEV ... 
# Staging
  az webapp config container set --name <app-name> --resource-group <rg> --docker-custom-image-name <registry-name>/mydockerimage:$VERSION_FOR_STAGE ...
另见:


希望这有帮助,我没有误解你的问题 是的,成功了!!!谢谢

尽管按照我们当前的部署结构,我们正在使用部署脚本并从那里处理交换,然后通过CircleCI部署应用程序