빌드 단계 순서 구성

빌드 단계가 실행되는 순서를 지정할 수 있습니다. 기본적으로 빌드 단계는 순차적으로 실행되지만 동시에 실행되도록 구성할 수 있습니다.

이 페이지에서는 빌드 단계의 순서를 구성하는 방법을 설명합니다.

빌드 단계 순서 및 종속 항목

빌드 단계의 waitFor 필드를 사용하여 이 단계보다 먼저 실행해야 하는 단계를 지정합니다. waitFor에 지정된 값이 없으면 빌드 단계는 빌드 요청의 모든 이전 빌드 단계가 완료될 때까지 기다린 후에 실행됩니다.

빌드 시 빌드 단계를 즉시 실행하려면 waitFor 필드에 -를 사용합니다.

steps 필드에서 빌드 단계의 순서는 단계가 실행되는 순서와 관련이 있습니다. 단계는 해당 waitFor 필드에 정의된 종속 항목에 따라 순차적으로 또는 동시에 실행됩니다.

단계는 waitFor의 모든 id에 종속적이며 각 종속항목이 성공적으로 완료된 후에 시작됩니다.

선택적 waitFor 필드가 없는 단계(또는 waitFor가 비어 있는 단계)는 모든 이전 단계가 성공적으로 완료될 때까지 기다린 후에 실행됩니다. 따라서 waitFor 필드에 id가 포함된 단계가 없으면 모든 단계가 정의된 순서에 따라 순차적으로 실행됩니다.

waitFor-만 포함하면 빌드 시작 시 단계가 실행될 수 있습니다. 단계가 -에만 의존한다고 선언하면 빌드가 시작될 때 즉시 단계가 실행됩니다. 첫 번째로 정의된 단계는 암시적으로 빌드 시작 시 실행됩니다.

다음 스니펫은 두 단계가 연속적으로 실행되는 빌드 구성을 보여줍니다.

YAML

steps:
- name: foo
- name: bar

JSON

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

다음 스니펫은 시작에 의존하는 두 가지 동시 단계를 세 번째 단계는 앞의 두 단계가 완료된 후 시작됩니다. 이 동시 빌드는 빌드 시작 시 단계 AB를 실행합니다. 세 번째 단계는 이전의 두 단계가 완료될 때까지 암시적으로 대기한 후 시작됩니다. 이 예시는 후속 waitFor에서 참조되지 않는 id 필드를 누락하여 간소화할 수 있습니다.

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

다음 스니펫은 이전 단계에 의존하는 동시 단계를 보여줍니다. 단계 A는 빌드가 시작될 때 즉시 실행됩니다. 단계 BCA가 성공적으로 완료된 후에 동시에 실행됩니다. 실행 순서를 변경하지 않고 B 단계의 idwaitFor 필드와 C 단계의 id 필드를 누락할 수 있습니다.

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

예시

아래 예시에서는 gsutilwget 단계를 동시에 호출합니다. 이 단계가 완료되면 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"
      ]
    }
  ]
}

아래 예시에서는 id 필드를 사용하여 특정 빌드 단계를 식별합니다. id의 값은 waitFor에서 빌드 단계 순서를 정의하기 위해 사용됩니다.

  • 먼저 fetch-resources 단계는 gsutil을 사용하여 Cloud Storage에서 로컬 리소스를 복사합니다. 이와 동시에 go가 소스 코드를 생성, 테스트, 설치합니다.
  • 그런 다음 다른 모든 단계가 완료된 후에 docker 빌드 단계가 이미지를 빌드합니다.

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

다음 단계