Menyimpan artefak build di Cloud Storage

Halaman ini menjelaskan cara menyimpan artefak build di Cloud Storage.

Sebaiknya gunakan Artifact Registry untuk menyimpan artefak build. Artifact Registry adalah produk Google Cloud yang dapat Anda integrasikan dengan Cloud Build untuk menyimpan dan mengelola artefak dengan aman di repositori pribadi atau publik. Dengan menyimpan artefak di Artifact Registry, Anda dapat:

Untuk petunjuk cara mengonfigurasi Cloud Build guna menyimpan paket dan image dari build Anda di Artifact Registry, lihat Menyimpan artefak di Artifact Registry.

Menyimpan artefak di Cloud Storage

Untuk menyimpan artefak non-penampung di Cloud Storage, tambahkan kolom artifacts dalam file konfigurasi build dengan lokasi bucket untuk menyimpan artefak dan jalur ke satu atau beberapa artefak:

YAML

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

Dengan,

  • [STORAGE_LOCATION]: Bucket Cloud Storage atau folder dalam bucket tempat Cloud Build harus menyimpan artefak, seperti gs://mybucket atau gs://mybucket/myproject/builds. Untuk menemukan nama bucket yang ada, lihat mencantumkan bucket atau membuat bucket baru.
  • [ARTIFACT_PATH]: Jalur ke satu atau beberapa artefak. [ARTIFACT_PATH] bersifat relatif terhadap direktori kerja Anda. Ini dapat berupa /workspace, yang merupakan direktori kerja default Cloud Build atau direktori kerja yang Anda tetapkan menggunakan kolom dir.

JSON

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

Dengan,

  • [STORAGE_LOCATION]: Bucket Cloud Storage atau folder dalam bucket tempat Cloud Build harus menyimpan artefak, seperti gs://mybucket atau gs://mybucket/myproject/builds. Untuk menemukan nama bucket yang ada, lihat mencantumkan bucket atau membuat bucket baru.
  • [ARTIFACT_PATH]: Jalur ke satu atau beberapa artefak. [ARTIFACT_PATH] bersifat relatif terhadap direktori kerja Anda. Ini dapat berupa /workspace, yang merupakan direktori kerja default Cloud Build atau direktori kerja yang Anda tetapkan menggunakan kolom dir.

Perhatikan peringatan berikut saat menyimpan artefak di Cloud Storage:

  • Anda hanya dapat menentukan satu bucket untuk mengupload artefak dan Anda harus menjadi pemilik bucket. Anda dapat menentukan jalur direktori yang valid di bucket.

  • Anda dapat mengupload sebanyak mungkin artefak, tetapi Anda hanya dapat menentukan maksimal satu ratus jalur artefak.

  • Jika Anda mengupload artefak ke bucket yang sudah memiliki artefak dengan nama yang sama, artefak baru akan menggantikan artefak yang ada. Anda dapat mengaktifkan Pembuatan Versi Objek untuk bucket jika tidak ingin artefak yang lebih baru menggantikan artefak yang ada dengan nama yang sama.

Setelah build berhasil selesai, Anda dapat menemukan hasil upload dalam file manifes JSON yang terletak di [STORAGE_LOCATION]/artifacts-$BUILD_ID.json.

File manifes JSON memiliki kolom berikut:

  • location: ini menentukan lokasi di Cloud Storage tempat artefak disimpan dan berbentuk gs://[STORAGE_LOCATION]/[FILE_NAME]#[GENERATION_NUMBER]. Anda dapat menggunakan nomor generasi untuk mengidentifikasi versi data di bucket Cloud Storage secara unik.
  • file_hash: ini menentukan jenis hash dan nilai. Jenis hash selalu 2, yang menentukan bahwa hash MD5 telah dilakukan.

Contoh artefak

Contoh berikut menunjukkan cara menggunakan kolom Artifacts dalam file konfigurasi build. Dalam semua contoh ini, ganti [VALUES_IN_BRACKETS] dengan nilai yang sesuai.

Mengupload file dan folder

File konfigurasi build di bawah mengupload helloworld.class ke gs://[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"
            ]
        }
    }
}

Untuk mengupload lebih dari satu artefak, tentukan jalur ke setiap artefak yang dipisahkan dengan koma. Contoh berikut mengupload HelloWorld.java, HelloWorld.class, dan cloudbuild.yaml ke gs://[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"
            ]
        }
    }
}

Anda juga dapat mengupload artefak ke jalur direktori yang valid di bucket. Contoh berikut mengupload HelloWorld.java dan HelloWorld.class ke gs://[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"
            ]
        }
    }
}

Menggunakan karakter pengganti untuk mengupload lebih dari satu artefak

Saat mengupload beberapa artefak, Anda dapat menggunakan karakter pengganti di paths untuk menentukan beberapa file.

Contoh berikut menggunakan file bernama classes sebagai argumen, yang berisi nama file .java yang akan dikompilasi. Kemudian, file .class diupload ke bucket Cloud Storage yang ditentukan:

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"
            ]
        }
    }
}

Menggunakan variabel penggantian di lokasi bucket

Anda dapat menggunakan variabel penggantian untuk menentukan folder dalam bucket Cloud Storage. Jika folder yang telah Anda tentukan tidak ada, Cloud Build akan membuatnya untuk Anda.

Contoh di bawah ini mengupload artefak ke jalur Cloud Storage yang menyertakan nama project Google Cloud tempat build dijalankan (seperti 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"
            ]
        }
    }
}

Langkah selanjutnya