Pode especificar a ordem pela qual as etapas de compilação são executadas. Por predefinição, os passos de compilação são executados sequencialmente, mas pode configurá-los para serem executados em simultâneo.
Esta página explica como configurar a ordem dos passos de compilação.
Crie a ordem dos passos e as dependências
Use o campo waitFor
num passo de compilação para especificar que passos têm de ser executados antes de o passo de compilação ser executado. Se não forem fornecidos valores para waitFor
, o passo de compilação aguarda que todos os passos de compilação anteriores no pedido de compilação sejam concluídos com êxito antes de ser executado.
Para executar um passo de compilação imediatamente no momento da compilação, use -
no campo waitFor
.
A ordem dos passos de criação no campo steps
está relacionada com a ordem em que os passos são executados. Os passos são executados em série ou em simultâneo com base nas dependências definidas nos respetivos campos waitFor
.
Um passo depende de todos os id
no respetivo waitFor
e não é iniciado até que
cada dependência seja concluída com êxito.
Os passos sem o campo opcional waitFor
(ou com um waitFor
vazio) aguardam a conclusão bem-sucedida de todos os passos anteriores antes da execução. Por conseguinte, se nenhum passo contiver um id
no respetivo campo waitFor
, todos os passos são executados
em série pela ordem em que são definidos.
Os passos podem depender do início da criação se waitFor
contiver apenas -
. Ao declarar que um passo depende apenas de -
, o passo é executado imediatamente
quando a compilação é iniciada. O primeiro passo definido depende implicitamente do início.
O fragmento seguinte mostra uma configuração de compilação com dois passos executados em série:
YAML
steps:
- name: foo
- name: bar
JSON
{
"steps": [{
"name": "foo"
},
{
"name": "bar"
}
]
}
O fragmento seguinte mostra dois passos concorrentes que dependem do início. O terceiro passo aguarda a conclusão bem-sucedida dos dois primeiros antes de ser iniciado. Esta compilação concorrente executa os passos A
e B
no início da compilação. O terceiro passo aguarda implicitamente até que os dois passos anteriores estejam
concluídos antes de começar. Este exemplo pode ser simplificado omitindo os campos id
, que não são referenciados num waitFor
subsequente.
YAML
steps:
- name: foo
id: A
- name: bar
id: B
waitFor: ['-']
- name: baz
JSON
{
"steps": [
{
"name": "foo",
"id": "A"
},
{
"name": "bar",
"id": "B",
"waitFor": ["-"]
},
{
"name": "baz"
}
]
}
O fragmento seguinte mostra passos concorrentes que dependem de um passo anterior. O passo A
é executado imediatamente quando a compilação é iniciada. Os passos B
e C
são executados
em simultâneo após a conclusão bem-sucedida do passo A
. Tenha em atenção que os campos id
e waitFor
no passo B
, e o campo id
no passo C
, podem ser omitidos sem alterar a ordem de execução.
YAML
steps:
- name: foo
id: A
- name: bar
id: B
waitFor:
- A
- name: baz
id: C
waitFor:
- A
JSON
{
"steps": [
{
"name": "foo",
"id": "A"
},
{
"name": "bar",
"id": "B",
"waitFor": [
"A"
]
},
{
"name": "baz",
"id": "C",
"waitFor": [
"A"
]
}
]
}
Exemplos
O exemplo abaixo chama os passos gsutil
e wget
em simultâneo.
Depois de concluir estes passos, é chamado o passo ubuntu
.
YAML
steps:
# Download the binary and the data in parallel.
- name: 'gcr.io/cloud-builders/wget'
args: ['https://example.com/binary']
- name: 'gcr.io/cloud-builders/gsutil'
args: ['cp', 'gs://$PROJECT_ID-data/rawdata.tgz', '.']
waitFor: ['-'] # The '-' indicates that this step begins immediately.
# Run the binary on the data, once both are downloaded.
- name: 'ubuntu'
args: ['./binary', 'rawdata.tgz']
JSON
{
"steps": [
{
"name": "gcr.io/cloud-builders/wget",
"args": [
"https://example.com/binary"
]
},
{
"name": "gcr.io/cloud-builders/gsutil",
"args": [
"cp",
"gs://$PROJECT_ID-data/rawdata.tgz",
"."
],
"waitFor": [
"-"
]
},
{
"name": "ubuntu",
"args": [
"./binary",
"rawdata.tgz"
]
}
]
}
O exemplo abaixo usa o campo id
para identificar determinados passos de compilação. Os valores
de id
são usados em waitFor
para definir a ordem dos passos de compilação:
- O
fetch-resources
passo usagsutil
para copiar os recursos locais do Cloud Storage. Em simultâneo, ogo
gera, testa e instala o código-fonte. Em seguida, o passo de compilação
docker
compila a imagem depois de todos os outros passos estarem concluídos.
YAML
steps:
- name: 'gcr.io/cloud-builders/go'
args: ['generate']
- name: 'gcr.io/cloud-builders/go'
args: ['test', './...']
- name: 'gcr.io/cloud-builders/go'
args: ['install', 'mytarget']
id: 'go-install'
- name: 'gcr.io/cloud-builders/gsutil'
args: ['cp', '-r', './somefiles', 'gs://my-resource-bucket/somefiles']
waitFor: ['-'] # The '-' indicates that this step begins immediately.
id: 'fetch-resources'
- name: 'gcr.io/cloud-builders/docker'
args: ['build', '-t', 'gcr.io/$PROJECT_ID/mytarget', '.']
waitFor: ['go-install', 'fetch-resources']
images: ['gcr.io/$PROJECT_ID/mytarget']
JSON
{
"steps": [
{
"name": "gcr.io/cloud-builders/go",
"args": [
"generate"
]
},
{
"name": "gcr.io/cloud-builders/go",
"args": [
"test",
"./..."
]
},
{
"name": "gcr.io/cloud-builders/go",
"args": [
"install",
"mytarget"
],
"id": "go-install"
},
{
"name": "gcr.io/cloud-builders/gsutil",
"args": [
"cp",
"-r",
"./somefiles",
"gs://my-resource-bucket/somefiles"
],
"waitFor": [
"-"
],
"id": "fetch-resources"
},
{
"name": "gcr.io/cloud-builders/docker",
"args": [
"build",
"-t",
"gcr.io/$PROJECT_ID/mytarget",
"."
],
"waitFor": [
"go-install",
"fetch-resources"
]
}
],
"images": [
"gcr.io/$PROJECT_ID/mytarget"
]
}
O que se segue?
- Configure o Cloud Build para criar, testar e implementar artefactos.
- Saiba como executar compilações manualmente e usando acionadores.