Anda dapat menentukan urutan eksekusi langkah-langkah build. Secara default, langkah build berjalan secara berurutan, tetapi Anda dapat mengonfigurasinya agar berjalan secara serentak.
Halaman ini menjelaskan cara mengonfigurasi urutan langkah build.
Urutan langkah build dan dependensi
Gunakan kolom waitFor
dalam langkah build untuk menentukan langkah mana yang harus dijalankan sebelum
langkah build dijalankan. Jika tidak ada nilai yang diberikan untuk waitFor
, langkah build
akan menunggu semua langkah build sebelumnya dalam permintaan build berhasil diselesaikan
sebelum dijalankan.
Untuk menjalankan langkah build segera pada waktu build, gunakan -
di kolom waitFor
.
Urutan langkah build di kolom steps
berkaitan dengan urutan
langkah yang dijalankan. Langkah akan berjalan secara berurutan atau serentak berdasarkan
dependensi yang ditentukan di kolom waitFor
.
Langkah bergantung pada setiap id
dalam waitFor
-nya dan tidak akan diluncurkan hingga
setiap dependensi berhasil diselesaikan.
Langkah tanpa kolom waitFor
opsional (atau dengan waitFor
kosong) akan
menunggu semua langkah sebelumnya berhasil diselesaikan sebelum dieksekusi. Oleh karena itu,
jika tidak ada langkah yang berisi id
di kolom waitFor
-nya, semua langkah akan dieksekusi
secara berurutan sesuai urutan yang ditentukan.
Langkah-langkah dapat bergantung pada awal build dengan membuat waitFor
hanya berisi
-
. Dengan mendeklarasikan bahwa langkah hanya bergantung pada -
, langkah tersebut langsung berjalan
saat build dimulai. Langkah pertama yang ditentukan secara implisit bergantung pada awal.
Cuplikan berikut menunjukkan konfigurasi build dengan dua langkah yang berjalan secara berurutan:
YAML
steps:
- name: foo
- name: bar
JSON
{
"steps": [{
"name": "foo"
},
{
"name": "bar"
}
]
}
Cuplikan berikut menunjukkan dua langkah serentak yang keduanya bergantung pada awal;
langkah ketiga menunggu dua langkah pertama berhasil diselesaikan sebelum
diluncurkan. Build serentak ini menjalankan langkah A
dan B
di awal
build. Langkah ketiga akan menunggu secara implisit hingga kedua langkah sebelumnya
selesai sebelum dimulai. Contoh ini dapat disederhanakan dengan menghapus kolom id
, yang tidak direferensikan dalam waitFor
berikutnya.
YAML
steps:
- name: foo
id: A
- name: bar
id: B
waitFor: ['-']
- name: baz
JSON
{
"steps": [
{
"name": "foo",
"id": "A"
},
{
"name": "bar",
"id": "B",
"waitFor": ["-"]
},
{
"name": "baz"
}
]
}
Cuplikan berikut menunjukkan langkah serentak yang bergantung pada langkah
sebelumnya. Langkah A
langsung berjalan saat build dimulai. Langkah B
dan C
dijalankan
secara serentak setelah A
berhasil diselesaikan. Perhatikan bahwa kolom id
dan
waitFor
di langkah B
, serta kolom id
di langkah C
, dapat dihilangkan
tanpa mengubah urutan eksekusi.
YAML
steps:
- name: foo
id: A
- name: bar
id: B
waitFor:
- A
- name: baz
id: C
waitFor:
- A
JSON
{
"steps": [
{
"name": "foo",
"id": "A"
},
{
"name": "bar",
"id": "B",
"waitFor": [
"A"
]
},
{
"name": "baz",
"id": "C",
"waitFor": [
"A"
]
}
]
}
Contoh
Contoh di bawah memanggil langkah gsutil
dan wget
secara serentak.
Setelah langkah-langkah ini selesai, langkah ubuntu
akan dipanggil.
YAML
steps:
# Download the binary and the data in parallel.
- name: 'gcr.io/cloud-builders/wget'
args: ['https://example.com/binary']
- name: 'gcr.io/cloud-builders/gsutil'
args: ['cp', 'gs://$PROJECT_ID-data/rawdata.tgz', '.']
waitFor: ['-'] # The '-' indicates that this step begins immediately.
# Run the binary on the data, once both are downloaded.
- name: 'ubuntu'
args: ['./binary', 'rawdata.tgz']
JSON
{
"steps": [
{
"name": "gcr.io/cloud-builders/wget",
"args": [
"https://example.com/binary"
]
},
{
"name": "gcr.io/cloud-builders/gsutil",
"args": [
"cp",
"gs://$PROJECT_ID-data/rawdata.tgz",
"."
],
"waitFor": [
"-"
]
},
{
"name": "ubuntu",
"args": [
"./binary",
"rawdata.tgz"
]
}
]
}
Contoh di bawah menggunakan kolom id
untuk mengidentifikasi langkah-langkah build tertentu. Nilai
dari id
digunakan di waitFor
untuk menentukan urutan langkah build:
- Pertama, langkah
fetch-resources
menggunakangsutil
untuk menyalin resource lokal dari Cloud Storage. Secara bersamaan,go
membuat, menguji, dan menginstal kode sumber. Kemudian, langkah build
docker
akan mem-build image setelah semua langkah lainnya selesai.
YAML
steps:
- name: 'gcr.io/cloud-builders/go'
args: ['generate']
- name: 'gcr.io/cloud-builders/go'
args: ['test', './...']
- name: 'gcr.io/cloud-builders/go'
args: ['install', 'mytarget']
id: 'go-install'
- name: 'gcr.io/cloud-builders/gsutil'
args: ['cp', '-r', './somefiles', 'gs://my-resource-bucket/somefiles']
waitFor: ['-'] # The '-' indicates that this step begins immediately.
id: 'fetch-resources'
- name: 'gcr.io/cloud-builders/docker'
args: ['build', '-t', 'gcr.io/$PROJECT_ID/mytarget', '.']
waitFor: ['go-install', 'fetch-resources']
images: ['gcr.io/$PROJECT_ID/mytarget']
JSON
{
"steps": [
{
"name": "gcr.io/cloud-builders/go",
"args": [
"generate"
]
},
{
"name": "gcr.io/cloud-builders/go",
"args": [
"test",
"./..."
]
},
{
"name": "gcr.io/cloud-builders/go",
"args": [
"install",
"mytarget"
],
"id": "go-install"
},
{
"name": "gcr.io/cloud-builders/gsutil",
"args": [
"cp",
"-r",
"./somefiles",
"gs://my-resource-bucket/somefiles"
],
"waitFor": [
"-"
],
"id": "fetch-resources"
},
{
"name": "gcr.io/cloud-builders/docker",
"args": [
"build",
"-t",
"gcr.io/$PROJECT_ID/mytarget",
"."
],
"waitFor": [
"go-install",
"fetch-resources"
]
}
],
"images": [
"gcr.io/$PROJECT_ID/mytarget"
]
}
Langkah selanjutnya
- Konfigurasikan Cloud Build untuk mem-build, menguji, dan men-deploy artefak.
- Pelajari cara menjalankan build secara manual dan menggunakan pemicu.