구글 아티팩트 관리
- GitLab 16.10에서
google_cloud_support_feature_flag
라는 플래그와 함께 도입되었습니다. 이 기능은 베타입니다.- GitLab.com에서 활성화됨 GitLab 17.1에서. 기능 플래그
google_cloud_support_feature_flag
가 제거되었습니다.
Google Artifact Management 통합을 사용하여
귀하의 GitLab 프로젝트에 Google Artifact Registry 리포지토리를 구성하고 연결할 수 있습니다.
Google Artifact Registry를 프로젝트에 연결한 후,
Google Artifact Registry 리포지토리에서 Docker 및 OCI 이미지를 보고, 푸시하고, 풀 할 수 있습니다.
GitLab 프로젝트에서 Google Artifact Registry 설정하기
전제 조건:
- GitLab 프로젝트에 대해 최소한 Maintainer 역할이 있어야 합니다.
- Artifact Registry 리포지토리에 대한 액세스를 관리할 수 있는 필요한 권한을 가져야 합니다.
- Google Cloud에 인증하기 위해 워크로드 아이덴티티 연합 (WLIF) 풀 및 공급자가 구성되어 있어야 합니다.
- 다음 구성을 가진 Google Artifact Registry 리포지토리:
GitLab 프로젝트에 Google Artifact Registry 리포지토리를 연결하려면:
- GitLab의 왼쪽 사이드바에서 검색 또는 이동을 선택하고 프로젝트를 찾습니다.
- 설정 > 통합을 선택합니다.
- Google Artifact Management를 선택합니다.
- 통합 활성화에서 활성 체크박스를 선택합니다.
- 필드를 완료합니다:
- Google Cloud 프로젝트 ID: Artifact Registry 리포지토리가 위치한 Google Cloud 프로젝트 ID.
- 리포지토리 이름: Artifact Registry 리포지토리의 이름.
- 리포지토리 위치: Artifact Registry 리포지토리의 Google Cloud 위치.
- 화면의 지침에 따라 Google Cloud Identity와 액세스 관리(IAM) 정책을 설정합니다. 정책 유형에 대한 자세한 내용은 IAM 정책을 참조하세요.
- 변경 사항 저장을 선택합니다.
이제 배포 아래 사이드바에 Google Artifact Registry 항목이 표시되어야 합니다.
Google Artifact Registry에 저장된 이미지 보기
전제 조건:
- Google Artifact Registry가 프로젝트에 구성되어 있어야 합니다.
GitLab UI에서 연결된 Artifact Registry 리포지토리의 이미지 목록을 보려면:
- 왼쪽 사이드바에서 검색 또는 이동을 선택하고 프로젝트를 찾습니다.
- 배포 > Google Artifact Registry를 선택합니다.
- 이미지 세부정보를 보려면 이미지를 선택합니다.
- Google Cloud 콘솔에서 이미지를 보려면 Google Cloud에서 열기를 선택합니다. 해당 Artifact Registry 리포지토리를 보려면 필요한 권한이 있어야 합니다.
CI/CD
미리 정의된 변수
Artifact Registry 통합이 활성화되면 다음과 같은 미리 정의된 환경 변수가 CI/CD에서 사용할 수 있습니다.
이 환경 변수를 사용하여 연결된 리포지토리에 이미지를 가져오거나 푸시하는 등 Artifact Registry와 상호 작용할 수 있습니다.
변수 | GitLab | Runner | 설명 |
---|---|---|---|
GOOGLE_ARTIFACT_REGISTRY_PROJECT_ID |
16.10 | 16.10 | Artifact Registry 리포지토리가 위치한 Google Cloud 프로젝트 ID입니다. |
GOOGLE_ARTIFACT_REGISTRY_REPOSITORY_NAME |
16.10 | 16.10 | 연결된 Artifact Registry 리포지토리의 이름입니다. |
GOOGLE_ARTIFACT_REGISTRY_REPOSITORY_LOCATION |
16.10 | 16.10 | 연결된 Artifact Registry 리포지토리의 Google Cloud 위치입니다. |
Google Artifact Registry로 인증하기
파이프라인 실행 중에 Google Artifact Registry로 인증하도록 파이프라인을 구성할 수 있습니다.
GitLab은 구성된 워크로드 정체성 풀 IAM 정책을 사용하고, GOOGLE_APPLICATION_CREDENTIALS
와 CLOUDSDK_AUTH_CREDENTIAL_FILE_OVERRIDE
환경 자격 증명을 채웁니다.
이러한 환경 자격 증명은 gcloud CLI 및 crane와 같은 클라이언트 도구에 의해 자동으로 감지됩니다.
Google Artifact Registry로 인증하려면 프로젝트의 .gitlab-ci.yml
파일에 identity
키워드를 google_cloud
로 설정하여 사용하세요.
IAM 정책
당신의 Google Cloud 프로젝트는 Google Artifact Management 통합을 사용하기 위해 특정 IAM 정책을 가져야 합니다.
이 통합을 설정할 때 화면에서 제공되는 지침에 따라 Google Cloud 프로젝트에서 다음 IAM 정책을 생성하는 단계가 제공됩니다:
- Guest 역할 이상의 GitLab 프로젝트 멤버에게 Artifact Registry Reader 역할 부여
- Developer 역할 이상의 GitLab 프로젝트 멤버에게 Artifact Registry Writer 역할 부여
이러한 IAM 정책을 수동으로 생성하려면 다음 gcloud
명령을 사용하세요. 다음 값을 교체하세요:
-
<your_google_cloud_project_id>
를 Artifact Registry 리포지토리가 위치한 Google Cloud 프로젝트의 ID로 교체하세요. -
<your_workload_identity_pool_id>
를 워크로드 정체성 풀의 ID로 교체하세요. 이는 Google Cloud IAM 통합에서 사용한 것과 동일한 값입니다. -
<your_google_cloud_project_number>
를 워크로드 정체성 풀이 위치한 Google Cloud 프로젝트의 번호로 교체하세요. 이는 Google Cloud IAM 통합에서 사용한 것과 동일한 값입니다.
gcloud projects add-iam-policy-binding '<your_google_cloud_project_id>' \
--member='principalSet://iam.googleapis.com/projects/<your_google_cloud_project_number>/locations/global/workloadIdentityPools/<your_workload_identity_pool_id>/attribute.guest_access/true' \
--role='roles/artifactregistry.reader'
gcloud projects add-iam-policy-binding '<your_google_cloud_project_id>' \
--member='principalSet://iam.googleapis.com/projects/<your_google_cloud_project_number>/locations/global/workloadIdentityPools/<your_workload_identity_pool_id>/attribute.developer_access/true' \
--role='roles/artifactregistry.writer'
사용 가능한 청구 목록은 OIDC 사용자 정의 청구를 참조하세요.
예제
gcloud CLI를 사용하여 이미지 목록 나열하기
list-images:
image: gcr.io/google.com/cloudsdktool/google-cloud-cli:466.0.0-alpine
identity: google_cloud
script:
- gcloud artifacts docker images list $GOOGLE_ARTIFACT_REGISTRY_REPOSITORY_LOCATION-docker.pkg.dev/$GOOGLE_ARTIFACT_REGISTRY_PROJECT_ID/$GOOGLE_ARTIFACT_REGISTRY_REPOSITORY_NAME/app
crane을 사용하여 이미지 목록 나열하기
list-images:
image:
name: gcr.io/go-containerregistry/crane:debug
entrypoint: [""]
identity: google_cloud
before_script:
# https://github.com/google/go-containerregistry/issues/1886에 대한 임시 우회 방법
- wget -q "https://github.com/GoogleCloudPlatform/docker-credential-gcr/releases/download/v2.1.22/docker-credential-gcr_linux_amd64-2.1.22.tar.gz" -O - | tar xz -C /tmp && chmod +x /tmp/docker-credential-gcr && mv /tmp/docker-credential-gcr /usr/bin/
- docker-credential-gcr configure-docker --registries=$GOOGLE_ARTIFACT_REGISTRY_REPOSITORY_LOCATION-docker.pkg.dev
script:
- crane ls $GOOGLE_ARTIFACT_REGISTRY_REPOSITORY_LOCATION-docker.pkg.dev/$GOOGLE_ARTIFACT_REGISTRY_PROJECT_ID/$GOOGLE_ARTIFACT_REGISTRY_REPOSITORY_NAME/app
Docker로 이미지 끌어오기
다음 예제는 Google에서 제공하는 독립형 Docker 자격 증명 도우미로 Docker에 대한 인증을 설정하는 방법을 보여줍니다.
pull-image:
image: docker:24.0.5
identity: google_cloud
services:
- docker:24.0.5-dind
variables:
# 다음 두 변수는 DinD 서비스가 TLS
# 모드로 시작되고 Docker CLI가 API와 올바르게 통신하도록
# 구성됩니다. 이의 중요성에 대한 자세한 내용은
# https://docs.gitlab.com/ee/ci/docker/using_docker_build.html#use-the-docker-executor-with-docker-in-docker에서 확인할 수 있습니다.
DOCKER_HOST: tcp://docker:2376
DOCKER_TLS_CERTDIR: "/certs"
before_script:
- wget -q "https://github.com/GoogleCloudPlatform/docker-credential-gcr/releases/download/v2.1.22/docker-credential-gcr_linux_amd64-2.1.22.tar.gz" -O - | tar xz -C /tmp && chmod +x /tmp/docker-credential-gcr && mv /tmp/docker-credential-gcr /usr/bin/
- docker-credential-gcr configure-docker --registries=$GOOGLE_ARTIFACT_REGISTRY_REPOSITORY_LOCATION-docker.pkg.dev
script:
- docker pull $GOOGLE_ARTIFACT_REGISTRY_REPOSITORY_LOCATION-docker.pkg.dev/$GOOGLE_ARTIFACT_REGISTRY_PROJECT_ID/$GOOGLE_ARTIFACT_REGISTRY_REPOSITORY_NAME/app:v0.1.0
CI/CD 구성 요소를 사용하여 이미지 복사하기
Google은 upload-artifact-registry
CI/CD 구성 요소를 제공하여 GitLab 컨테이너 레지스트리에서 아티팩트 레지스트리로 이미지를 복사하는 데 사용할 수 있습니다.
upload-artifact-registry
구성 요소를 사용하려면, 다음 내용을 .gitlab-ci.yml
에 추가하세요:
include:
- component: gitlab.com/google-gitlab-components/artifact-registry/upload-artifact-registry@main
inputs:
stage: deploy
source: $CI_REGISTRY_IMAGE:$CI_COMMIT_SHORT_SHA
target: $GOOGLE_ARTIFACT_REGISTRY_REPOSITORY_LOCATION-docker.pkg.dev/$GOOGLE_ARTIFACT_REGISTRY_PROJECT_ID/$GOOGLE_ARTIFACT_REGISTRY_REPOSITORY_NAME/$CI_PROJECT_NAME:$CI_COMMIT_SHORT_SHA
자세한 내용은 구성 요소 문서를 참조하세요.
upload-artifact-registry
구성 요소를 사용하면 이미지를 아티팩트 레지스트리로 복사하는 과정을 단순화할 수 있으며, 이 통합을 위한 의도된 방법입니다. Docker 또는 Crane을 사용하려는 경우 다음 예제를 참조하세요.
Docker를 사용하여 이미지 복사
다음 예제에서는 gcloud
CLI를 사용하여 Docker 인증을 설정합니다. 이는 독립 실행형 Docker 자격 증명 헬퍼의 대안입니다.
copy-image:
image: gcr.io/google.com/cloudsdktool/google-cloud-cli:466.0.0-alpine
identity: google_cloud
services:
- docker:24.0.5-dind
variables:
SOURCE_IMAGE: $CI_REGISTRY_IMAGE:v0.1.0
TARGET_IMAGE: $GOOGLE_ARTIFACT_REGISTRY_REPOSITORY_LOCATION-docker.pkg.dev/$GOOGLE_ARTIFACT_REGISTRY_PROJECT_ID/$GOOGLE_ARTIFACT_REGISTRY_REPOSITORY_NAME/app:v0.1.0
DOCKER_HOST: tcp://docker:2375
before_script:
- docker login -u $CI_REGISTRY_USER -p $CI_REGISTRY_PASSWORD $CI_REGISTRY
- gcloud auth configure-docker $GOOGLE_ARTIFACT_REGISTRY_REPOSITORY_LOCATION-docker.pkg.dev
script:
- docker pull $SOURCE_IMAGE
- docker tag $SOURCE_IMAGE $TARGET_IMAGE
- docker push $TARGET_IMAGE
Crane을 사용하여 이미지 복사
copy-image:
image:
name: gcr.io/go-containerregistry/crane:debug
entrypoint: [""]
identity: google_cloud
variables:
SOURCE_IMAGE: $CI_REGISTRY_IMAGE:v0.1.0
TARGET_IMAGE: $GOOGLE_ARTIFACT_REGISTRY_REPOSITORY_LOCATION-docker.pkg.dev/$GOOGLE_ARTIFACT_REGISTRY_PROJECT_ID/$GOOGLE_ARTIFACT_REGISTRY_REPOSITORY_NAME/app:v0.1.0
before_script:
# https://github.com/google/go-containerregistry/issues/1886에 대한 임시 해결 방법
- wget -q "https://github.com/GoogleCloudPlatform/docker-credential-gcr/releases/download/v2.1.22/docker-credential-gcr_linux_amd64-2.1.22.tar.gz" -O - | tar xz -C /tmp && chmod +x /tmp/docker-credential-gcr && mv /tmp/docker-credential-gcr /usr/bin/
- docker-credential-gcr configure-docker --registries=$GOOGLE_ARTIFACT_REGISTRY_REPOSITORY_LOCATION-docker.pkg.dev
script:
- crane auth login -u $CI_REGISTRY_USER -p $CI_REGISTRY_PASSWORD $CI_REGISTRY
- crane copy $SOURCE_IMAGE $TARGET_IMAGE