このページでは、ビルドされたアーティファクトを Artifact Registry リポジトリに保存するよう Cloud Build を構成する方法について説明します。
準備
- ターゲット リポジトリが Artifact Registry に存在しない場合は、新しいリポジトリを作成します。
Cloud Build とリポジトリが異なるプロジェクトにある場合、またはユーザー指定のサービス アカウントを使用してビルドを実行する場合は、Artifact Registry 書き込みロールを付与するを使用して、リポジトリを持つプロジェクト内のビルドサービス アカウントに追加します。
デフォルトの Cloud Build サービス アカウントには、同じ Google Cloud プロジェクト内のリポジトリに対して次の操作を行うためのアクセス権があります。
- アーティファクトのアップロードとダウンロード
- Artifact Registry に gcr.io リポジトリを作成します。
Docker ビルドを構成する
ターゲット リポジトリに権限を付与したら、ビルドを構成できます。
ビルドを構成するには:
ビルド構成ファイルに、イメージをビルドしてタグ付けするステップを追加します。
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 を指定することもできます。
ビルドを実行する準備ができたら、ユーザー定義の置換の値を指定します。たとえば、このコマンドは、次のように置き換えます。
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 リポジトリにアップロードするようにビルドを構成する方法について説明します。
ビルドを構成するには:
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
をタグ名に置き換えます。
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}'
- リポジトリのロケーションにあるリージョン Cloud Build エンドポイントを
ビルドを実行する準備ができたら、ユーザー定義の置換の値を指定します。たとえば、このコマンドは、次のように置き換えます。
us-east1
: リポジトリのロケーションmy-project
: プロジェクト IDmy-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 リポジトリにアップロードするようにビルドを構成する場合について説明します。
ビルドを構成するには:
Maven の認証を設定します。
pom.xml
ファイルで正しいターゲット プロジェクトとリポジトリを指定していることを確認します。Cloud Build ビルド構成ファイルに、Maven を使用してパッケージをアップロードするステップを追加します。
steps: - name: gcr.io/cloud-builders/mvn args: ['deploy']
ビルド構成ファイルの準備ができたら、次のコマンドでビルドを開始します。
gcloud builds submit
Node.js ビルドを構成する
ターゲット リポジトリに権限を付与したら、ビルドを構成できます。次の手順では、Node.js パッケージを npm リポジトリにアップロードするようにビルドを構成する場合について説明します。
ビルドを構成するには:
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
リポジトリを使用する認証のためのアクセス トークンを更新するプロジェクト内の
package.json
ファイルにスクリプトを追加します。"scripts": { "artifactregistry-login": "npx google-artifactregistry-auth" }
ビルド構成ファイルに、パッケージをリポジトリにアップロードするステップを追加します。
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 アプリケーションのビルドをご覧ください。
ビルドを構成するには:
Cloud Build ビルド構成ファイルがあるディレクトリに、次の依存関係を持つ
requirements.txt
という名前のファイルを作成します。twine keyrings.google-artifactregistry-auth
- Twine は、Artifact Registry にパッケージをアップロードするためのものです。
- keyrings.google-artifactregistry-auth は、pip と Twine に対する Artifact Registry での認証を処理する Artifact Registry キーリング バックエンドです。
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 を指定することもできます。
Python リポジトリからパッケージをインストールするには、
pip install
コマンドを実行するステップをビルド構成ファイルに追加します。steps: - name: python entrypoint: pip args: - 'install' - '--index-url' - 'https://${_LOCATION}-python.pkg.dev/$PROJECT_ID/${_REPOSITORY}/simple/' - '${_PACKAGE}' - '--verbose'
このスニペットには、パッケージ名に対する追加の
${_PACKAGE}
置換が含まれています。ビルドを実行する準備ができたら、ユーザー定義の置換の値を指定します。たとえば、このコマンドは、次のように置き換えます。
us-east1
: リポジトリのロケーションmy-repo
: リポジトリ名my-package
: パッケージ名
gcloud builds submit --config=cloudbuild.yaml \ --substitutions=_LOCATION="us-east1",_REPOSITORY="my-repo",_PACKAGE="my-package" .
次のステップ
- Cloud Run にデプロイする方法を学習する
- Google Kubernetes Engine にデプロイする方法方法を学習する