Artifact Registry にアーティファクトを保存する

このページでは、ビルドされたアーティファクトを Artifact Registry リポジトリに保存するよう Cloud Build を構成する方法について説明します。

準備

  1. ターゲット リポジトリが Artifact Registry に存在しない場合は、新しいリポジトリを作成します
  2. Cloud Build とリポジトリが異なるプロジェクトにある場合、またはユーザー指定のサービス アカウントを使用してビルドを実行する場合は、Artifact Registry 書き込みロールを付与するを使用して、リポジトリを持つプロジェクト内のビルドサービス アカウントに追加します。

    デフォルトの Cloud Build サービス アカウントには、同じ Google Cloud プロジェクト内のリポジトリに対して次の操作を行うためのアクセス権があります。

    • アーティファクトのアップロードとダウンロード
    • Artifact Registry に gcr.io リポジトリを作成します。

Docker ビルドを構成する

ターゲット リポジトリに権限を付与したら、ビルドを構成できます。

ビルドを構成するには:

  1. ビルド構成ファイルに、イメージをビルドしてタグ付けするステップを追加します。

    steps:
    - name: 'gcr.io/cloud-builders/docker'
      args: [ 'build', '-t', '${_LOCATION}-docker.pkg.dev/$PROJECT_ID/${_REPOSITORY}/${_IMAGE}', '.' ]
    images:
    - '${_LOCATION}-docker.pkg.dev/$PROJECT_ID/${_REPOSITORY}/${_IMAGE}'
    

    このスニペットでは Cloud Build の置換を使用しています。この方法は、同じビルド構成ファイルを使用して、さまざまな環境(テスト、ステージング、本番環境など)のリポジトリにイメージを push する場合に役立ちます。

    • ${_LOCATION}${_REPOSITORY}${_IMAGE} は、リポジトリのロケーション、リポジトリ名、イメージのユーザー定義の置換です。これらの変数の値はビルド時に指定します。
    • $PROJECT_ID は、Cloud Build がビルドの Google Cloud プロジェクト ID で解決するデフォルトの置換です。

      • gcloud builds submit コマンドを実行すると、Cloud Build は gcloud セッションでアクティブなプロジェクト ID を使用します。
      • ビルドトリガーを使用する場合、Cloud Build は Cloud Build が実行されているプロジェクトの ID を使用します。

      または、$PROJECT_ID の代わりにユーザー定義の置換を使用して、ビルド時にプロジェクト ID を指定することもできます。

  2. ビルドを実行する準備ができたら、ユーザー定義の置換の値を指定します。たとえば、このコマンドは、次のように置き換えます。

    • us-east1: リポジトリのロケーション
    • my-repo: リポジトリ名
    • my-image: イメージ名
    gcloud builds submit --config=cloudbuild.yaml \
      --substitutions=_LOCATION="us-east1",_REPOSITORY="my-repo",_IMAGE="my-image" .
    

Go ビルドを構成する

ターゲット リポジトリに権限を付与したら、ビルドを構成できます。次の手順では、Go モジュールを Go リポジトリにアップロードするようにビルドを構成する方法について説明します。

ビルドを構成するには:

  1. Go モジュールをビルドの Go リポジトリにアップロードするには、ビルド構成ファイルに次の手順‏を追加します。

    steps:
    - name: gcr.io/cloud-builders/gcloud
    args:
    - 'artifacts'
    - 'go'
    - 'upload'
    - '--project=$PROJECT_ID'
    - '--location=${_LOCATION}'
    - '--repository=${_REPOSITORY}'
    - '--module-path=${_MODULE_PATH}'
    - '--version=$TAG_NAME'
    

    ビルド構成ファイルには、Cloud Build の置換が含まれています。この方法は、同じビルド構成ファイルを使用して、さまざまな環境(テスト、ステージング、本番環境など)のリポジトリにパッケージをアップロードする場合に役立ちます。

    • ${_LOCATION}${_REPOSITORY}${_MODULE_PATH} は、リポジトリのロケーション、リポジトリ名、モジュールパスのユーザー定義の置換です。これらの変数の値はビルド時に指定します。
    • $PROJECT_ID$TAG_NAMEデフォルトの置換で、Cloud Build が次のように置き換えます。

      • $PROJECT_ID は、ビルドの Google Cloud プロジェクト ID に置き換えられます。

        • gcloud builds submit コマンドを実行すると、Cloud Build は gcloud セッションでアクティブなプロジェクト ID を使用します。
        • ビルドトリガーを使用する場合、Cloud Build は Cloud Build が実行されているプロジェクトの ID を使用します。

        または、$PROJECT_ID の代わりにユーザー定義の置換を使用して、ビルド時にプロジェクト ID を指定することもできます。

      • Git タグをバージョン番号として使用する Go の規則をサポートするために、$TAG_NAME をタグ名に置き換えます。

  2. Go リポジトリからパッケージをインストールするには、ビルド構成ファイルに次の処理を行うための手順を追加します。

    • リポジトリのロケーションにあるリージョン Cloud Build エンドポイントを .netrc ファイルに追加します。
    • 認証情報ヘルパーツールを実行して OAuth トークンを更新します。
    • go run コマンドを実行します。これは、モジュールをコンパイルするには go build、テストを実行するには go test に、依存関係をダウンロードするには go mod tidy に変更することもできます。

    go コマンド ステップの場合、GOPROXY は、限定公開の依存関係をホストする Cloud Build リポジトリに設定されます。モジュールに公開依存関係がある場合は、カンマ区切りの GOPROXY リストに公開プロキシを追加できます。

    steps:
    - name: golang
      entrypoint: go
      args: ['run', 'github.com/GoogleCloudPlatform/artifact-registry-go-tools/cmd/auth@v0.1.0', 'add-locations', '--locations=${_LOCATION}']
      env:
      # Set GOPROXY to the public proxy to pull the credential helper tool
      - 'GOPROXY=https://proxy.golang.org'
    - name: golang
      entrypoint: go
      args: ['run', 'github.com/GoogleCloudPlatform/artifact-registry-go-tools/cmd/auth@v0.1.0', 'refresh']
      env:
      # Set GOPROXY to the public proxy to pull the credential helper tool
      - 'GOPROXY=https://proxy.golang.org'
    - name: golang
      entrypoint: go
      args: ['run', '.']
      env:
      - 'GOPROXY=https://${_LOCATION}-go.pkg.dev/${_PROJECT_ID}/${_REPOSITORY}'
    options:
      env:
      # Disable GO sumdb checks for private modules.
      - 'GONOSUMDB=${_MODULE_PATH}'
    
  3. ビルドを実行する準備ができたら、ユーザー定義の置換の値を指定します。たとえば、このコマンドは、次のように置き換えます。

    • us-east1: リポジトリのロケーション
    • my-project: プロジェクト ID
    • my-repo: リポジトリ名
    • example.com/greetings: モジュール パス
    gcloud builds submit --config=cloudbuild.yaml \
      --substitutions=_LOCATION="us-east1",_PROJECT_ID="my-project",_REPOSITORY="my-repo",_MODULE_PATH="example.com/greetings" .
    

Java ビルドを構成する

ターゲット リポジトリに権限を付与したら、ビルドを構成できます。次の手順では、Java パッケージを Maven リポジトリにアップロードするようにビルドを構成する場合について説明します。

ビルドを構成するには:

  1. Maven の認証を設定します。pom.xml ファイルで正しいターゲット プロジェクトとリポジトリを指定していることを確認します。

  2. Cloud Build ビルド構成ファイルに、Maven を使用してパッケージをアップロードするステップを追加します。

    steps:
    - name: gcr.io/cloud-builders/mvn
      args: ['deploy']
    
  3. ビルド構成ファイルの準備ができたら、次のコマンドでビルドを開始します。

    gcloud builds submit
    

Node.js ビルドを構成する

ターゲット リポジトリに権限を付与したら、ビルドを構成できます。次の手順では、Node.js パッケージを npm リポジトリにアップロードするようにビルドを構成する場合について説明します。

ビルドを構成するには:

  1. Artifact Registry リポジトリを Node.js プロジェクトの .npmrc ファイルに追加します。このファイルは、package.json ファイルがあるディレクトリに配置されます。

    @SCOPE:registry=https://LOCATION-npm.pkg.dev/PROJECT_ID/REPOSITORY
    //LOCATION-npm.pkg.dev/PROJECT_ID/REPOSITORY/:always-auth=true
    
    • SCOPE-NAME は、リポジトリに関連付ける npm スコープの名前です。スコープを使用すると、常に正しいリポジトリからパッケージを公開してインストールできます。
    • PROJECT_ID はユーザーの Google Cloud プロジェクト ID です。
    • LOCATION は、リポジトリのリージョンまたはマルチリージョンのロケーションです。
    • REPOSITORY はリポジトリの名前です。
  2. リポジトリを使用する認証のためのアクセス トークンを更新するプロジェクト内の package.json ファイルにスクリプトを追加します。

    "scripts": {
     "artifactregistry-login": "npx google-artifactregistry-auth"
    }
    
  1. ビルド構成ファイルに、パッケージをリポジトリにアップロードするステップを追加します。

    steps:
    - name: gcr.io/cloud-builders/npm
      args: ['run', 'artifactregistry-login']
    - name: gcr.io/cloud-builders/npm
      args: ['publish', '${_PACKAGE}']
    

    ${_PACKAGE} は、Node.js プロジェクト ディレクトリを表す Cloud Build の置換です。ビルドを実行するコマンドの実行時にディレクトリを指定できます。

    たとえば、次のコマンドは、src というディレクトリからパッケージをアップロードします。

    gcloud builds submit --config=cloudbuild.yaml \
        --substitutions=_PACKAGE="src" .
    

Python ビルドを構成する

ターゲット リポジトリに権限を付与したら、ビルドを構成できます。次の手順では、Python パッケージを Python リポジトリにアップロードし、pip を使用してパッケージをインストールするようにビルドを構成する場合について説明します。

Python アプリケーションをビルドしてコンテナ化し、Docker リポジトリに push するには、Cloud Build ドキュメントの Python アプリケーションのビルドをご覧ください。

ビルドを構成するには:

  1. Cloud Build ビルド構成ファイルがあるディレクトリに、次の依存関係を持つ requirements.txt という名前のファイルを作成します。

    twine
    keyrings.google-artifactregistry-auth
    
    • Twine は、Artifact Registry にパッケージをアップロードするためのものです。
    • keyrings.google-artifactregistry-auth は、pip と Twine に対する Artifact Registry での認証を処理する Artifact Registry キーリング バックエンドです。
  2. Python パッケージをビルドの Python リポジトリにアップロードするには、ビルド構成ファイルに次のステップを追加します。

    steps:
    - name: python
      entrypoint: pip
      args: ["install", "-r", "requirements.txt", "--user"]
    - name: python
      entrypoint: python
      args:
      - '-m'
      - 'twine'
      - 'upload'
      - '--repository-url'
      - 'https://${_LOCATION}-python.pkg.dev/$PROJECT_ID/${_REPOSITORY}/'
      - 'dist/*'
    

    このスニペットでは、最初の手順で Twine と Artifact Registry キーリング バックエンドがインストールされます。2 番目の手順では、dist サブディレクトリ内のビルド済み Python ファイルをアップロードします。スニペットと一致しない場合は、requirements.txt とビルド済み Python ファイルのパスを調整します。

    リポジトリパスには、Cloud Build の置換が含まれています。この方法は、同じビルド構成ファイルを使用して、さまざまな環境(テスト、ステージング、本番環境など)のリポジトリにパッケージをアップロードする場合に役立ちます。

    • ${_LOCATION}${_REPOSITORY} は、リポジトリのロケーション、リポジトリ名、パッケージ名に関するユーザー定義の置換です。これらの変数の値はビルド時に指定します。
    • $PROJECT_ID は、Cloud Build がビルドの Google Cloud プロジェクト ID で解決するデフォルトの置換です。

      • gcloud builds submit コマンドを実行すると、Cloud Build は gcloud セッションでアクティブなプロジェクト ID を使用します。
      • ビルドトリガーを使用する場合、Cloud Build は Cloud Build が実行されているプロジェクトの ID を使用します。

      または、$PROJECT_ID の代わりにユーザー定義の置換を使用して、ビルド時にプロジェクト ID を指定することもできます。

  3. Python リポジトリからパッケージをインストールするには、pip install コマンドを実行するステップをビルド構成ファイルに追加します。

      steps:
      - name: python
        entrypoint: pip
        args:
        - 'install'
        - '--index-url'
        - 'https://${_LOCATION}-python.pkg.dev/$PROJECT_ID/${_REPOSITORY}/simple/'
        - '${_PACKAGE}'
        - '--verbose'
    

    このスニペットには、パッケージ名に対する追加の ${_PACKAGE} 置換が含まれています。

  4. ビルドを実行する準備ができたら、ユーザー定義の置換の値を指定します。たとえば、このコマンドは、次のように置き換えます。

    • us-east1: リポジトリのロケーション
    • my-repo: リポジトリ名
    • my-package: パッケージ名
    gcloud builds submit --config=cloudbuild.yaml \
      --substitutions=_LOCATION="us-east1",_REPOSITORY="my-repo",_PACKAGE="my-package" .
    

次のステップ