Puoi specificare l'ordine in cui vengono eseguiti i passaggi di compilazione. Per impostazione predefinita, i passaggi di compilazione vengono eseguiti in sequenza, ma puoi configurarli per l'esecuzione in contemporanea.
Questa pagina spiega come configurare l'ordine dei passaggi di compilazione.
Ordine dei passaggi di compilazione e dipendenze
Utilizza il campo waitFor
in un passaggio di compilazione per specificare quali passaggi devono essere eseguiti prima di eseguire il passaggio di compilazione. Se non vengono forniti valori per waitFor
, il passaggio di compilazione aspetta che tutti i passaggi di compilazione precedenti nella richiesta di compilazione vengano completati correttamente prima di essere eseguito.
Per eseguire un passaggio di compilazione immediatamente in fase di compilazione, utilizza -
nel campo waitFor
.
L'ordine dei passaggi di compilazione nel campo steps
si riferisce all'ordine in cui vengono eseguiti. I passaggi verranno eseguiti in sequenza o in contemporanea in base alle dipendenze definite nei relativi campi waitFor
.
Un passaggio dipende da ogni id
nel relativo waitFor
e non verrà avviato finché
ogni dipendenza non sarà stata completata correttamente.
I passaggi senza il campo facoltativo waitFor
(o con un waitFor
vuoto)
aspettano il completamento di tutti i passaggi precedenti prima di essere eseguiti. Pertanto, se nessun passaggio contiene un id
nel campo waitFor
, tutti i passaggi verranno eseguiti in sequenza nell'ordine in cui sono definiti.
I passaggi possono dipendere dall'inizio della compilazione facendo in modo che waitFor
contenga solo
-
. Se dichiari che un passaggio dipende solo da -
, il passaggio viene eseguito immediatamente al termine della compilazione. Il primo passaggio definito dipende implicitamente da start.
Lo snippet seguente mostra una configurazione di build con due passaggi eseguiti in sequenza:
steps:
- name: foo
- name: bar
{
"steps": [{
"name": "foo"
},
{
"name": "bar"
}
]
}
Lo snippet seguente mostra due passaggi simultanei che dipendono entrambi da start. Il terzo passaggio attende il completamento dei primi due prima di avviarsi. Questa build simultanea esegue i passaggi A
e B
all'inizio della compilazione. Il terzo passaggio attenderà implicitamente il completamento di entrambi i passaggi precedenti prima di iniziare. Questo esempio potrebbe essere semplificato omettendo i campi id
a cui non viene fatto riferimento in un waitFor
successivo.
steps:
- name: foo
id: A
- name: bar
id: B
waitFor: ['-']
- name: baz
{
"steps": [
{
"name": "foo",
"id": "A"
},
{
"name": "bar",
"id": "B",
"waitFor": ["-"]
},
{
"name": "baz"
}
]
}
Lo snippet seguente mostra i passaggi simultanei che dipendono da un passaggio precedente. Il passaggio A
viene eseguito immediatamente all'avvio della compilazione. I passaggi B
e C
vengono eseguiti contemporaneamente dopo il completamento di A
. Tieni presente che i campi id
e
waitFor
nel passaggio B
e il campo id
nel passaggio C
possono essere omessi
senza modificare l'ordine di esecuzione.
steps:
- name: foo
id: A
- name: bar
id: B
waitFor:
- A
- name: baz
id: C
waitFor:
- A
{
"steps": [
{
"name": "foo",
"id": "A"
},
{
"name": "bar",
"id": "B",
"waitFor": [
"A"
]
},
{
"name": "baz",
"id": "C",
"waitFor": [
"A"
]
}
]
}
Esempi
L'esempio seguente chiama i passaggi gsutil
e wget
contemporaneamente.
Al termine di questi passaggi, viene chiamato il passaggio ubuntu
.
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']
{
"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"
]
}
]
}
L'esempio seguente utilizza il campo id
per identificare determinati passaggi di compilazione. I valori di id
vengono utilizzati in waitFor
per definire l'ordine dei passaggi di compilazione:
- Innanzitutto, il passaggio
fetch-resources
utilizzagsutil
per copiare le risorse locali da Cloud Storage. Contemporaneamente,go
genera, testa e installa il codice sorgente. Poi, il passaggio di compilazione
docker
genera l'immagine al termine di tutti gli altri passaggi.
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']
{
"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"
]
}
Passaggi successivi
- Configura Cloud Build per creare, testare ed eseguire il deployment degli elementi.
- Scopri come eseguire le build manualmente e utilizzando gli attivatori.