Halaman ini menjelaskan cara menyimpan artefak build di Cloud Storage.
Sebaiknya gunakan Artifact Registry untuk menyimpan artefak build. Artifact Registry adalah Google Cloud produk yang dapat Anda integrasikan dengan Cloud Build untuk menyimpan dan mengelola artefak Anda secara aman di repositori pribadi atau publik. Menyimpan artefak di Artifact Registry memungkinkan Anda untuk:
- Mengelola metadata container dan memindai kerentanan container dengan Artifact Analysis.
- Menerapkan kebijakan deployment dengan Otorisasi Biner.
- Menggunakan streaming image di Google Kubernetes Engine, yang sangat bermanfaat untuk image container berukuran besar.
Untuk mengetahui petunjuk tentang cara mengonfigurasi Cloud Build untuk 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 artifacts
kolom 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 dalam bucket tempat Cloud Build harus menyimpan artefak, sepertigs://mybucketataugs://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. Jalur 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 dalam bucket tempat Cloud Build harus menyimpan artefak, sepertigs://mybucketataugs://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. Jalur 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 Anda harus menjadi pemilik bucket. Anda dapat menentukan jalur direktori yang valid di bucket.
Anda dapat mengupload artefak dalam jumlah berapa pun, tetapi Anda hanya dapat menentukan hingga seratus 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 Anda tidak ingin artefak yang lebih baru menggantikan artefak yang ada dengan nama yang sama.
Setelah build berhasil diselesaikan, Anda dapat menemukan hasil upload di file manifes JSON yang terletak di [STORAGE_LOCATION]/artifacts-$BUILD_ID.json.
File manifes JSON memiliki kolom berikut:
location: menentukan lokasi di Cloud Storage tempat artefak disimpan dan memiliki formatgs://[STORAGE_LOCATION]/[FILE_NAME]#[GENERATION_NUMBER]. Anda dapat menggunakan nomor generasi untuk mengidentifikasi versi data secara unik di bucket Cloud Storage.file_hash: menentukan jenis hash dan nilainya. Jenis hash selalu 2, yang menentukan bahwa hash MD5 telah dilakukan.
Contoh artefak
Contoh berikut menunjukkan cara menggunakan kolom Artifacts dalam file konfigurasi build. Di semua contoh ini, ganti [VALUES_IN_BRACKETS] dengan nilai yang sesuai.
Mengupload file dan folder
File konfigurasi build di bawah mengupload helloworld.class kegs://[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 ini akan mengupload file .class 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 Anda tentukan tidak ada, Cloud Build akan membuatnya untuk Anda.
Contoh di bawah mengupload artefak ke jalur Cloud Storage yang menyertakan nama project Anda 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 berikutnya
- Pelajari cara mem-build
Goproject. - Pelajari cara memulai build secara manual dan menggunakan pemicu.
- Pelajari cara memecahkan masalah error build.