Halaman ini menjelaskan cara mengonfigurasi Cloud Build untuk menjalankan skrip bash dalam langkah build. Jika Anda baru menggunakan Cloud Build, baca panduan memulai dan ringkasan konfigurasi build terlebih dahulu.
Anda dapat menjalankan skrip bash dalam langkah build untuk mengonfigurasi sejumlah alur kerja termasuk:
- Menjalankan beberapa perintah dalam satu langkah build.
- Membaca dari sistem file.
- Membuat logika seperti percobaan ulang atau kondisional.
- Menghasilkan output ke log, misalnya, menjalankan
echo $VARNAME
.
Menggunakan kolom script
Cloud Build menyediakan kolom script
yang dapat Anda gunakan untuk menentukan
skrip shell yang akan dieksekusi dalam langkah build. Kolom script
menggunakan satu nilai string.
Anda dapat menambahkan awalan pada nilai string dengan shebang
untuk menentukan shell yang akan menafsirkan skrip. Misalnya, tambahkan #!/usr/bin/env bash
untuk menentukan shell Bash. Jika Anda tidak menambahkan awalan shebang ke string skrip, Cloud Build akan menggunakan #!/bin/sh
yang merupakan shell sh dasar, bukan shell Bash.
Jika menentukan script
di langkah build, Anda tidak dapat menentukan args
atau entrypoint
di langkah yang sama.
Cuplikan berikut menunjukkan kolom script
:
YAML
steps:
- name: 'bash'
script: |
#!/usr/bin/env bash
echo "Hello World"
- name: 'ubuntu'
script: echo hello
- name: 'python'
script: |
#!/usr/bin/env python
print('hello from python')
JSON
{
"steps": [
{
"name": "bash",
"script": "#!/usr/bin/env bash echo 'Hello World'"
},
{
"name": "ubuntu",
"script": "echo hello"
},
{
"name": "python",
"script": "#!/usr/bin/env python\nprint('hello from python')\n"
}
]
}
Menggunakan penggantian dengan kolom script
Skrip tidak mendukung penggantian secara langsung, tetapi mendukung variabel lingkungan. Anda dapat memetakan penggantian ke variabel lingkungan, baik secara otomatis sekaligus, atau secara manual dengan menentukan setiap variabel lingkungan sendiri.
Memetakan penggantian secara otomatis
Di tingkat build. Untuk memetakan semua penggantian ke variabel lingkungan secara otomatis, yang akan tersedia di seluruh build, tetapkan
automapSubstitutions
ketrue
sebagai opsi di tingkat build. Misalnya, file konfigurasi build berikut menunjukkan penggantian yang ditentukan pengguna$_USER
dan penggantian default$PROJECT_ID
yang dipetakan ke variabel lingkungan:YAML
steps: - name: 'ubuntu' script: | #!/usr/bin/env bash echo "Hello $_USER" - name: 'ubuntu' script: | #!/usr/bin/env bash echo "Your project ID is $PROJECT_ID" options: automapSubstitutions: true substitutions: _USER: "Google Cloud"
JSON
{ "steps": [ { "name": "ubuntu", "script": "#!/usr/bin/env bash echo 'Hello $_USER'" }, { "name": "ubuntu", "script": "#!/usr/bin/env bash echo 'Your project ID is $PROJECT_ID'" } ], "options": { "automap_substitutions": true }, "substitutions": { "_USER": "Google Cloud" } }
Di tingkat langkah. Untuk memetakan semua penggantian secara otomatis dan membuatnya tersedia sebagai variabel lingkungan dalam satu langkah, tetapkan kolom
automapSubstitutions
ketrue
pada langkah tersebut. Dalam contoh berikut, hanya langkah kedua yang akan menampilkan penggantian dengan benar, karena ini adalah satu-satunya langkah yang mengaktifkan pemetaan penggantian otomatis:YAML
steps: - name: 'ubuntu' script: | #!/usr/bin/env bash echo "Hello $_USER" - name: 'ubuntu' script: | #!/usr/bin/env bash echo "Your project ID is $PROJECT_ID" automapSubstitutions: true substitutions: _USER: "Google Cloud"
JSON
{ "steps": [ { "name": "ubuntu", "script": "#!/usr/bin/env bash echo 'Hello $_USER'" }, { "name": "ubuntu", "script": "#!/usr/bin/env bash echo 'Your project ID is $PROJECT_ID'", "automap_substitutions": true } ], }, "substitutions": { "_USER": "Google Cloud" }
Selain itu, Anda dapat menyediakan penggantian sebagai variabel lingkungan di seluruh build, lalu mengabaikannya dalam satu langkah. Tetapkan
automapSubstitutions
ketrue
di tingkat build, lalu tetapkan kolom yang sama kefalse
pada langkah tempat Anda ingin mengabaikan penggantian. Dalam contoh berikut, meskipun penggantian pemetaan diaktifkan di tingkat build, project ID tidak akan dicetak pada langkah kedua, karenaautomapSubstitutions
ditetapkan kefalse
pada langkah tersebut:YAML
steps: - name: 'ubuntu' script: | #!/usr/bin/env bash echo "Hello $_USER" - name: 'ubuntu' script: | #!/usr/bin/env bash echo "Your project ID is $PROJECT_ID" automapSubstitutions: false options: automapSubstitutions: true substitutions: _USER: "Google Cloud"
JSON
{ "steps": [ { "name": "ubuntu", "script": "#!/usr/bin/env bash echo 'Hello $_USER'" }, { "name": "ubuntu", "script": "#!/usr/bin/env bash echo 'Your project ID is $PROJECT_ID'", "automap_substitutions": false } ], "options": { "automap_substitutions": true }, }, "substitutions": { "_USER": "Google Cloud" }
Memetakan penggantian secara manual
Anda dapat memetakan penggantian ke variabel lingkungan secara manual. Setiap variabel lingkungan ditentukan di tingkat langkah menggunakan kolom env
, dan cakupan variabel dibatasi pada langkah tempat variabel tersebut ditentukan. Kolom ini menggunakan daftar kunci dan nilai.
Contoh berikut menunjukkan cara memetakan penggantian $PROJECT_ID
ke
variabel lingkungan BAR
:
YAML
steps:
- name: 'ubuntu'
env:
- 'BAR=$PROJECT_ID'
script: 'echo $BAR'
JSON
{
"steps": [
{
"name": "ubuntu",
"env": [
"BAR=$PROJECT_ID"
],
"script": "echo $BAR"
}
]
}
Menjalankan skrip bash di disk
Jika Anda memiliki skrip bash yang disimpan dalam file, simpan file tersebut bersama dengan sumber build, dan referensikan file skrip dalam file konfigurasi build:
YAML
steps:
- name: 'bash'
args: ['./myscript.bash']
JSON
{
"steps": [
{
"name": "bash",
"args": [
"./myscript.bash"
]
}
]
}
Untuk menggunakan skrip bash dalam file jika bash bukan titik entri default gambar
yang Anda gunakan, tambahkan kolom entrypoint
yang mengarah ke bash:
YAML
steps:
- name: 'gcr.io/cloud-builders/gcloud'
entrypoint: 'bash'
args: ['tools/myScript.sh','--foo']
JSON
{
"steps": [
{
"name": "gcr.io/cloud-builders/gcloud",
"entrypoint": "bash",
"args": [
"tools/myScript.sh",
"--foo"
]
}
]
}
Menjalankan skrip bash inline
Untuk menjalankan perintah bash menggunakan image bash
, tentukan bash
sebagai name
langkah build, dan perintah di kolom args:
YAML
steps:
- name: 'bash'
args: ['echo', 'I am running a bash command']
JSON
{
"steps": [
{
"name": "bash",
"args": [
"echo",
"I am running a bash command"
]
}
]
}
Jika image yang Anda gunakan sudah dikemas dengan bash
, tetapi jika bash
bukan
titik entri default, tambahkan kolom entrypoint
yang mengarah ke bash
. Dalam contoh
di bawah, titik entri bash
digunakan untuk menjalankan perintah gcloud
yang mengkueri
Cloud Build untuk status build, yang mencantumkan build dengan status gagal.
YAML
steps:
- name: 'gcr.io/google.com/cloudsdktool/cloud-sdk'
entrypoint: 'bash'
args:
- '-eEuo'
- 'pipefail'
- '-c'
- |-
gcloud builds list > builds.txt
while read line; do
if grep -q "FAILURE" <<< "$line"; then
echo "$line"
fi
done < builds.txt
JSON
{
"steps": [
{
"name": "gcr.io/google.com/cloudsdktool/cloud-sdk",
"entrypoint": "bash",
"args": [
"-eEuo",
"pipefail",
"-c",
"gcloud builds list > builds.txt\nwhile read line; do\n if grep -q \"FAILURE\" <<< \"$line\"; then\n echo \"$line\"\n fi\ndone < builds.txt"
]
}
]
}
Flag -c
dalam kode di atas digunakan untuk menjalankan perintah multibaris. Setiap string
yang Anda teruskan setelah -c
akan diperlakukan sebagai perintah. Untuk informasi selengkapnya tentang cara menjalankan perintah
bash dengan -c
, lihat
dokumentasi bash.
Langkah selanjutnya
- Pelajari cara memulai build secara manual.
- Pelajari cara mengotomatiskan build menggunakan pemicu.
- Pelajari cara mengonfigurasi urutan langkah build.
- Pelajari cara menggunakan builder yang dikontribusikan oleh komunitas dan builder kustom.