circleci:如何为每个环境运行具有多个上下文的作业

jun*_*ent 2 continuous-integration circleci-2.0

我正在使用 circleCI 来部署生产或暂存环境。我想对与每个环境对应的每个分支的上下文使用相同的作业,因为我不喜欢为每个环境编写相同的代码。

我想像下面这样写。

version: 2
jobs:
  deploy:
    docker:
      - image: google/cloud-sdk
    steps:
      - checkout
      - run: <deploying commands>

workflows:
  version: 2
  deploy:
    jobs:
      - deploy:
          filters:
            branches:
              only:
                - master
          context: production

      - deploy:
          filters:
            branches:
              only:
                - develop
          context: staging
Run Code Online (Sandbox Code Playgroud)

baz*_*lia 5

有一个更好的选择是不要创建多个工作流,这会导致复杂性,特别是在您的工作流运行多个作业的情况下,有些只针对特定分支触发,有些则不会。

YAML 是一种数据序列化语言,因此您仍然可以使用其功能来简化声明。

根据你的例子,我们可能有这样的事情:

version: 2
jobs:
  deploy: &deploy
    docker:
      - image: google/cloud-sdk
    steps:
      - checkout
      - run: <deploying commands>
  deploy-production:
    <<: *deploy
  deploy-staging:
    <<: *deploy

workflows:
  version: 2
  deploy-production:
    jobs:
      - deploy-production:
          filters:
            branches:
              only:
                - master
          context: production
      - deploy-staging:
          filters:
            branches:
              only:
                - develop
          context: staging
Run Code Online (Sandbox Code Playgroud)