Passaggio di dati tra i vari passi della build

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

Cloud Build esegue le tue attività come una serie di passaggi di build eseguiti in ambienti isolati e containerizzati. Dopo ogni passaggio, il container viene eliminato. Questo ti consente di avere strumenti e ambienti completamente diversi per ogni passaggio e, per impostazione predefinita, tutti i dati creati in un passaggio non possono contaminare quello successivo. Tuttavia, a volte potrebbe essere necessario mantenere lo stato da 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 conservano i propri contenuti per tutta la durata della build. 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. Qualsiasi testo scritto nei volumi definiti dall'utente e in /workspace in qualsiasi passaggio sarà disponibile nei passaggi successivi.

Trasmissione dei dati utilizzando le aree di lavoro

Per trasferire i dati tra un passaggio di build e l'altro, archivia gli asset prodotti nel passaggio di build in /workspace, che saranno disponibili per tutti i passaggi di build successivi.

Nel seguente file di configurazione di compilazione di esempio, il primo passaggio di build archivia la stringa "First Value" in /workspace/first.txt e il valore 2 in /workspace/second.txt. Il secondo passaggio di build 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"
      ]
    }
    ]
}

Trasmissione dei dati utilizzando volumi specificati dall'utente

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

Per definire e utilizzare il tuo volume:

  • Nel passaggio di build 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 per archiviare i dati.
    • Archivia i dati nel percorso file specificato in path.
  • Nel passaggio di build in cui vuoi consumare i dati:
    • Aggiungi un blocco volumes con i valori per name e path.
    • Utilizza i dati del percorso del file specificato in path.

Nel seguente file di configurazione di compilazione dell'esempio, il primo passaggio di build definisce un volume denominato myvolume e archivia i dati in /persistent_volume/file. Il secondo passaggio di creazione stampa il valore archiviato 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