Google Artifact Management
- プラン: Free、Premium、Ultimate
- 提供形態: GitLab.com
GoogleアーティファクトManagementインテグレーションを使用すると、Googleアーティファクトレジストリリポジトリを設定し、GitLabプロジェクトに接続できます。
Googleアーティファクトレジストリをプロジェクトに接続すると、Googleアーティファクトレジストリリポジトリ内のDockerおよびOCIイメージを表示、プッシュ、およびプルできます。
GitLabプロジェクトでGoogleアーティファクトレジストリをセットアップする
前提要件:
- 少なくともGitLabプロジェクトのメンテナーロールを持っている必要があります。
- アーティファクトレジストリリポジトリを使用して、Google Cloudプロジェクトへのアクセスを管理するには、必要な権限が必要です。
- Google Cloudへの認証を行うには、ワークロードID連携 (WLIF) プールとプロバイダーを設定する必要があります。
- 次の設定のGoogleアーティファクトレジストリリポジトリ:
GoogleアーティファクトレジストリリポジトリをGitLabプロジェクトに接続するには:
- GitLabの左側のサイドバーで、検索または移動先を選択して、プロジェクトを見つけます。
- 設定 > インテグレーションを選択します。
- Googleアーティファクトの管理を選択します。
- インテグレーションを有効にするで、有効チェックボックスをオンにします。
- フィールドに入力します:
- Google CloudプロジェクトID: アーティファクトレジストリリポジトリが配置されているGoogle CloudプロジェクトID。
- リポジトリ名: アーティファクトレジストリリポジトリの名前。
- リポジトリの場所: アーティファクトレジストリリポジトリのGoogle Cloudの場所。
- 画面の指示に従って、Google Cloud Identity and Access Management (IAM)ポリシーをセットアップします。ポリシーの種類の詳細については、IAMポリシーを参照してください。
- 変更を保存を選択します。
これで、サイドバーのデプロイの下にGoogleアーティファクトのレジストリエントリが表示されるはずです。
Googleアーティファクトレジストリに保存されているイメージを表示する
前提要件:
- Googleアーティファクトレジストリがプロジェクトで設定されている必要があります。
接続されているアーティファクトレジストリリポジトリ内のイメージのリストをGitLab UIに表示するには:
- 左側のサイドバーで、検索または移動先を選択して、プロジェクトを見つけます。
- デプロイ > Googleアーティファクトのレジストリを選択します。
- イメージの詳細を表示するには、イメージを選択します。
- Google Cloudコンソールでイメージを表示するには、Google Cloudで開くを選択します。そのアーティファクトレジストリリポジトリを表示するには、必要な権限が必要です。
CI/CD
定義済み変数
アーティファクトレジストリインテグレーションをアクティブ化すると、次の定義済みの環境変数がCI/CDで使用可能になります。これらの環境変数を使用して、接続されているリポジトリにイメージをプルまたはプッシュするなど、アーティファクトレジストリを操作できます。
| 変数 | GitLab | Runner | 説明 |
|---|---|---|---|
GOOGLE_ARTIFACT_REGISTRY_PROJECT_ID | 16.10 | 16.10 | アーティファクトレジストリリポジトリが配置されているGoogle CloudプロジェクトID。 |
GOOGLE_ARTIFACT_REGISTRY_REPOSITORY_NAME | 16.10 | 16.10 | 接続されているアーティファクトレジストリリポジトリの名前。 |
GOOGLE_ARTIFACT_REGISTRY_REPOSITORY_LOCATION | 16.10 | 16.10 | 接続されているアーティファクトレジストリリポジトリのGoogle Cloudの場所。 |
Googleアーティファクトレジストリで認証する
パイプラインの実行中にGoogleアーティファクトレジストリで認証するようにパイプラインを設定できます。GitLabは、設定されたワークロードID IAMポリシーを使用し、GOOGLE_APPLICATION_CREDENTIALSおよびCLOUDSDK_AUTH_CREDENTIAL_FILE_OVERRIDEの認証情報を入力された状態にします。これらの認証情報は、gcloudコマンドラインインターフェースやcraneなどのクライアントツールによって自動的に検出されます。
Googleアーティファクトレジストリで認証するには、プロジェクトの.gitlab-ci.ymlファイルで、google_cloudに設定されたidentityキーワードを使用します。
IAMポリシー
Google Cloudプロジェクトには、GoogleアーティファクトManagementインテグレーションを使用するための特定のIAMポリシーが必要です。このインテグレーションを設定すると、画面の指示に従って、Google Cloudプロジェクトで次のIAMポリシーを作成できます:
- アーティファクトレジストリReaderロールを、ゲストロール以上のGitLabプロジェクトメンバーに付与します。
- アーティファクトレジストリWriterロールを、デベロッパーロール以上のGitLabプロジェクトメンバーに付与します。
これらのIAMポリシーを手動で作成するには、次のgcloudコマンドを使用します。これらの値を置き換えます:
<your_google_cloud_project_id>を、アーティファクトレジストリリポジトリが配置されているGoogle CloudプロジェクトのIDに置き換えます。<your_workload_identity_pool_id>を、ワークロードIDプールのIDに置き換えます。これは、Google Cloud IAMインテグレーションに使用されるのと同じ値です。<your_google_cloud_project_number>を、ワークロードIDプールが配置されている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コマンドラインインターフェースを使用してイメージをリストする
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/appcraneを使用してイメージをリストする
list-images:
image:
name: gcr.io/go-containerregistry/crane:debug
entrypoint: [""]
identity: google_cloud
before_script:
# Temporary workaround for 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/appDockerでイメージをプルする
次の例は、Googleが提供するスタンドアロンのDocker認証情報ヘルパーを使用して、Dockerの認証をセットアップする方法を示しています。
pull-image:
image: docker:24.0.5
identity: google_cloud
services:
- docker:24.0.5-dind
variables:
# The following two variables ensure that the DinD service starts in TLS
# mode and that the Docker CLI is properly configured to communicate with
# the API. More details about the importance of this can be found at
# 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.0CI/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を使用してイメージをコピーする
次の例では、スタンドアロンのDocker認証情報ヘルパーの代わりに、gcloud CLIを使用して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_IMAGECraneを使用してイメージをコピーする
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:
# Temporary workaround for 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