CircleCI로 docker 이미지 빌드 및 푸시하기
소개
github에서 master 브랜치로 merge되었을 때 GCP의 Container Registry에 image를 push한다.
CircleCI 설정
1. CI 실행 파일 만들기
루트 바로 아래에 .circleci 폴더를 만들고 그 안에 config.yml 파일을 만듭니다.
(일단, hello world 하는 것만 실행 파일)
version: 2.1
jobs:
build:
docker:
- image: circleci/ruby:2.6.5
steps:
- checkout
- run: echo "hello world"
2. CircleCI 관리 화면에서 프로젝트 추가
CircleCI 사이트에서 github 로그인하여 대상 리포지토리 추가 및 완료
그리고 hello world 확인!
config.yml에 docker 이미지를 빌드하는 프로세스 작성
1. Gcloud 연계
공식 문서를 참고로 진행
h tps : // / rc ぇ시. 코 m / 두 cs / 그럼 / 2.0 / 오 g ぇ- 맞는 th /
ci 실행 환경에 gcloud sdk 추가
executors:
docker:
- image: google/cloud-sdk
Google Cloud SDK 도구를 사용하기 전에 gcloud를 승인해야 하므로 아래 단계에 따라 서비스 계정 만들기
htps : // c ぉ d. 오, ぇ. 코 m / sdk / 드 cs / 아우 테리 진 g # 우테 조리 진 g_ 우우 th_ 아_세 r
CircleCI에 키 파일을 프로젝트 환경 변수로 추가
https://circleci.com/docs/ko/2.0/env-vars/#%E3%83%97%E3%83%AD%E3%82%B8%E3%82%A7%E3%82%AF% E3%83%88%E5%86%85%E3%81%A7%E7%92%B0%E5%A2%83%E5%A4%89%E6%95%B0%E3%82%92%E8% A8%AD%E5%AE%9A%E3%81%99%E3%82%8B
gcloud를 사용하여 Google Cloud SDK 승인
또, GCR에 push하므로 그 인증도 한다
version: 2.1
jobs:
create_image:
docker:
- image: google/cloud-sdk
steps:
- run:
name: Gcloud Config
command: |
echo $GCLOUD_SERVICE_KEY | gcloud auth activate-service-account --key-file=-
gcloud --quiet config set project ${GOOGLE_PROJECT_ID}
gcloud --quiet config set compute/zone ${GOOGLE_COMPUTE_ZONE}
- run:
name: GCloud Auth configure-docker
command: |
gcloud auth configure-docker --quiet --project ${GOOGLE_PROJECT_ID}
#(workflowsは省略)
실행해 보면, 승인되어 있는 것을 확인할 수 있었다!
2. docker 이미지를 build & push
우선 CI 환경에서 docker를 사용할 수 있도록
무려 setup_remote_docker를 추가하는 것만으로 완료!
version: 2.1
jobs:
create_image:
docker:
- image: google/cloud-sdk
steps:
- run:
name: Gcloud Config
command: |
echo $GCLOUD_SERVICE_KEY | gcloud auth activate-service-account --key-file=-
gcloud --quiet config set project ${GOOGLE_PROJECT_ID}
gcloud --quiet config set compute/zone ${GOOGLE_COMPUTE_ZONE}
- run:
name: GCloud Auth configure-docker
command: |
gcloud auth configure-docker --quiet --project ${GOOGLE_PROJECT_ID}
- setup_remote_docker
#(workflowsは省略)
그런 다음 체크 아웃 한 다음 docker 이미지를 빌드 및 푸시합니다.
version: 2.1
jobs:
create_image:
docker:
- image: google/cloud-sdk
steps:
- run:
name: Gcloud Config
command: |
echo $GCLOUD_SERVICE_KEY | gcloud auth activate-service-account --key-file=-
gcloud --quiet config set project ${GOOGLE_PROJECT_ID}
gcloud --quiet config set compute/zone ${GOOGLE_COMPUTE_ZONE}
- run:
name: GCloud Auth configure-docker
command: |
gcloud auth configure-docker --quiet --project ${GOOGLE_PROJECT_ID}
- setup_remote_docker
- checkout
- run:
name: Docker Build
command: |
docker build . -t gcr.io/${GOOGLE_PROJECT_ID}/gcp-rails_sports-rails_backend:${CIRCLE_SHA1}
- run:
name: Docker Push
command: |
docker push gcr.io/${GOOGLE_PROJECT_ID}/gcp-rails_sports-rails_backend:${CIRCLE_SHA1}
#(workflowsは省略)
build & push 할 수 있는지 확인!
3. master 브랜치에 merge되었을 때만 실행한다
마지막으로 master 때만 create_image 작업을 실행하도록 filter를 추가하여 완성! 🎉
version: 2.1
jobs:
create_image:
docker:
- image: google/cloud-sdk
steps:
- run:
name: Gcloud Config
command: |
echo $GCLOUD_SERVICE_KEY | gcloud auth activate-service-account --key-file=-
gcloud --quiet config set project ${GOOGLE_PROJECT_ID}
gcloud --quiet config set compute/zone ${GOOGLE_COMPUTE_ZONE}
- run:
name: GCloud Auth configure-docker
command: |
gcloud auth configure-docker --quiet --project ${GOOGLE_PROJECT_ID}
- setup_remote_docker
- checkout
- run:
name: Docker Build
command: |
docker build . -t gcr.io/${GOOGLE_PROJECT_ID}/#{任意のイメージ名}:${CIRCLE_SHA1}
- run:
name: Docker Push
command: |
docker push gcr.io/${GOOGLE_PROJECT_ID}/#{任意のイメージ名}:${CIRCLE_SHA1}
workflows:
build:
jobs:
- create_image:
filters:
branches:
only: master
Reference
이 문제에 관하여(CircleCI로 docker 이미지 빌드 및 푸시하기), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/tayu1605/items/8e62317823d6d1fb103b텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)