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.
- Mem-build logika seperti percobaan ulang atau kondisional.
- Menghasilkan log, misalnya, menjalankan
echo $VARNAME
.
Menggunakan kolom script
Cloud Build menyediakan kolom script
yang dapat Anda gunakan untuk menentukan skrip shell yang akan dijalankan pada langkah build. Kolom script
mengambil satu nilai
string.
Anda dapat mengawali nilai string dengan shebang untuk menentukan shell guna menafsirkan skrip. Misalnya, tambahkan #!/usr/bin/env bash
untuk menentukan shell Bash. Jika Anda tidak memberi awalan pada string skrip dengan shebang, Cloud Build akan menggunakan #!/bin/sh
yang merupakan shell sh dasar, bukan shell Bash.
Jika menetapkan script
dalam langkah build, Anda tidak dapat menentukan args
atau entrypoint
dalam 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 substitusi dengan kolom script
Skrip tidak secara langsung mendukung substitusi, tetapi mendukung variabel lingkungan. Anda dapat memetakan substitusi ke variabel lingkungan, baik secara otomatis sekaligus, atau secara manual dengan menentukan sendiri setiap variabel lingkungan.
Penggantian peta secara otomatis
Di level build. Untuk secara otomatis memetakan semua substitusi ke variabel lingkungan, yang akan tersedia di seluruh build, tetapkan
automapSubstitutions
ketrue
sebagai opsi di level build. Misalnya, file konfigurasi build berikut menampilkan$_USER
substitusi yang ditentukan pengguna dan$PROJECT_ID
substitusi default 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 substitusi secara otomatis dan menyediakannya sebagai variabel lingkungan dalam satu langkah, tetapkan kolom
automapSubstitutions
ketrue
dalam langkah tersebut. Dalam contoh berikut, hanya langkah kedua yang akan menampilkan substitusi dengan benar, karena itu satu-satunya yang mengaktifkan pemetaan substitusi 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 substitusi 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 yang Anda ingin mengabaikan substitusi. Dalam contoh berikut, meskipun substitusi pemetaan diaktifkan di level build, project ID tidak akan dicetak pada langkah kedua, karenaautomapSubstitutions
ditetapkan kefalse
di 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" }
Substitusi peta secara manual
Anda dapat memetakan substitusi 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 substitusi $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 pada disk
Jika Anda telah menyimpan skrip bash dalam sebuah file, simpan file tersebut bersama dengan sumber build, dan rujuk file skrip dalam file konfigurasi build Anda:
YAML
steps:
- name: 'bash'
args: ['./myscript.bash']
JSON
{
"steps": [
{
"name": "bash",
"args": [
"./myscript.bash"
]
}
]
}
Untuk menggunakan skrip bash pada file jika bash bukan titik entri default dari 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 (lama)
Untuk menjalankan perintah bash menggunakan gambar bash
, tentukan bash
sebagai name
pada 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 gambar yang Anda gunakan sudah dilengkapi dengan bash
, tetapi jika bash
bukan
titik entri default, tambahkan kolom entrypoint
yang mengarah ke bash
. Pada contoh di bawah, titik entri bash
digunakan untuk menjalankan perintah gcloud
yang mengkueri Cloud Build untuk status build, membuat listingan 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 mengetahui 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 pembuat yang dikontribusikan oleh komunitas dan pembuat kustom.