CicleCI Workflow job에 이름 관리 종속 추가

16855 단어 CircleCICircleCI2.1

CircleaCI Orbs 사용 시 겪는 어려움


CircleaCI Orbs를 이용하면 AWS ECR에 인상 Push 등을 할 수 있지만, 지점별로 창고 push를 따로 하려면 곤란하다.
다음은 제대로 움직이지 못하는 경우다.
.circleci/config.yml
version: 2.1
orbs:
  aws-ecr: circleci/[email protected]
  aws-ecs: circleci/[email protected]
# 中略
workflows:
  build:
    jobs:
      # 中略
      # Staging 用のデプロイ
      - aws-ecr/build-and-push-image
          repo: "Staging用リポジトリ"
          tag: "${CIRCLE_SHA1}"
          requires:
            - test
            - lint
          filters: &staging-filter
            branches:
              only:
                - staging
      - aws-ecs/deploy-service-update:
          requires:
            - aws-ecr/build-and-push-image
          family: 'Staging用ファミリー'
          cluster-name: 'Staging用クラスター名'
          container-image-name-updates: 'container=Staging用コンテナ名,tag=${CIRCLE_SHA1}'
          filters: *staging-filter
      # Production用のデプロイ
      - aws-ecr/build-and-push-image
          repo: "Production用リポジトリ"
          tag: "${CIRCLE_SHA1}"
          requires:
            - test
            - lint
          filters: &master-filter
            branches:
              only:
                - master
      - aws-ecs/deploy-service-update:
          requires:
            - aws-ecr/build-and-push-image
          family: 'Production用ファミリー'
          cluster-name: 'Production用クラスター名'
          container-image-name-updates: 'container=Production用コンテナ名,tag=${CIRCLE_SHA1}'
          filters: *master-filter
이런 착오가 생겼다.
Job 'aws-ecs/deploy-service-update' requires 'aws-ecr/build-and-push-image', which is the name of 2 other jobs in workflow 'build'

You can give a job within a workflow an explicit name by adding a `name` key
Orbs에서 정의한, aws-ecs/deploy-service-update는job을 수행하는 전제로 필요한 것, aws-ecr/build-and-push-image는Stage용과 Production용 두 가지이기 때문에 원활한 동작이 불가능하다.
도움말에 따라 nameWorkflow의job로 지정하면 됩니다.
제가 먼저 읽었어요문서. 지금 이 점에 대한 기록이 없는 것 같아요...
2021/914:00 수정
문서에 기재되어 있다. 문서의 해석을 잘못하여 namerequires에서 사용된 것으로 착각했다.job 아래에 name에 사용할 수 있다고 기재된 것 같다requires.@PanonCotta 지적해 주셔서 감사합니다.

수정 후


.circleci/config.yml
version: 2.1
orbs:
  aws-ecr: circleci/[email protected]
  aws-ecs: circleci/[email protected]
# 中略
workflows:
  build:
    jobs:
      # 中略
      # Staging 用のデプロイ
      - aws-ecr/build-and-push-image
          name: "ecr-build-and-push-image-stg"
          repo: "Staging用リポジトリ"
          tag: "${CIRCLE_SHA1}"
          requires:
            - test
            - lint
          filters: &staging-filter
            branches:
              only:
                - staging
      - aws-ecs/deploy-service-update:
          name: "ecs-deploy-stg"
          requires:
            - ecr-build-and-push-image-stg
          family: 'Staging用ファミリー'
          cluster-name: 'Staging用クラスター名'
          container-image-name-updates: 'container=Staging用コンテナ名,tag=${CIRCLE_SHA1}'
          filters: *staging-filter
      # Production用のデプロイ
      - aws-ecr/build-and-push-image
          name: "ecr-build-and-push-image-prod"
          repo: "Production用リポジトリ"
          tag: "${CIRCLE_SHA1}"
          requires:
            - test
            - lint
          filters: &master-filter
            branches:
              only:
                - master
      - aws-ecs/deploy-service-update:
          name: "ecs-deploy-prod"
          requires:
            - ecr-build-and-push-image-prod
          family: 'Production用ファミリー'
          cluster-name: 'Production用クラスター名'
          container-image-name-updates: 'container=Production用コンテナ名,tag=${CIRCLE_SHA1}'
          filters: *master-filter
따라서 ECR의 push 이미지 제작과 ECS의 서비스 전개에 대해 환경별로 구분할 수 있다.
이 설정 방법은 같은job를 재사용하는 동시에 환경에 따라 파라미터를 바꿀 때도 편리하다.
검증을 위해 아래의 샘플을 제작하여 실행하였으며,job1,job2를 재사용할 수 있습니다.
.circleci/config.yml
version: 2.1

executors:
  ruby-executor:
    docker:
      - image: circleci/ruby:3.0.0

jobs:
  job1:
    executor: ruby-executor
    # https://circleci.com/docs/2.0/reusing-config/#authoring-parameterized-jobs
    # Workflow からパラメータを渡すことができる
    parameters:
      env:
        type: string
        default: development
    steps:
      - checkout
      - run: 'ruby --version'
      # パラメータを使う時は、<<parameters.キー>> で呼び出しできる
      - run: 'echo <<parameters.env>>'
  job2:
    executor: ruby-executor
    parameters:
      env:
        type: string
        default: development
    steps:
      - checkout
      - run: 'ruby --version'
      - run: 'echo <<parameters.env>>'

workflows:
  build:
    jobs:
      # master のみ
      - job1:
          name: job1-master
          # env パラメータを production として job にわたす
          env: production
          filters: &master-filter
            branches:
              only:
                - master
      - job2:
          name: job2-master
          env: production
          filters: *master-filter
          requires:
            - job1-master
      # master 以外
      - job1:
          name: job1-non-master
          # env パラメータを指定してないので、job の `<<parameters.env>>` は、
          # default にセットしている、development に置き換わる
          filters: &non-master-filter
            branches:
              ignore:
                - master
      - job2:
          name: job2-non-master
          filters: *non-master-filter
          requires:
            - job1-non-master

총결산


이름을 Workflow Job에 사용하거나 매개변수를 Job에 전달할 수 있습니다.
2.1부터 문서를 보는 분위기.
이전부터 사용된 경우.circleci/config.yml, 환경에 따라 job을 각각 제작
command에는 다음과 같은 예가 있다.
          command: |
            if [ "${CIRCLE_BRANCH}" == "master" ]; then
                bundle exec cap production deploy
            elif [ "${CIRCLE_BRANCH}" == "staging" ]; then
                bundle exec cap staging deploy
            fi
상당히 어렵기 때문에 치밀하게 해야 한다
          command: bundle exec cap <<parameters.env>> deploy
등, 스마트한 씨클리 설정 생활을 하고 싶다.

좋은 웹페이지 즐겨찾기