이 페이지에서는 빌드 단계 내에서 bash 스크립트를 실행하도록 Cloud Build를 구성하는 방법을 설명합니다. Cloud Build를 처음 사용하는 경우 빠른 시작 및 빌드 구성 개요를 먼저 읽어보세요.
빌드 단계 내에서 bash 스크립트를 실행하여 많은 스크립트를 구성할 수 있습니다.
- 하나의 빌드 단계로 여러 명령어를 실행합니다.
- 파일 시스템에서 읽기를 수행합니다.
- 재시도 또는 조건과 같은 논리를 빌드합니다.
echo $VARNAME
실행과 같이 로그로 출력합니다.
script
필드 사용
Cloud Build는 빌드 단계에서 실행할 셸 스크립트를 지정하는 데 사용할 수 있는 script
필드를 제공합니다. script
필드는 단일 문자열 값을 사용합니다.
문자열 값에 shebang 프리픽스를 추가하여 스크립트를 해석하는 셸을 지정할 수 있습니다. 예를 들어 Bash 셸을 지정하려면 #!/usr/bin/env bash
를 추가합니다. 스크립트 문자열에 shebang 프리픽스를 붙이지 않으면 Cloud Build는 Bash 셸이 아닌 기본 sh 셸인 #!/bin/sh
를 사용합니다.
빌드 단계에서 script
를 지정하면 동일한 단계에서 args
또는 entrypoint
을 지정할 수 없습니다.
다음 스니펫은 script
필드를 보여줍니다.
YAML
steps:
- name: 'bash'
script: |
#!/usr/bin/env bash
echo "Hello World"
- name: 'ubuntu'
script: echo hello
- name: 'python'
script: |
#!/usr/bin/env python
print('hello from python')
JSON
{
"steps": [
{
"name": "bash",
"script": "#!/usr/bin/env bash echo 'Hello World'"
},
{
"name": "ubuntu",
"script": "echo hello"
},
{
"name": "python",
"script": "#!/usr/bin/env python\nprint('hello from python')\n"
}
]
}
script
필드에 대체 항목 사용
스크립트는 대체 항목을 직접 지원하지 않지만 환경 변수를 지원합니다. 모든 환경 변수를 직접 정의하여 대체 항목을 환경 변수에 자동으로 모두 한 번에 또는 수동으로 매핑할 수 있습니다.
대체 항목 자동 매핑
빌드 수준에서. 모든 대체 항목을 전체 빌드에서 사용할 수 있는 환경 변수에 자동으로 매핑하려면 빌드 수준의 옵션으로
automapSubstitutions
를true
로 설정합니다. 예를 들어 다음 빌드 구성 파일은 환경 변수에 매핑된 사용자 정의된 대체 항목$_USER
및 기본 대체 항목$PROJECT_ID
를 보여줍니다.YAML
steps: - name: 'ubuntu' script: | #!/usr/bin/env bash echo "Hello $_USER" - name: 'ubuntu' script: | #!/usr/bin/env bash echo "Your project ID is $PROJECT_ID" options: automapSubstitutions: true substitutions: _USER: "Google Cloud"
JSON
{ "steps": [ { "name": "ubuntu", "script": "#!/usr/bin/env bash echo 'Hello $_USER'" }, { "name": "ubuntu", "script": "#!/usr/bin/env bash echo 'Your project ID is $PROJECT_ID'" } ], "options": { "automap_substitutions": true }, "substitutions": { "_USER": "Google Cloud" } }
단계 수준에서. 모든 대체 항목을 자동으로 매핑하고 한 번에 환경 변수로 사용할 수 있게 하려면 해당 단계에서
automapSubstitutions
필드를true
로 설정합니다. 다음 예시에서는 자동 대체 항목 매핑이 사용 설정된 유일한 항목이므로 두 번째 단계에서만 대체 항목이 올바르게 표시됩니다.YAML
steps: - name: 'ubuntu' script: | #!/usr/bin/env bash echo "Hello $_USER" - name: 'ubuntu' script: | #!/usr/bin/env bash echo "Your project ID is $PROJECT_ID" automapSubstitutions: true substitutions: _USER: "Google Cloud"
JSON
{ "steps": [ { "name": "ubuntu", "script": "#!/usr/bin/env bash echo 'Hello $_USER'" }, { "name": "ubuntu", "script": "#!/usr/bin/env bash echo 'Your project ID is $PROJECT_ID'", "automap_substitutions": true } ], }, "substitutions": { "_USER": "Google Cloud" }
또한 전체 빌드에서 대체 항목을 환경 변수로 사용할 수 있게 설정한 후 한 번에 무시해도 됩니다. 빌드 수준에서
automapSubstitutions
를true
로 설정한 후 대체 항목을 무시하려는 단계에서 동일한 필드를false
로 설정합니다. 다음 예시에서는 빌드 수준에서 매핑 대체 항목이 사용 설정되어 있더라도automapSubstitutions
가 해당 단계에서false
로 설정되어 있기 때문에 프로젝트 ID가 두 번째 단계에서 출력되지 않습니다.YAML
steps: - name: 'ubuntu' script: | #!/usr/bin/env bash echo "Hello $_USER" - name: 'ubuntu' script: | #!/usr/bin/env bash echo "Your project ID is $PROJECT_ID" automapSubstitutions: false options: automapSubstitutions: true substitutions: _USER: "Google Cloud"
JSON
{ "steps": [ { "name": "ubuntu", "script": "#!/usr/bin/env bash echo 'Hello $_USER'" }, { "name": "ubuntu", "script": "#!/usr/bin/env bash echo 'Your project ID is $PROJECT_ID'", "automap_substitutions": false } ], "options": { "automap_substitutions": true }, }, "substitutions": { "_USER": "Google Cloud" }
수동으로 대체 항목 매핑
대체 항목을 환경 변수에 수동으로 매핑할 수 있습니다. 모든 환경 변수는 env
필드를 사용하여 단계 수준에서 정의되며 변수 범위는 변수가 정의된 단계로 제한됩니다. 이 필드에는 키와 값의 목록이 사용됩니다.
다음 예시에서는 대체 항목 $PROJECT_ID
을 환경 변수 BAR
에 매핑하는 방법을 보여줍니다.
YAML
steps:
- name: 'ubuntu'
env:
- 'BAR=$PROJECT_ID'
script: 'echo $BAR'
JSON
{
"steps": [
{
"name": "ubuntu",
"env": [
"BAR=$PROJECT_ID"
],
"script": "echo $BAR"
}
]
}
디스크에서 bash 스크립트 실행
bash 스크립트를 파일에 저장한 경우, 이 파일을 빌드 소스와 함께 저장하고, 빌드 구성 파일 내에서 스크립트 파일을 참조합니다.
YAML
steps:
- name: 'bash'
args: ['./myscript.bash']
JSON
{
"steps": [
{
"name": "bash",
"args": [
"./myscript.bash"
]
}
]
}
bash가 사용 중인 이미지의 기본 진입점이 아닌 경우 파일에서 bash 스크립트를 사용하려면 bash를 가리키는 entrypoint
필드를 추가합니다.
YAML
steps:
- name: 'gcr.io/cloud-builders/gcloud'
entrypoint: 'bash'
args: ['tools/myScript.sh','--foo']
JSON
{
"steps": [
{
"name": "gcr.io/cloud-builders/gcloud",
"entrypoint": "bash",
"args": [
"tools/myScript.sh",
"--foo"
]
}
]
}
인라인 bash 스크립트 실행
bash
이미지를 사용하여 bash 명령어를 실행하려면 bash
를 빌드 단계의 name
으로 지정하고 args 필드에 명령어를 지정합니다.
YAML
steps:
- name: 'bash'
args: ['echo', 'I am running a bash command']
JSON
{
"steps": [
{
"name": "bash",
"args": [
"echo",
"I am running a bash command"
]
}
]
}
사용 중인 이미지에 bash
가 미리 포함되었지만 bash
가 기본 진입점이 아니면 bash
를 가리키는 entrypoint
필드를 추가합니다. 아래 예시에서 bash
진입점은 Cloud Build에 빌드 상태를 쿼리하고 실패 상태의 빌드를 나열하는 gcloud
명령어를 실행하는 데 사용됩니다.
YAML
steps:
- name: 'gcr.io/google.com/cloudsdktool/cloud-sdk'
entrypoint: 'bash'
args:
- '-eEuo'
- 'pipefail'
- '-c'
- |-
gcloud builds list > builds.txt
while read line; do
if grep -q "FAILURE" <<< "$line"; then
echo "$line"
fi
done < builds.txt
JSON
{
"steps": [
{
"name": "gcr.io/google.com/cloudsdktool/cloud-sdk",
"entrypoint": "bash",
"args": [
"-eEuo",
"pipefail",
"-c",
"gcloud builds list > builds.txt\nwhile read line; do\n if grep -q \"FAILURE\" <<< \"$line\"; then\n echo \"$line\"\n fi\ndone < builds.txt"
]
}
]
}
위 코드에서는 여러 줄 명령어를 실행하기 위해 -c
플래그가 사용되었습니다. -c
다음에 전달하는 문자열은 모두 명령어로 취급됩니다. -c
로 bash 명령어 실행에 대한 자세한 내용은 bash 문서를 참조하세요.
다음 단계
- 수동으로 빌드 시작 방법 알아보기
- 트리거를 사용하여 빌드 자동화 방법 알아보기
- 빌드 단계 순서 구성 방법 알아보기
- 커뮤니티 기부 빌더 및 커스텀 빌더 사용 방법 알아보기