GitLab.com에서 Docker 이미지를 GoogleContainerRegistry로 푸시
소개
GitLab.com에서 만든 프로젝트의 Docker 이미지를 GCP에서 사용하려면 Google Container Registry로 푸시합니다.
1. [GCP] 어비스 계정 얻기
GitLab에서 GCR에 액세스하기 위한 서비스 계정을 발급합니다.
GCP 프로젝트 > IAM 및 관리 > 서비스 계정 > 서비스 계정을 게시에서 발급합니다.
1-1. 서비스 계정 세부정보
서비스 계정 이름, 서비스 계정 ID 및 서비스 계정 설명을 설정합니다.
여기는 자유롭게 설정해 OK입니다.
1-2. 이 서비스 계정에 프로젝트에 대한 액세스 권한 부여
만든 서비스 계정에 프로젝트에 대한 액세스 권한을 설정합니다.
여기에서는 Project > 편집자의 권한을 설정합니다.
Project > 참조자, Cloud Build > Cloud Build 편집자, 스토리지 > 스토리지 관리자의 3개라도 할 수 있는 것 같습니다만 내 환경에서는 잘 움직이지 않았습니다.
1-3. 사용자가 이 서비스 계정에 액세스하도록 허용
액세스 권한 부여는 무시하고 GitLab에서 서비스 계정에 로그인하는 키를 만듭니다.
종류로 JSON을 선택하고 만들기를 누르면 JSON 키가 다운로드됩니다.
2. [GitLab] 환경 변수 설정
GitLab 프로젝트 > 설정 > CI/CD > 변수 에서 CI에서 사용할 환경 변수를 설정합니다.
설정할 변수는 다음 두 가지입니다.
변수 이름
내용
GCLOUD_SERVICE_KEY
1.에서 취득한 JSON 키의 내용을 copipe
PROJECT_ID_PRODUCTION
GCP 프로젝트 이름
3. [GitLab].gitlab-ci.yml 작성
3-1. Cloud Build를 사용하는 경우
.gitlab-ci.ymlimage: google/cloud-sdk:alpine
services:
- docker:dind
before_script:
- echo $GCLOUD_SERVICE_KEY > ${HOME}/gcloud-service-key.json
- gcloud auth activate-service-account --key-file ${HOME}/gcloud-service-key.json
- gcloud config set project $PROJECT_ID_PRODUCTION
build-master:
stage: build
script:
- gcloud builds submit --tag "asia.gcr.io/$PROJECT_ID_PRODUCTION/$CI_PROJECT_NAME" .
only:
- master
build:
stage: build
script:
- gcloud builds submit --tag "asia.gcr.io/$PROJECT_ID_PRODUCTION/$CI_PROJECT_NAME:$CI_COMMIT_REF_SLUG" .
except:
- master
before_script
에서 gcloud를 인증하고 stage: build
에서 Cloud Build를 시작합니다.gcloud config set project
를 잊으면 권한이 부족하다는 오류가 나오므로 조심하세요. (1패)
3-2. docker push 명령을 사용하는 경우
.gitlab-ci.ymlimage: docker:latest
variables:
DOCKER_DRIVER: overlay
services:
- docker:dind
before_script:
- apk add --update make ca-certificates openssl python
- update-ca-certificates
- wget https://dl.google.com/dl/cloudsdk/release/google-cloud-sdk.tar.gz
- tar zxvf google-cloud-sdk.tar.gz && ./google-cloud-sdk/install.sh --usage-reporting=false --path-update=true
- google-cloud-sdk/bin/gcloud --quiet components update
- google-cloud-sdk/bin/gcloud auth configure-docker
- docker login -u _json_key -p "$GCLOUD_SERVICE_KEY" https://asia.gcr.io
build-master:
stage: build
script:
- docker build --pull -t "asia.gcr.io/$PROJECT_ID_PRODUCTION/$CI_PROJECT_NAME" .
- docker push "asia.gcr.io/$PROJECT_ID_PRODUCTION/$CI_PROJECT_NAME"
only:
- master
build:
stage: build
script:
- docker build --pull -t "asia.gcr.io/$PROJECT_ID_PRODUCTION/$CI_PROJECT_NAME:$CI_COMMIT_REF_SLUG" .
- docker push "asia.gcr.io/$PROJECT_ID_PRODUCTION/$CI_PROJECT_NAME:$CI_COMMIT_REF_SLUG"
except:
- master
google/cloud-sdk:alpine
이미지로 docker build
를 이동하는 것이 더 빠르다고 생각되지만, 잘 움직이지 않았기 때문에 어쩔 수없이 docker:latest
로 gcloud
를 다운로드하고 있습니다.
참고
GitLab에서 GCR에 액세스하기 위한 서비스 계정을 발급합니다.
GCP 프로젝트 > IAM 및 관리 > 서비스 계정 > 서비스 계정을 게시에서 발급합니다.
1-1. 서비스 계정 세부정보
서비스 계정 이름, 서비스 계정 ID 및 서비스 계정 설명을 설정합니다.
여기는 자유롭게 설정해 OK입니다.
1-2. 이 서비스 계정에 프로젝트에 대한 액세스 권한 부여
만든 서비스 계정에 프로젝트에 대한 액세스 권한을 설정합니다.
여기에서는 Project > 편집자의 권한을 설정합니다.
Project > 참조자, Cloud Build > Cloud Build 편집자, 스토리지 > 스토리지 관리자의 3개라도 할 수 있는 것 같습니다만 내 환경에서는 잘 움직이지 않았습니다.
1-3. 사용자가 이 서비스 계정에 액세스하도록 허용
액세스 권한 부여는 무시하고 GitLab에서 서비스 계정에 로그인하는 키를 만듭니다.
종류로 JSON을 선택하고 만들기를 누르면 JSON 키가 다운로드됩니다.
2. [GitLab] 환경 변수 설정
GitLab 프로젝트 > 설정 > CI/CD > 변수 에서 CI에서 사용할 환경 변수를 설정합니다.
설정할 변수는 다음 두 가지입니다.
변수 이름
내용
GCLOUD_SERVICE_KEY
1.에서 취득한 JSON 키의 내용을 copipe
PROJECT_ID_PRODUCTION
GCP 프로젝트 이름
3. [GitLab].gitlab-ci.yml 작성
3-1. Cloud Build를 사용하는 경우
.gitlab-ci.ymlimage: google/cloud-sdk:alpine
services:
- docker:dind
before_script:
- echo $GCLOUD_SERVICE_KEY > ${HOME}/gcloud-service-key.json
- gcloud auth activate-service-account --key-file ${HOME}/gcloud-service-key.json
- gcloud config set project $PROJECT_ID_PRODUCTION
build-master:
stage: build
script:
- gcloud builds submit --tag "asia.gcr.io/$PROJECT_ID_PRODUCTION/$CI_PROJECT_NAME" .
only:
- master
build:
stage: build
script:
- gcloud builds submit --tag "asia.gcr.io/$PROJECT_ID_PRODUCTION/$CI_PROJECT_NAME:$CI_COMMIT_REF_SLUG" .
except:
- master
before_script
에서 gcloud를 인증하고 stage: build
에서 Cloud Build를 시작합니다.gcloud config set project
를 잊으면 권한이 부족하다는 오류가 나오므로 조심하세요. (1패)
3-2. docker push 명령을 사용하는 경우
.gitlab-ci.ymlimage: docker:latest
variables:
DOCKER_DRIVER: overlay
services:
- docker:dind
before_script:
- apk add --update make ca-certificates openssl python
- update-ca-certificates
- wget https://dl.google.com/dl/cloudsdk/release/google-cloud-sdk.tar.gz
- tar zxvf google-cloud-sdk.tar.gz && ./google-cloud-sdk/install.sh --usage-reporting=false --path-update=true
- google-cloud-sdk/bin/gcloud --quiet components update
- google-cloud-sdk/bin/gcloud auth configure-docker
- docker login -u _json_key -p "$GCLOUD_SERVICE_KEY" https://asia.gcr.io
build-master:
stage: build
script:
- docker build --pull -t "asia.gcr.io/$PROJECT_ID_PRODUCTION/$CI_PROJECT_NAME" .
- docker push "asia.gcr.io/$PROJECT_ID_PRODUCTION/$CI_PROJECT_NAME"
only:
- master
build:
stage: build
script:
- docker build --pull -t "asia.gcr.io/$PROJECT_ID_PRODUCTION/$CI_PROJECT_NAME:$CI_COMMIT_REF_SLUG" .
- docker push "asia.gcr.io/$PROJECT_ID_PRODUCTION/$CI_PROJECT_NAME:$CI_COMMIT_REF_SLUG"
except:
- master
google/cloud-sdk:alpine
이미지로 docker build
를 이동하는 것이 더 빠르다고 생각되지만, 잘 움직이지 않았기 때문에 어쩔 수없이 docker:latest
로 gcloud
를 다운로드하고 있습니다.
참고
3-1. Cloud Build를 사용하는 경우
.gitlab-ci.yml
image: google/cloud-sdk:alpine
services:
- docker:dind
before_script:
- echo $GCLOUD_SERVICE_KEY > ${HOME}/gcloud-service-key.json
- gcloud auth activate-service-account --key-file ${HOME}/gcloud-service-key.json
- gcloud config set project $PROJECT_ID_PRODUCTION
build-master:
stage: build
script:
- gcloud builds submit --tag "asia.gcr.io/$PROJECT_ID_PRODUCTION/$CI_PROJECT_NAME" .
only:
- master
build:
stage: build
script:
- gcloud builds submit --tag "asia.gcr.io/$PROJECT_ID_PRODUCTION/$CI_PROJECT_NAME:$CI_COMMIT_REF_SLUG" .
except:
- master
before_script
에서 gcloud를 인증하고 stage: build
에서 Cloud Build를 시작합니다.gcloud config set project
를 잊으면 권한이 부족하다는 오류가 나오므로 조심하세요. (1패)3-2. docker push 명령을 사용하는 경우
.gitlab-ci.yml
image: docker:latest
variables:
DOCKER_DRIVER: overlay
services:
- docker:dind
before_script:
- apk add --update make ca-certificates openssl python
- update-ca-certificates
- wget https://dl.google.com/dl/cloudsdk/release/google-cloud-sdk.tar.gz
- tar zxvf google-cloud-sdk.tar.gz && ./google-cloud-sdk/install.sh --usage-reporting=false --path-update=true
- google-cloud-sdk/bin/gcloud --quiet components update
- google-cloud-sdk/bin/gcloud auth configure-docker
- docker login -u _json_key -p "$GCLOUD_SERVICE_KEY" https://asia.gcr.io
build-master:
stage: build
script:
- docker build --pull -t "asia.gcr.io/$PROJECT_ID_PRODUCTION/$CI_PROJECT_NAME" .
- docker push "asia.gcr.io/$PROJECT_ID_PRODUCTION/$CI_PROJECT_NAME"
only:
- master
build:
stage: build
script:
- docker build --pull -t "asia.gcr.io/$PROJECT_ID_PRODUCTION/$CI_PROJECT_NAME:$CI_COMMIT_REF_SLUG" .
- docker push "asia.gcr.io/$PROJECT_ID_PRODUCTION/$CI_PROJECT_NAME:$CI_COMMIT_REF_SLUG"
except:
- master
google/cloud-sdk:alpine
이미지로 docker build
를 이동하는 것이 더 빠르다고 생각되지만, 잘 움직이지 않았기 때문에 어쩔 수없이 docker:latest
로 gcloud
를 다운로드하고 있습니다.참고
Reference
이 문제에 관하여(GitLab.com에서 Docker 이미지를 GoogleContainerRegistry로 푸시), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/proudust/items/d94c60ec69dead927954텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)