Passaggio di dati tra i vari passi della build

Questa pagina spiega come passare i dati tra i passaggi di build. Se non hai mai utilizzato Cloud Build, leggi prima la guida rapida di Build e la panoramica della configurazione di compilazione.

Cloud Build esegue le attività come una serie di passaggi di build, che vengono eseguiti in ambienti isolati e containerizzati. Dopo ogni passaggio, il container viene eliminato. In questo modo, puoi avere strumenti e ambienti completamente diversi per ogni passaggio e, per impostazione predefinita, i dati creati in un passaggio non possono contaminare il passaggio successivo. Tuttavia, a volte potrebbe essere necessario mantenere lo stato di un passaggio di una build per utilizzarlo nei passaggi successivi.

In questi casi, Cloud Build fornisce volumi, ovvero percorsi di file di lettura/scrittura che puoi collegare a qualsiasi passaggio di build. I volumi mantengono i loro contenuti per tutta la durata della build. Puoi definire un volume personalizzato o utilizzare /workspace, che è il volume predefinito fornito da Cloud Build. Prima di eseguire una build, Cloud Build estrae il codice sorgente in /workspace. Qualsiasi elemento scritto nei volumi definiti dall'utente e in /workspace da qualsiasi passaggio sarà disponibile per i passaggi successivi.

Trasferire dati utilizzando gli spazi di lavoro

Per passare i dati tra i passaggi di build, memorizza gli asset prodotti dal passaggio di build in /workspace e questi asset saranno disponibili per tutti i passaggi di build successivi.

Nel seguente file di configurazione della build di esempio, il primo passaggio della build memorizza la stringa "First Value" in /workspace/first.txt e il valore 2 in /workspace/second.txt. Il secondo passaggio di compilazione legge e stampa i valori in /workspace/first.txt e /workspace/second.txt.

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"
      ]
    }
    ]
}

Trasferimento di dati utilizzando volumi specificati dall'utente

Anziché utilizzare il volume /workspace predefinito fornito da Cloud Build, puoi definire un volume personalizzato per rendere persistenti i dati tra i passaggi di build.

Per definire e utilizzare il tuo volume:

  • Nel passaggio di compilazione in cui vuoi archiviare i dati:
    • Aggiungi un blocco volumes e imposta i seguenti campi:
      • name: imposta il valore di questo campo sul nome del volume che preferisci.
      • path: imposta il valore di questo campo sul percorso del file in cui archiviare i dati.
    • Archivia i dati nel percorso del file specificato in path.
  • Nel passaggio di creazione in cui vuoi utilizzare i dati:
    • Aggiungi un blocco volumes con i valori per name e path.
    • Utilizza i dati dal percorso del file specificato in path.

Nel seguente file di configurazione della build di esempio, il primo passaggio di build definisce un volume denominato myvolume e archivia i dati in /persistent_volume/file. Il secondo passaggio di build stampa il valore memorizzato in /persistent_volume/file.

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"
    }
    ]
  }
]
}

Passaggi successivi