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 Anda dengan aman di repositori pribadi atau publik. Dengan menyimpan artefak di Artifact Registry, Anda dapat:
- Kelola metadata penampung dan pindai kerentanan penampung dengan Analisis Artefak.
- Terapkan kebijakan deployment dengan Otorisasi Biner.
- Gunakan streaming gambar di Google Kubernetes Engine, yang sangat bermanfaat untuk image container berukuran besar.
Untuk mengetahui petunjuk cara mengonfigurasi Cloud Build agar dapat 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-container di Cloud Storage, tambahkan kolom artifacts
di file konfigurasi build Anda 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 di dalam bucket tempat Cloud Build harus menyimpan artefak, sepertigs://mybucket
ataugs://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]
relatif terhadap direktori kerja Anda. Ini dapat berupa/workspace
, yang merupakan direktori kerja default Cloud Build atau direktori kerja yang Anda tetapkan menggunakan kolomdir
.
JSON
{
"artifacts": {
"objects": {
"location": [
"[STORAGE_LOCATION]"
],
"paths": [
[
"[ARTIFACT_PATH]"
],
[
"[ARTIFACT_PATH]"
],
"..."
]
}
}
}
Dengan,
[STORAGE_LOCATION]
: Bucket Cloud Storage atau folder di dalam bucket tempat Cloud Build harus menyimpan artefak, sepertigs://mybucket
ataugs://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]
relatif terhadap direktori kerja Anda. Ini dapat berupa/workspace
, yang merupakan direktori kerja default Cloud Build atau direktori kerja yang Anda tetapkan menggunakan kolomdir
.
Perhatikan peringatan berikut saat menyimpan artefak di Cloud Storage:
Anda hanya dapat menentukan satu bucket untuk mengupload artefak dan harus menjadi pemilik bucket. Anda dapat menentukan jalur direktori yang valid dalam bucket.
Anda dapat mengupload berapa pun artefak, tetapi hanya dapat menentukan hingga 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 mengganti artefak yang ada dengan nama yang sama.
Setelah build berhasil selesai, Anda dapat menemukan hasil upload dalam file manifes JSON yang berada di [STORAGE_LOCATION]/artifacts-$BUILD_ID.json
.
File manifes JSON memiliki kolom berikut:
location
: menentukan lokasi di Cloud Storage tempat artefak disimpan dan berbentukgs://[STORAGE_LOCATION]/[FILE_NAME]#[GENERATION_NUMBER]
. Anda dapat menggunakan nomor pembuatan untuk mengidentifikasi versi data dalam bucket Cloud Storage secara unik.file_hash
: atribut ini menentukan jenis hash dan nilainya. Jenis hash selalu 2, yang menentukan bahwa hash MD5 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 ini 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 dalam 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 gsutil di paths
untuk menentukan beberapa file.
Contoh berikut menggunakan file bernama classes
sebagai argumen, yang
berisi nama-nama file .java
yang akan dikompilasi. Kemudian, file .class
akan 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 substitusi di lokasi bucket
Anda dapat menggunakan variabel substitusi untuk menentukan folder dalam bucket Cloud Storage. Jika folder yang ditentukan 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
- Pelajari cara membuat project
Go
. - Pelajari cara memulai build secara manual dan menggunakan pemicu.
- Pelajari cara memecahkan masalah error build.