ビルド アーティファクトの保存

ビルドで生成されたバイナリや tarball などのアーティファクトは、Cloud Storage または限定公開のサードパーティ リポジトリに保存できます。

このページでは、Cloud Storage にビルドのアーティファクトを保存する方法について説明します。コンテナ イメージの保存については、コンテナ イメージのビルドをご覧ください。

アーティファクトを Cloud Storage に保存する

コンテナ以外のアーティファクトを Cloud Storage に保存するには、アーティファクトを保存するバケットの場所と 1 つ以上のアーティファクトへのパスを設定した artifacts フィールドをビルド構成ファイルに追加します。

YAML

artifacts:
  objects:
    location: [STORAGE_LOCATION]
    paths: [[ARTIFACT_PATH],[ARTIFACT_PATH], ...]

ここで

  • [STORAGE_LOCATION]: Cloud Build がアーティファクトを保存する必要のある、Cloud Storage バケットまたはバケット内のフォルダ(gs://mybucketgs://mybucket/some/folder など)。
  • [ARTIFACT_PATH]: 1 つ以上のアーティファクトへのパス。

JSON

{
    "artifacts": {
        "objects": {
            "location": [
                "[STORAGE_LOCATION]"
            ],
            "paths": [
            [
                "[ARTIFACT_PATH]"
            ],
            [
                "[ARTIFACT_PATH]"
            ],
            "..."
            ]
        }
    }
}

ここで

  • [STORAGE_LOCATION]: Cloud Build がアーティファクトを保存する必要のある、Cloud Storage バケットまたはバケット内のフォルダ(gs://mybucketgs://mybucket/some/folder など)。
  • [ARTIFACT_PATH]: 1 つ以上のアーティファクトへのパス。

アーティファクトをアップロードするバケットは 1 つのみ指定でき、バケットのオーナーでなければなりません。バケット内の有効なディレクトリのパスを指定できます。

アーティファクトはいくつでもアップロードできますが、アーティファクトのパスは最大で 100 個しか指定できません。

同じ名前のアーティファクトがすでにあるバケットにアーティファクトをアップロードすると、既存のアーティファクトが新しいアーティファクトに置き換えられます。同じ名前の既存のアーティファクトを新しいアーティファクトに置き換えたくない場合、バケットのオブジェクトのバージョニングを有効にできます。

ビルドが正常に完了した後、[STORAGE_LOCATION]/artifacts-$BUILD_ID.json にある JSON マニフェスト ファイルでアップロードの結果を確認できます。

JSON マニフェスト ファイルには、次のフィールドがあります。

  • location: アーティファクトが保存される Cloud Storage 内の場所を指定します。形式は gs://[STORAGE_LOCATION]/[FILE_NAME]#[GENERATION_NUMBER] です。世代番号を使用すると、Cloud Storage バケット内のデータのバージョンを一意に識別できます。
  • file_hash: ハッシュのタイプと値を指定します。ハッシュタイプは常に 2 で、これは MD5 ハッシュが実行されたことを示します。

アーティファクトの例

次の例は、ビルド構成ファイルで Artifacts フィールドを使用する方法を示しています。これらのすべての例で、[VALUES_IN_BRACKETS] は適切な値に置き換えてください。

ファイルとフォルダをアップロードする

次のビルド構成ファイルでは、helloworld.classgs://[STORAGE_LOCATION]/ にアップロードされます。

YAML

steps:
- name: 'gcr.io/cloud-builders/javac'
  args: ['HelloWorld.java']
artifacts:
  objects:
    location: 'gs://[STORAGE_LOCATION]/'
    paths: ['HelloWorld.class']

JSON

{
    "steps": [
    {
        "name": "gcr.io/cloud-builders/javac",
        "args": [
            "HelloWorld.java"
        ]
    }
    ],
    "artifacts": {
        "objects": {
            "location": "gs://[STORAGE_LOCATION]/",
            "paths": [
                "HelloWorld.class"
            ]
        }
    }
}

複数のアーティファクトをアップロードするには、各アーティファクトへのパスをカンマで区切って指定します。次の例では、HelloWorld.javaHelloWorld.classcloudbuild.yamlgs://[STORAGE_LOCATION]/ にアップロードしています。

YAML

steps:
- name: 'gcr.io/cloud-builders/javac'
  args: ['HelloWorld.java']
artifacts:
  objects:
    location: 'gs://[STORAGE_LOCATION]/'
    paths: ['HelloWorld.java', 'HelloWorld.class', 'cloudbuild.yaml']

JSON

{
    "steps": [
    {
        "name": "gcr.io/cloud-builders/javac",
        "args": [
            "HelloWorld.java"
        ]
    }
    ],
    "artifacts": {
        "objects": {
            "location": "gs://[STORAGE_LOCATION]/",
            "paths": [
                "HelloWorld.java",
                "HelloWorld.class",
                "cloudbuild.yaml"
            ]
        }
    }
}

バケット内の有効なディレクトリ パスにアーティファクトをアップロードすることもできます。次の例では、HelloWorld.javaHelloWorld.classgs://[BUCKET_NAME]/[FOLDER_NAME] にアップロードしています。

YAML

steps:
- name: 'gcr.io/cloud-builders/javac'
  args: ['HelloWorld.java']
artifacts:
  objects:
    location: 'gs://[BUCKET_NAME]/[FOLDER_NAME]'
    paths: ['HelloWorld.java', 'HelloWorld.class']

JSON

{
    "steps": [
    {
        "name": "gcr.io/cloud-builders/javac",
        "args": [
            "HelloWorld.java"
        ]
    }
    ],
    "artifacts": {
        "objects": {
            "location": "gs://[BUCKET_NAME]/[FOLDER_NAME]",
            "paths": [
                "HelloWorld.java",
                "HelloWorld.class"
            ]
        }
    }
}

ワイルドカード文字を使用して複数のアーティファクトをアップロードする

複数のアーティファクトをアップロードする場合、pathsgsutil ワイルドカード文字を使用すると複数のファイルを指定できます。

次の例では、classes という名前のファイルを引数として渡しています。このファイルには、コンパイルする .java ファイルの名前が含まれています。次に .class ファイルを指定の Cloud Storage バケットにアップロードします。

YAML

steps:
- name: 'gcr.io/cloud-builders/javac'
  args: ['@classes']
artifacts:
  objects:
    location: 'gs://[STORAGE_LOCATION]/'
    paths: ['*.class']

JSON

{
    "steps": [
    {
        "name": "gcr.io/cloud-builders/javac",
        "args": [
            "@classes"
        ]
    }
    ],
    "artifacts": {
        "objects": {
            "location": "gs://[STORAGE_LOCATION]/",
            "paths": [
                "*.class"
            ]
        }
    }
}

バケット ロケーションで代入変数を使用する

フォルダが Cloud Storage バケット内にすでに存在する場合、代入変数を使用してバケット内のそのフォルダを指定できます。フォルダが存在しない場合、ビルドでエラーが返されます。

次の例では、ビルドの実行元の Cloud プロジェクトの名前を含む Cloud Storage パス(gs://mybucket/myproject/ など)にアーティファクトをアップロードしています。

YAML

steps:
- name: 'gcr.io/cloud-builders/javac'
  args: ['@classes']
artifacts:
  objects:
    location: 'gs://[BUCKET_NAME]/$PROJECT_ID'
    paths: ['helloworld.class']

JSON

{
    "steps": [
    {
        "name": "gcr.io/cloud-builders/javac",
        "args": [
            "@classes"
        ]
    }
    ],
    "artifacts": {
        "objects": {
            "location": "gs://[BUCKET_NAME]/$PROJECT_ID",
            "paths": [
                "helloworld.class"
            ]
        }
    }
}

Artifact Registry へのアーティファクトの保存

Artifact Registry は Container Registry が進化したものです。スケーラブルで統合されたリポジトリ サービスにアーティファクトを保存できます。これは Docker イメージ、Maven パッケージ、npm パッケージに対応しています。ビルド アーティファクトを Artifact Registry に保存するように Cloud Build を構成する方法については、Cloud Build との統合をご覧ください。

次のステップ