CircleCI로 docker 이미지 빌드 및 푸시하기

11766 단어 CircleCI도커gcp

소개



github에서 master 브랜치로 merge되었을 때 GCP의 Container Registry에 image를 push한다.

CircleCI 설정


  • CI 실행 파일 만들기
  • 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 이미지를 빌드하는 프로세스 작성


  • Gcloud 연계
  • docker 이미지를 build & push
  • master 브랜치에 merge되었을 때만 실행한다

  • 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
    

    좋은 웹페이지 즐겨찾기