Como transmitir dados entre as etapas de build

Esta página explica como transmitir dados entre as etapas de criação. Se você não estiver familiarizado com o Cloud Build, leia o Guia de início rápido da versão e a Visão geral da configuração da versão primeiro.

O Cloud Build executa as tarefas como uma série de etapas de build, que são executadas em ambientes isolados e em contêineres. Após cada etapa, o contêiner é descartado. Isso permite que você tenha ferramentas e ambientes totalmente diferentes para cada etapa. Por padrão, os dados criados em uma etapa não podem contaminá-la. No entanto, às vezes pode ser necessário manter o estado de uma etapa de uma criação para usar em etapas posteriores.

Para esses casos, o Cloud Build fornece volumes, que são caminhos de arquivos de leitura e gravação que podem ser anexados a qualquer etapa de versão. Os volumes retêm o conteúdo durante toda a criação É possível definir seu próprio volume ou usar o /workspace, que é o volume padrão fornecido pelo Cloud Build. Antes de executar uma versão, o Cloud Build extrai o código-fonte para /workspace. Tudo o que foi gravado nos volumes definidos pelo usuário e em /workspace por qualquer etapa ficará disponível para as etapas subsequentes.

Como transmitir dados usando espaços de trabalho

Para transmitir dados entre as etapas de build, armazene os recursos produzidos pela etapa de build em /workspace, e esses recursos estarão disponíveis para qualquer etapa de compilação posterior.

No arquivo de configuração de build de exemplo a seguir, a primeira etapa de compilação armazena a string "Primeiro valor" em /workspace/first.txt e o valor 2 em /workspace/second.txt. A segunda etapa de build 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"
      ]
    }
    ]
}

Como transmitir dados usando volumes especificados pelo usuário

Em vez de usar o volume /workspace padrão fornecido pelo Cloud Build, é possível definir seu próprio volume para manter os dados entre as etapas de build.

Para definir e usar seu próprio volume, faça o seguinte:

  • Na etapa de versão em que você quer armazenar os dados:
    • Adicione um bloco volumes e defina os seguintes campos:
      • name: defina o valor desse campo como o nome do volume desejado.
      • path: defina o valor desse campo como o caminho do arquivo para armazenar seus dados.
    • Armazene os dados no caminho de arquivo especificado em path.
  • Na etapa de criação, em que você quer consumir os dados:
    • Adicione um bloco volumes com os valores de name e path.
    • Consumir os dados do caminho do arquivo especificado em path.

No exemplo de arquivo de configuração de versão a seguir, a primeira etapa de criação define um volume chamado myvolume e armazena dados em /persistent_volume/file. A segunda etapa de criação exibe 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"
    }
    ]
  }
]
}

A seguir