Configura el orden de los pasos de la compilación

Puedes especificar el orden en el que se ejecutan los pasos de compilación. De forma predeterminada, los pasos de compilación se ejecutan de manera secuencial, pero puedes configurarlos para que se ejecuten en simultáneo.

En esta página, se explica cómo configurar el orden de los pasos de compilación.

Orden y dependencias de los pasos de compilación

Usa el campo waitFor en un paso de compilación para especificar los pasos que se deben ejecutar antes de que se ejecute el paso de compilación. Si no se proporcionan valores para waitFor, el paso de compilación espera a que todos los pasos de la compilación anteriores en la solicitud de compilación se completen con éxito antes de ejecutarse.

Para ejecutar un paso de compilación de forma inmediata en el momento de la compilación, usa - en el campo waitFor.

El orden de los pasos de compilación en el campo steps se relaciona con el orden en que se ejecutan los pasos. Los pasos se ejecutarán en simultáneo o de forma consecutiva según las dependencias definidas en los campos waitFor.

Un paso depende de cada id en su waitFor y no se iniciará hasta que cada dependencia se haya completado con éxito.

Los pasos sin el campo opcional waitFor (o con un waitFor vacío) esperarán a que todos los pasos anteriores se completen con éxito antes de ejecutarse. Por lo tanto, si ningún paso contiene un id en su campo waitFor, entonces todos los pasos se ejecutarán de forma consecutiva en el orden en que se definieron.

Los pasos pueden depender del inicio de la compilación si waitFor contiene solo -. Si declaras que un paso dependa solo de -, este se ejecuta de forma inmediata cuando se inicia la compilación. El primer paso definido depende, de forma implícita, del inicio.

En el siguiente fragmento, se muestra una configuración de compilación con dos pasos que se ejecutan de forma consecutiva:

YAML

steps:
- name: foo
- name: bar

JSON

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

En el siguiente fragmento, se muestran dos pasos simultáneos que dependen del inicio. El tercer paso espera a que los dos primeros se completen de forma correcta antes de iniciarse. Esta compilación simultánea ejecuta los pasos A y B al comienzo de la compilación. Antes de comenzar, el tercer paso esperará, de forma implícita, hasta que los dos pasos anteriores finalicen. Este ejemplo podría simplificarse si se omiten los campos de id, a los que no se hace referencia en un waitFor posterior.

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

En el siguiente fragmento, se muestran pasos simultáneos que dependen de un paso anterior. El paso A se ejecuta de forma inmediata cuando comienza la compilación. Los pasos B y C se ejecutan en simultáneo después de que A se complete con éxito. Ten en cuenta que los campos id y waitFor en el paso B, y el campo id en el paso C podrían omitirse sin cambiar el orden de ejecución.

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

Ejemplos

En el siguiente ejemplo, se llama a los pasos gsutil y wget en simultáneo. Después de que estos pasos se completen, se llama al paso 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"
      ]
    }
  ]
}

En el siguiente ejemplo, se usa el campo de id para identificar ciertos pasos de compilación. Los valores de id se usan en waitFor para definir el orden de los pasos de compilación de la siguiente manera:

  • Primero, el paso fetch-resources usa gsutil para copiar los recursos locales desde Cloud Storage. Al mismo tiempo, go genera, prueba y luego instala el código fuente.
  • Luego, el paso de compilación de docker compila la imagen después de que todos los demás pasos se completan.

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

Pasos siguientes

¿Te ha resultado útil esta página? Enviar comentarios:

Enviar comentarios sobre...