Auf dieser Seite wird erläutert, wie Sie Build-Artefakte in Cloud Storage speichern.
Wir empfehlen die Verwendung von Artifact Registry zum Speichern von Build-Artefakten. Artifact Registry ist ein Google Cloud-Produkt, das Sie in Cloud Build einbinden können, um Ihre Artefakte sicher in privaten oder öffentlichen Repositories zu speichern und zu verwalten. Das Speichern von Artefakten in Artifact Registry bietet Ihnen folgende Möglichkeiten:
- Verwalten Sie Artefaktanalyse Containermetadaten und suchen Sie nach Container-Sicherheitslücken.
- Erzwingen Sie Bereitstellungsrichtlinien mit Binärautorisierung.
- Image-Streaming in Google Kubernetes Engine verwenden Dies ist besonders bei großen Container-Images vorteilhaft.
Eine Anleitung zum Konfigurieren von Cloud Build für das Speichern von Paketen und Images aus Ihren Builds in Artifact Registry finden Sie unter Artefakte in Artifact Registry speichern.
Artefakte in Cloud Storage speichern
Zum Speichern von Artefakten ohne Container in Cloud Storage fügen Sie der Build-Konfigurationsdatei das Feld artifacts
hinzu. Geben Sie dabei den Bucket-Speicherort für das Artefakt sowie den Pfad zu einem oder mehreren Artefakten an:
YAML
artifacts:
objects:
location: [STORAGE_LOCATION]
paths: [[ARTIFACT_PATH],[ARTIFACT_PATH], ...]
Dabei gilt:
[STORAGE_LOCATION]
ist ein Cloud Storage-Bucket oder ein Ordner im Bucket, in dem Cloud Build das Artefakt speichern muss, z. B.gs://mybucket
odergs://mybucket/myproject/builds
. Informationen zum Abrufen der Namen vorhandener Buckets finden Sie unter Buckets auflisten oder neuen Bucket erstellen.[ARTIFACT_PATH]
: Pfad zu einem oder mehreren Artefakten.[ARTIFACT_PATH]
bezieht sich auf Ihr Arbeitsverzeichnis. Dies kann entweder/workspace
sein, das Standardarbeitsverzeichnis von Cloud Build, oder das Arbeitsverzeichnis, das Sie über das Felddir
festgelegt haben.
JSON
{
"artifacts": {
"objects": {
"location": [
"[STORAGE_LOCATION]"
],
"paths": [
[
"[ARTIFACT_PATH]"
],
[
"[ARTIFACT_PATH]"
],
"..."
]
}
}
}
Dabei gilt:
[STORAGE_LOCATION]
ist ein Cloud Storage-Bucket oder ein Ordner im Bucket, in dem Cloud Build das Artefakt speichern muss, z. B.gs://mybucket
odergs://mybucket/myproject/builds
. Informationen zum Abrufen der Namen vorhandener Buckets finden Sie unter Buckets auflisten oder neuen Bucket erstellen.[ARTIFACT_PATH]
: Pfad zu einem oder mehreren Artefakten.[ARTIFACT_PATH]
bezieht sich auf Ihr Arbeitsverzeichnis. Dies kann entweder/workspace
sein, das Standardarbeitsverzeichnis von Cloud Build, oder das Arbeitsverzeichnis, das Sie über das Felddir
festgelegt haben.
Beachten Sie beim Speichern von Artefakten in Cloud Storage die folgenden Einschränkungen:
Zum Hochladen der Artefakte können Sie nur einen Bucket angeben. Außerdem müssen Sie der Eigentümer des Buckets sein. Sie können einen gültigen Verzeichnispfad im Bucket angeben.
Sie können eine beliebige Anzahl von Artefakten hochladen, aber nur bis zu 100 Artefaktpfade angeben.
Wenn Sie ein Artefakt in einen Bucket hochladen, der bereits ein Artefakt mit demselben Namen enthält, ersetzt das neue Artefakt das vorhandene Artefakt. Sie können die Objektversionierung für Ihren Bucket aktivieren, wenn Sie nicht möchten, dass das neuere Artefakt ein vorhandenes Artefakt mit demselben Namen ersetzt.
Nach erfolgreicher Fertigstellung des Builds können Sie die Upload-Ergebnisse in der JSON-Manifestdatei einsehen, die sich unter [STORAGE_LOCATION]/artifacts-$BUILD_ID.json
befindet.
Die JSON-Manifestdatei enthält die folgenden Felder:
location
: Gibt den Speicherort in Cloud Storage an, an dem ein Artefakt gespeichert ist. Er hat das Formatgs://[STORAGE_LOCATION]/[FILE_NAME]#[GENERATION_NUMBER]
. Sie können die Generierungsnummer verwenden, um eine Version der Daten im Cloud Storage-Bucket eindeutig zu identifizieren.file_hash
: Gibt den Hash-Typ und den Wert an. Der Hash-Typ ist immer 2, was bedeutet, dass MD5-Hash ausgeführt wurde.
Beispiele für Artefakte
Die folgenden Beispiele veranschaulichen, wie Sie das Feld Artifacts
in einer Build-Konfigurationsdatei verwenden können. Ersetzen Sie in allen Beispielen [VALUES_IN_BRACKETS]
durch die entsprechenden Werte.
Dateien und Ordner hochladen
Die folgende Build-Konfigurationsdatei lädt helloworld.class
in gs://[STORAGE_LOCATION]/
hoch:
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"
]
}
}
}
Wenn Sie mehrere Artefakte hochladen möchten, trennen Sie die Pfadangaben zu den einzelne Artefakten durch Kommas. Im folgenden Beispiel werden HelloWorld.java
, HelloWorld.class
und cloudbuild.yaml
bis gs://[STORAGE_LOCATION]/
hochgeladen:
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"
]
}
}
}
Sie können die Artefakte auch in einen gültigen Verzeichnispfad im Bucket hochladen. Im folgenden Beispiel werden HelloWorld.java
und HelloWorld.class
bis gs://[BUCKET_NAME]/[FOLDER_NAME]
hochgeladen:
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"
]
}
}
}
Platzhalter zum Hochladen von mehreren Artefakten verwenden
Beim Hochladen mehrerer Artefakte können Sie mithilfe von Platzhalterzeichen in paths
mehrere Dateien angeben.
Im folgenden Beispiel wird eine Datei namens classes
als Argument verwendet. Die Datei enthält die Namen der zu kompilierenden .java
-Dateien. Anschließend wird jede .class
-Datei in den angegebenen Cloud Storage-Bucket hochgeladen:
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"
]
}
}
}
Substitutionsvariablen am Bucket-Standort verwenden
Sie können Substitutionsvariablen verwenden, um einen Ordner im Cloud Storage-Bucket anzugeben. Wenn der von Ihnen angegebene Ordner nicht vorhanden ist, wird er von Cloud Build erstellt.
Im folgenden Beispiel werden die Artefakte in einen Cloud Storage-Pfad hochgeladen, der den Namen des Google Cloud-Projekts enthält, von dem der Build ausgeführt wurde (z. B. 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"
]
}
}
}
Nächste Schritte
- Mehr zum Erstellen von
Go
-Projekten - Builds manuell starten und Builds mit Build-Triggern automatisieren
- Build-Fehler beheben