Configurazione dell'ordine dei passi di build

Puoi specificare l'ordine in cui vengono eseguiti i passaggi di build. Per impostazione predefinita, i passaggi di build vengono eseguiti in sequenza, ma puoi configurarli in modo che vengano eseguiti contemporaneamente.

Questa pagina spiega come configurare l'ordine dei passaggi di build.

Ordine e dipendenze dei passaggi della build

Utilizza il campo waitFor in un passaggio della build per specificare quali passaggi devono essere eseguiti prima dell'esecuzione del passaggio della build. Se non vengono forniti valori per waitFor, il passaggio di build attende il completamento corretto di tutti i passaggi di build precedenti nella richiesta di build prima di essere eseguito.

Per eseguire un passaggio di build immediatamente al momento della build, utilizza - nel campo waitFor.

L'ordine dei passaggi di build nel campo steps si riferisce all'ordine in cui vengono eseguiti i passaggi. I passaggi vengono eseguiti in sequenza o contemporaneamente in base alle dipendenze definite nei 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 campo waitFor vuoto) attenderanno il completamento corretto di tutti i passaggi precedenti prima dell'esecuzione. Pertanto, se nessun passaggio contiene un id nel relativo campo waitFor, tutti i passaggi verranno eseguiti in sequenza nell'ordine in cui sono definiti.

I passaggi possono dipendere dall'inizio della build se waitFor contiene solo -. Se dichiari che un passaggio dipende solo da -, il passaggio viene eseguito immediatamente all'avvio della build. Il primo passaggio definito dipende implicitamente dall'inizio.

Il seguente snippet mostra una configurazione di build con due passaggi eseguiti in sequenza:

YAML

steps:
- name: foo
- name: bar

JSON

{
    "steps": [{
        "name": "foo"
    },
    {
        "name": "bar"
    }
    ]
}

Il seguente snippet mostra due passaggi simultanei che dipendono entrambi da start; il terzo passaggio attende il completamento corretto dei primi due prima di essere avviato. Questa build simultanea esegue i passaggi A e B all'inizio della build. Il terzo passaggio attenderà implicitamente il completamento dei due passaggi precedenti prima di iniziare. Questo esempio potrebbe essere semplificato omettendo i campi id, che non vengono citati in un waitFor successivo.

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"
    }
    ]
}

Il seguente snippet mostra i passaggi simultanei che dipendono da un passaggio precedente. Il passaggio A viene eseguito immediatamente all'avvio della build. 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 potrebbero essere omessi senza modificare l'ordine di esecuzione.

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"
        ]
    }
    ]
}

Esempi

L'esempio seguente chiama i passaggi gcloud storage e wget contemporaneamente. Una volta completati questi passaggi, viene chiamato il passaggio 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/gcloud'
  args: ['storage', '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/gcloud",
      "args": [
        "storage",
        "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 build. I valori di id vengono utilizzati in waitFor per definire l'ordine dei passaggi di build:

  • Il primo passaggio fetch-resources utilizza gcloud storage per copiare le risorse locali da Cloud Storage. Contemporaneamente, go genera, testa e installa il codice sorgente.
  • Successivamente, il passaggio di compilazione docker crea l'immagine dopo che tutti gli altri passaggi sono stati completati.

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/gcloud'
  args: ['storage', '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/gcloud",
      "args": [
        "storage",
        "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