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

时间:2018-04-19 03:45:18

标签: 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

2 个答案:

答案 0 :(得分:2)

我使用多个工作流程解决了这个问题。

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

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

  deploy-staging:
    jobs:
      - deploy:
          filters:
            branches:
              only:
                - develop
          context: staging

答案 1 :(得分:2)

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

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