Auf dieser Seite wird erläutert, wie Sie Cloud Build so konfigurieren, dass Bash-Skripts innerhalb eines Build-Schritts ausgeführt werden. Wenn Sie Cloud Build noch nicht kennen, lesen Sie zuerst die Kurzanleitungen sowie Build-Konfiguration – Überblick.
Sie können innerhalb eines Build-Schritts Bash-Skripts ausführen, um eine Reihe von Workflows zu konfigurieren, darunter:
- Mehrere Befehle in einem Build-Schritt ausführen
- Aus dem Dateisystem lesen.
- Logik wie Wiederholungsversuche oder Bedingungen einbauen.
- Ausgabe in das Log, z. B. Ausführung von
echo $VARNAME.
Feld script verwenden
Cloud Build bietet das Feld script, in dem Sie Shell-Scripts angeben können, die in einem Build-Schritt ausgeführt werden sollen. Das Feld script kann einen einzelnen Stringwert enthalten.
Sie können dem Stringwert ein Shebang voranstellen, um die Shell anzugeben, die das Script interpretieren soll. Fügen Sie beispielsweise #!/usr/bin/env bash hinzu, um die Bash-Shell anzugeben. Wenn Sie dem Scriptstring kein Shebang vorangestellt haben, verwendet Cloud Build #!/bin/sh, die grundlegende sh-Shell, und nicht die Bash-Shell.
Wenn Sie script in einem Buildschritt angeben, können Sie im selben Schritt nicht args oder entrypoint angeben.
Das folgende Snippet zeigt das Feld 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"
}
]
}
Substitutionen mit dem Feld script verwenden
Skripts unterstützen keine direkten Ersetzungen, aber Umgebungsvariablen. Sie können Substitutionen Umgebungsvariablen zuordnen, entweder automatisch alle auf einmal oder manuell, indem Sie jede Umgebungsvariable selbst definieren.
Ersetzungen automatisch zuordnen
Auf Buildebene Wenn Sie alle Substitutionen automatisch Umgebungsvariablen zuordnen möchten, die während des gesamten Builds verfügbar sind, legen Sie auf Buildebene die Option
automapSubstitutionsauftruefest. In der folgenden Build-Konfigurationsdatei sind beispielsweise die benutzerdefinierte Substitution$_USERund die Standardsubstitution$PROJECT_IDauf Umgebungsvariablen zugeordnet: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" } }Auf Schrittebene Wenn Sie alle Substitutionen automatisch zuordnen und in einem einzigen Schritt als Umgebungsvariablen verfügbar machen möchten, setzen Sie das Feld
automapSubstitutionsin diesem Schritt auftrue. Im folgenden Beispiel werden die Ersetzungen nur im zweiten Schritt korrekt angezeigt, da dort die automatische Zuordnung von Ersetzungen aktiviert ist: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" }Außerdem können Sie die Ersetzungen als Umgebungsvariablen im gesamten Build verfügbar machen und sie dann in einem Schritt ignorieren. Legen Sie auf Build-Ebene
automapSubstitutionsauftruefest und dann dasselbe Feld in dem Schritt auffalse, in dem Sie die Ersetzungen ignorieren möchten. Im folgenden Beispiel wird die Projekt-ID im zweiten Schritt nicht ausgegeben, obwohl die Zuordnungssubstitutionen auf Buildebene aktiviert sind, daautomapSubstitutionsin diesem Schritt auffalsefestgelegt ist: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" }
Substitutionen manuell zuordnen
Sie können die Ersetzungen manuell Umgebungsvariablen zuordnen. Jede Umgebungsvariable wird auf Schrittebene mithilfe des Felds env definiert. Der Gültigkeitsbereich der Variablen ist auf den Schritt beschränkt, in dem sie definiert sind. Dieses Feld nimmt eine Liste von Schlüsseln und Werten an.
Im folgenden Beispiel wird gezeigt, wie die Substitution $PROJECT_ID der Umgebungsvariablen BAR zugeordnet wird:
YAML
steps:
- name: 'ubuntu'
env:
- 'BAR=$PROJECT_ID'
script: 'echo $BAR'
JSON
{
"steps": [
{
"name": "ubuntu",
"env": [
"BAR=$PROJECT_ID"
],
"script": "echo $BAR"
}
]
}
Bash-Skripts auf dem Laufwerk ausführen
Wenn Sie Ihr Bash-Skript in einer Datei gespeichert haben, speichern Sie die Datei zusammen mit Ihrer Build-Quelle und verweisen Sie in der Build-Konfigurationsdatei auf die Skriptdatei:
YAML
steps:
- name: 'bash'
args: ['./myscript.bash']
JSON
{
"steps": [
{
"name": "bash",
"args": [
"./myscript.bash"
]
}
]
}
Fügen Sie zur Verwendung eines Bash-Skripts in der Datei, wenn Bash nicht der Standardeinstiegspunkt des verwendeten Images ist, das Feld entrypoint hinzu, das auf Bash verweist:
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"
]
}
]
}
Inline-Bash-Skripts ausführen
Geben Sie zum Ausführen von Bash-Befehlen mit dem Image bash bash als name des Build-Schritts und den Befehl im Feld "args" an:
YAML
steps:
- name: 'bash'
args: ['echo', 'I am running a bash command']
JSON
{
"steps": [
{
"name": "bash",
"args": [
"echo",
"I am running a bash command"
]
}
]
}
Wenn das von Ihnen verwendete Image bereits bash enthält, aber bash nicht der Standardeinstiegspunkt ist, fügen Sie das Feld entrypoint hinzu, das auf bash verweist. Im folgenden Beispiel wird der bash-Einstiegspunkt verwendet, um gcloud-Befehle auszuführen, die Cloud Build nach dem Build-Status abfragen und Builds mit einem fehlgeschlagenen Status auflisten.
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"
]
}
]
}
Das Flag -c im obigen Code wird zum Ausführen mehrzeiliger Befehle verwendet. Jeder String, den Sie nach -c übergeben, wird als Befehl behandelt. Weitere Informationen zum Ausführen von Bash-Befehlen mit -c finden Sie in der Bash-Dokumentation.
Nächste Schritte
- Build manuell starten
- Builds mit Build-Triggern automatisieren
- Reihenfolge der Build-Schritte konfigurieren
- Hier erfahren Sie, wie Sie Community-Builder und benutzerdefinierte Builder verwenden.