빌드 단계가 실행되는 순서를 지정할 수 있습니다. 기본적으로 빌드 단계는 순차적으로 실행되지만 동시에 실행되도록 구성할 수 있습니다.
이 페이지에서는 빌드 단계의 순서를 구성하는 방법을 설명합니다.
빌드 단계 순서 및 종속 항목
빌드 단계의 waitFor
필드를 사용하여 이 단계보다 먼저 실행해야 하는 단계를 지정합니다. waitFor
에 지정된 값이 없으면 빌드 단계는 빌드 요청의 모든 이전 빌드 단계가 완료될 때까지 기다린 후에 실행됩니다.
빌드 시 빌드 단계를 즉시 실행하려면 waitFor
필드에 -
를 사용합니다.
steps
필드에서 빌드 단계의 순서는 단계가 실행되는 순서와 관련이 있습니다. 단계는 해당 waitFor
필드에 정의된 종속 항목에 따라 순차적으로 또는 동시에 실행됩니다.
단계는 waitFor
의 모든 id
에 종속적이며 각 종속항목이 성공적으로 완료된 후에 시작됩니다.
선택적 waitFor
필드가 없는 단계(또는 waitFor
가 비어 있는 단계)는 모든 이전 단계가 성공적으로 완료될 때까지 기다린 후에 실행됩니다. 따라서 waitFor
필드에 id
가 포함된 단계가 없으면 모든 단계가 정의된 순서에 따라 순차적으로 실행됩니다.
waitFor
에 -
만 포함하면 빌드 시작 시 단계가 실행될 수 있습니다. 단계가 -
에만 의존한다고 선언하면 빌드가 시작될 때 즉시 단계가 실행됩니다. 첫 번째로 정의된 단계는 암시적으로 빌드 시작 시 실행됩니다.
다음 스니펫은 두 단계가 연속적으로 실행되는 빌드 구성을 보여줍니다.
YAML
steps:
- name: foo
- name: bar
JSON
{
"steps": [{
"name": "foo"
},
{
"name": "bar"
}
]
}
다음 스니펫은 시작에 의존하는 두 가지 동시 단계를 세 번째 단계는 앞의 두 단계가 완료된 후 시작됩니다. 이 동시 빌드는 빌드 시작 시 단계 A
와 B
를 실행합니다. 세 번째 단계는 이전의 두 단계가 완료될 때까지 암시적으로 대기한 후 시작됩니다. 이 예시는 후속 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
는 빌드가 시작될 때 즉시 실행됩니다. 단계 B
와 C
는 A
가 성공적으로 완료된 후에 동시에 실행됩니다. 실행 순서를 변경하지 않고 B
단계의 id
및 waitFor
필드와 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"
]
}
]
}
예시
아래 예시에서는 gsutil
및 wget
단계를 동시에 호출합니다.
이 단계가 완료되면 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"
]
}
다음 단계
- 아티팩트를 빌드, 테스트, 배포하도록 Cloud Build 구성.
- 수동으로 트리거를 사용하여 빌드를 실행하는 방법 알아보기