Como configurar a ordem das etapas de versão

Você pode especificar a ordem em que as etapas de versão são executadas. Por padrão, as etapas de versão são executadas sequencialmente, mas você pode configurá-las para serem executadas simultaneamente.

Nesta página, explicamos como configurar a ordem das etapas de versão.

Ordem e dependências das etapas de versão

Use o campo waitFor em uma etapa de versão para especificar quais etapas precisam ser executadas antes dela. Se nenhum valor for fornecido para waitFor, a etapa de versão aguardará a conclusão de todas as etapas de versão anteriores na solicitação de versão antes de ser executada.

Para executar uma etapa de versão imediatamente no momento da criação, use - no campo waitFor.

A ordem das etapas de versão no campo steps está relacionada com a ordem em que elas são executadas. As etapas serão executadas de maneira sequencial ou simultânea com base nas dependências definidas nos campos waitFor.

Uma etapa depende de cada id no campo waitFor e não será iniciada até que cada dependência seja concluída.

As etapas sem o campo opcional waitFor (ou que tenham waitFor vazio) precisarão aguardar a conclusão de todas as etapas anteriores antes de serem executadas. Portanto, se nenhuma etapa contiver um id no campo waitFor, todas elas serão executadas em série na ordem em que são definidas.

As etapas podem depender do início da versão se o campo waitFor tiver apenas -. Ao declarar que uma etapa depende apenas de -, ela é executada imediatamente no início da versão. A primeira etapa definida depende implicitamente do início.

O snippet a seguir mostra uma configuração de versão com duas etapas executadas em série:

YAML

steps:
- name: foo
- name: bar

JSON

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

O snippet a seguir mostra duas etapas simultâneas que dependem do início. A terceira etapa espera as duas primeiras serem concluídas para ser iniciada. Essa versão simultânea executa as etapas A e B no início. A terceira etapa esperará implicitamente até que as etapas anteriores sejam concluídas antes de começar. Esse exemplo pode ser simplificado com a omissão dos campos id, que não são referenciados em um campo 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 snippet a seguir mostra etapas simultâneas que dependem de uma etapa anterior. A etapa A é executada imediatamente quando a versão é iniciada. As etapas B e C, executadas simultaneamente após A ter sido concluída com sucesso. Os campos id e waitFor da etapa B e o campo id da etapa 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 as etapas gsutil e wget simultaneamente. Depois que estas etapas forem concluídas, a etapa ubuntu é chamada.

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 determinadas etapas de versão. Os valores de id são usados em waitFor para definir a ordem das etapas de versão:

  • Primeiro, a etapa fetch-resources usa gsutil para copiar os recursos locais do Cloud Storage. Ao mesmo tempo, go gera, testa e instala o código-fonte.
  • Em seguida, a etapa de versão docker cria a imagem depois de todas as outras etapas serem concluídas.

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

A seguir

Enviar comentários sobre…