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 コマンドの手順では、プライベート依存関係をホストする Cloud Build リポジトリに GOPROXY が設定されています。モジュールにパブリック依存関係がある場合は、カンマ区切りの 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 のキーリング バックエンドをインストールします。次に、ビルドした Python ファイルを dist サブディレクトリにアップロードします。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" .
    

次のステップ