Passaggio di dati tra i vari passi della build

Questa pagina spiega come passare i dati tra i vari passi della build. Se non hai mai utilizzato Cloud Build, leggi prima la guida rapida alla compilazione 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 contenitore 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, talvolta potresti dover mantenere lo stato di un passaggio di una compilazione 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 compilazione. I volumi mantengono i propri contenuti per tutta la durata della compilazione. Puoi definire il tuo volume o utilizzare /workspace, che è il volume predefinito fornito da Cloud Build. Prima di eseguire una build, Cloud Build estrae il codice sorgente in /workspace. Tutto ciò che viene scritto nei volumi e in /workspace definiti dall'utente in qualsiasi passaggio sarà disponibile per i passaggi successivi.

Trasmissione dei dati tramite gli spazi di lavoro

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

Nel seguente file di configurazione di build di esempio, il primo passaggio di compilazione memorizza la stringa "Primo valore" 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.

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

Trasmissione dei dati utilizzando volumi specificati dall'utente

Anziché utilizzare il volume /workspace predefinito fornito da Cloud Build, puoi definire il tuo volume per mantenere i dati tra i passaggi di compilazione.

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 desiderato.
      • path: imposta il valore di questo campo sul percorso del file in cui memorizzare i dati.
    • Memorizza i dati nel percorso del file specificato in path.
  • Nel passaggio di compilazione 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 esempio di file di configurazione di compilazione, il primo passaggio di compilazione definisce un volume chiamato myvolume e memorizza i dati in /persistent_volume/file. Il secondo passaggio di compilazione stampa il valore memorizzato in /persistent_volume/file.

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'
{
  "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