正式なドキュメントは英語版であり、この日本語訳はAI支援翻訳により作成された参考用のものです。日本語訳の一部の内容は人間によるレビューがまだ行われていないため、翻訳のタイミングにより英語版との間に差異が生じることがあります。最新かつ正確な情報については、英語版をご参照ください。

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アーティファクトレジストリリポジトリ:
    • Docker形式。
    • 標準モード。他のリポジトリ形式とモードはサポートされていません。

GoogleアーティファクトレジストリリポジトリをGitLabプロジェクトに接続するには:

  1. GitLabの左側のサイドバーで、検索または移動先を選択して、プロジェクトを見つけます。
  2. 設定 > インテグレーションを選択します。
  3. Googleアーティファクトの管理を選択します。
  4. インテグレーションを有効にするで、有効チェックボックスをオンにします。
  5. フィールドに入力します:
    • Google CloudプロジェクトID: アーティファクトレジストリリポジトリが配置されているGoogle CloudプロジェクトID
    • リポジトリ名: アーティファクトレジストリリポジトリの名前。
    • リポジトリの場所: アーティファクトレジストリリポジトリのGoogle Cloudの場所
  6. 画面の指示に従って、Google Cloud Identity and Access Management (IAM)ポリシーをセットアップします。ポリシーの種類の詳細については、IAMポリシーを参照してください。
  7. 変更を保存を選択します。

これで、サイドバーのデプロイの下にGoogleアーティファクトのレジストリエントリが表示されるはずです。

Googleアーティファクトレジストリに保存されているイメージを表示する

前提要件:

  • Googleアーティファクトレジストリがプロジェクトで設定されている必要があります。

接続されているアーティファクトレジストリリポジトリ内のイメージのリストをGitLab UIに表示するには:

  1. 左側のサイドバーで、検索または移動先を選択して、プロジェクトを見つけます。
  2. デプロイ > Googleアーティファクトのレジストリを選択します。
  3. イメージの詳細を表示するには、イメージを選択します。
  4. Google Cloudコンソールでイメージを表示するには、Google Cloudで開くを選択します。そのアーティファクトレジストリリポジトリを表示するには、必要な権限が必要です。

CI/CD

定義済み変数

アーティファクトレジストリインテグレーションをアクティブ化すると、次の定義済みの環境変数がCI/CDで使用可能になります。これらの環境変数を使用して、接続されているリポジトリにイメージをプルまたはプッシュするなど、アーティファクトレジストリを操作できます。

変数GitLabRunner説明
GOOGLE_ARTIFACT_REGISTRY_PROJECT_ID16.1016.10アーティファクトレジストリリポジトリが配置されているGoogle CloudプロジェクトID。
GOOGLE_ARTIFACT_REGISTRY_REPOSITORY_NAME16.1016.10接続されているアーティファクトレジストリリポジトリの名前。
GOOGLE_ARTIFACT_REGISTRY_REPOSITORY_LOCATION16.1016.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ポリシーを作成できます:

これらの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/app

craneを使用してイメージをリストする

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/app

Dockerでイメージをプルする

次の例は、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.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を使用してイメージをコピーする

次の例では、スタンドアロンの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_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:
    # 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