Nesta página, explicamos como transmitir dados entre as etapas de build. Se você não conhece o Cloud Build, leia o Guia de início rápido do build e a Visão geral da configuração do build 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 um build, o Cloud Build extrai o código-fonte para /workspace. Qualquer item gravado em volumes definidos pelo usuário e /workspace em qualquer etapa estará 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
.
- Adicione um bloco
- Na etapa de criação, em que você quer consumir os dados:
- Adicione um bloco
volumes
com os valores dename
epath
. - Consumir os dados do caminho do arquivo especificado em
path
.
- Adicione um bloco
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
- Saiba como iniciar uma versão manualmente.
- Saiba como automatizar versões usando gatilhos.
- Saiba como executar scripts bash em etapas de criação.
- Saiba como configurar a ordem das etapas de versão.