Transferir dados entre passos de compilação

Esta página explica como transmitir dados entre passos de compilação. Se for um utilizador recente do Cloud Build, leia o guia de início rápido de compilação e a vista geral da configuração de compilação primeiro.

O Cloud Build executa as suas tarefas como uma série de passos de compilação, que são executados em ambientes isolados e contentorizados. Após cada passo, o contentor é rejeitado. Isto permite-lhe ter ferramentas e ambientes totalmente diferentes para cada passo e, por predefinição, os dados criados num passo não podem contaminar o passo seguinte. No entanto, por vezes, pode ter de manter o estado de um passo de uma compilação para usar nos passos subsequentes.

Para esses casos, o Cloud Build fornece volumes, que são caminhos de ficheiros de leitura/escrita que pode anexar a qualquer passo de compilação. Os volumes mantêm o respetivo conteúdo durante toda a duração da compilação. Pode definir o seu próprio volume ou usar /workspace, que é o volume predefinido que o Cloud Build lhe fornece. Antes de executar uma compilação, o Cloud Build extrai o código-fonte para /workspace. Tudo o que for escrito em volumes definidos pelo utilizador e /workspace por qualquer passo vai estar disponível para os passos subsequentes.

Transferir dados através de espaços de trabalho

Para transmitir dados entre passos de compilação, armazene os recursos produzidos pelo passo de compilação em /workspace. Estes recursos vão estar disponíveis para todos os passos de compilação subsequentes.

No ficheiro de configuração de compilação do exemplo seguinte, o primeiro passo de compilação armazena a string "First Value" em /workspace/first.txt e o valor 2 em /workspace/second.txt. O segundo passo de compilação lê e imprime os valores em /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"
      ]
    }
    ]
}

Transmitir dados através de volumes especificados pelo utilizador

Em vez de usar o volume /workspace predefinido fornecido pelo Cloud Build, pode definir o seu próprio volume para persistir dados entre passos de compilação.

Para definir e usar o seu próprio volume:

  • No passo de criação onde quer armazenar os dados:
    • Adicione um bloco volumes e defina os seguintes campos:
      • name: defina o valor deste campo para o nome do volume pretendido.
      • path: defina o valor deste campo para o caminho do ficheiro para armazenar os seus dados.
    • Armazene os dados no caminho do ficheiro especificado em path.
  • No passo de criação em que quer consumir os dados:
    • Adicione um bloco volumes com os valores de name e path.
    • Consumir os dados do caminho do ficheiro especificado em path.

No ficheiro de configuração de compilação do exemplo seguinte, o primeiro passo de compilação define um volume com o nome myvolume e armazena dados em /persistent_volume/file. O segundo passo de compilação imprime o valor armazenado em /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"
    }
    ]
  }
]
}

O que se segue?