Daten zwischen Build-Schritten übergeben

Auf dieser Seite wird erläutert, wie Daten zwischen Build-Schritten übergeben werden. Wenn Sie Cloud Build noch nicht kennen, lesen Sie zuerst die Build-Kurzanleitung und die Build-Konfiguration – Übersicht.

Cloud Build führt Ihre Aufgaben als eine Reihe von Build-Schritten aus, die in isolierten und containerisierten Umgebungen ausgeführt werden. Nach jedem Schritt wird der Container verworfen. So können Sie für jeden Schritt völlig unterschiedliche Tools und Umgebungen verwenden, und standardmäßig können die in einem Schritt erstellten Daten den nächsten Schritt nicht beeinträchtigen. Manchmal müssen Sie jedoch den Status aus einem Build-Schritt beibehalten, um ihn in den nachfolgenden Schritten zu verwenden.

In solchen Fällen bietet Cloud Build Volumes, d. h. schreibgeschützte Dateipfade, die Sie an jeden Build-Schritt anhängen können. Volumes behalten ihren Inhalt während der gesamten Dauer des Builds bei. Sie können Ihr eigenes Volume definieren oder /workspace verwenden. Dies ist das Standard-Volume, das Cloud Build für Sie bereitstellt. Vor der Ausführung eines Builds extrahiert Cloud Build den Quellcode in /workspace. Alle Daten, die von einem Schritt in benutzerdefinierte Volumes und /workspace geschrieben wurden, sind für nachfolgende Schritte verfügbar.

Daten mit Arbeitsbereichen übergeben

Speichern Sie die im Build-Schritt erzeugten Assets in /workspace, um Daten zwischen Build-Schritten zu übergeben. Diese Assets sind für alle nachfolgenden Build-Schritte verfügbar.

In der folgenden Build-Konfigurationsdatei wird im ersten Build-Schritt der String "First Value" in /workspace/first.txt und der Wert 2 in /workspace/second.txt gespeichert. Der zweite Build-Schritt liest und gibt die Werte in /workspace/first.txt und /workspace/second.txt aus.

YAML

steps:
- id: "Store Values"
  name: ubuntu
  entrypoint: bash
  args:
    - -c
    - |
      # Save a value to persistent volume mount: "/workspace"
      echo "First Value" > /workspace/first.txt &&
      # Save another
      expr 1 + 1 > /workspace/second.txt
# In the next step, everything in the environment is discarded
# EXCEPT items in "/workspace"
- id: "Read Values"
  name: ubuntu
  entrypoint: bash
  args:
    - -c
    - |
      # Read from "/workspace"
      echo "First we saved " $(cat /workspace/first.txt) &&
      echo "Then we saved " $(cat /workspace/second.txt)

JSON

{
  "steps": [
  {
    "id": "Store Values",
    "name": "ubuntu",
    "entrypoint": "bash",
    "args": [
      "-c",
      "echo \"First Value\" > /workspace/first.txt &&\nexpr 1 + 1 > /workspace/second.txt\n"
    ]
    },
    {
      "id": "Read Values",
      "name": "ubuntu",
      "entrypoint": "bash",
      "args": [
        "-c",
        "echo \"First we saved \" $(cat /workspace/first.txt) &&\necho \"Then we saved \" $(cat /workspace/second.txt)\n"
      ]
    }
    ]
}

Daten mit benutzerdefinierten Volumes übergeben

Anstatt das von Cloud Build bereitgestellte Standard-Volume /workspace zu verwenden, können Sie ein eigenes Volume definieren, um Daten zwischen Build-Schritten beizubehalten.

So definieren und verwenden Sie Ihr eigenes Volume:

  • Im Build-Schritt, in dem Sie die Daten speichern möchten:
    • Fügen Sie den Block volumes hinzu und legen Sie die folgenden Felder fest:
      • name: Legen Sie den Wert dieses Felds auf den gewünschten Volume-Namen fest.
      • path: Legen Sie den Wert dieses Felds auf den Dateipfad zum Speichern Ihrer Daten fest.
    • Speichern Sie die Daten im Dateipfad, der in path angegeben ist.
  • Im Build-Schritt, in dem Sie die Daten nutzen möchten:
    • Fügen Sie den Block volumes mit den Werten für name und path hinzu.
    • Verarbeiten Sie die Daten aus dem in path angegebenen Dateipfad.

In der folgenden Build-Konfigurationsdatei wird mit dem ersten Build-Schritt ein Volume mit dem Namen myvolume definiert und Daten werden in /persistent_volume/file gespeichert. Der zweite Build-Schritt gibt den in /persistent_volume/file gespeicherten Wert aus.

YAML

steps:
- name: 'ubuntu'
  entrypoint: 'bash'
  args:
    - '-c'
    - |
      echo "Hello, world!" > /persistent_volume/file
  volumes:
  - name: 'myvolume'
    path: '/persistent_volume'
- name: 'ubuntu'
  entrypoint: 'bash'
  args:
    - '-c'
    - |
      cat /persistent_volume/file
  volumes:
  - name: 'myvolume'
    path: '/persistent_volume'

JSON

{
  "steps": [
  {
    "name": "ubuntu",
    "entrypoint": "bash",
    "args": [
      "-c",
      "echo \"Hello, world!\" > /persistent_volume/file\n"
     ],
     "volumes": [
     {
       "name": "myvolume",
       "path": "/persistent_volume"
     }
     ]
  },
  {
    "name": "ubuntu",
    "entrypoint": "bash",
    "args": [
      "-c",
      "cat /persistent_volume/file\n"
    ],
    "volumes": [
    {
      "name": "myvolume",
      "path": "/persistent_volume"
    }
    ]
  }
]
}

Nächste Schritte