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용 두 가지이기 때문에 원활한 동작이 불가능하다.도움말에 따라
name
Workflow의job로 지정하면 됩니다.제가 먼저 읽었어요문서. 지금 이 점에 대한 기록이 없는 것 같아요...
2021/914:00 수정
문서에 기재되어 있다. 문서의 해석을 잘못하여
name
가 requires
에서 사용된 것으로 착각했다.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
등, 스마트한 씨클리 설정 생활을 하고 싶다.
Reference
이 문제에 관하여(CicleCI Workflow job에 이름 관리 종속 추가), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/ooharabucyou/items/7cc45da9ea99efcfd80e텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)