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
.
- Adicione um bloco
- No passo de criação em que quer consumir os dados:
- Adicione um bloco
volumes
com os valores dename
epath
. - Consumir os dados do caminho do ficheiro especificado em
path
.
- Adicione um bloco
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?
- Saiba como iniciar uma compilação manualmente.
- Saiba como automatizar compilações com acionadores.
- Saiba como executar scripts bash em passos de compilação.
- Saiba como configurar a ordem dos passos de criação.