작업 스크립트에서 CI/CD 변수 사용
GitLab v19.2Offering: GitLab.com, GitLab Self-Managed, GitLab Dedicated
모든 CI/CD 변수는 작업 환경에서 환경 변수로 설정됩니다. 환경 변수에 접근하려면 러너 executor의 셸에 맞는 구문을 사용합니다. Bash, sh 및 유사한 셸에서 환경 변수에 접근하려면 CI/CD 변수 앞에 $를 붙입니다:
모든 CI/CD 변수는 작업 환경에서 환경 변수로 설정됩니다. 각 환경의 셸에 맞는 표준 형식으로 작업 스크립트에서 변수를 사용할 수 있습니다.
환경 변수에 접근하려면 러너 executor의 셸에 맞는 구문을 사용합니다.
Bash 및 sh 사용#
Bash, sh 및 유사한 셸에서 환경 변수에 접근하려면 CI/CD 변수 앞에 $를 붙입니다:
job_name:
script:
- echo "$CI_JOB_ID"
PowerShell 사용#
시스템에서 설정한 환경 변수를 포함하여 Windows PowerShell 환경에서 변수에 접근하려면
변수 이름 앞에 $env: 또는 $를 붙입니다:
job_name:
script:
- echo $env:CI_JOB_ID
- echo $CI_JOB_ID
- echo $env:PATH
Windows Batch 사용#
Windows Batch에서 CI/CD 변수에 접근하려면 변수를 %로 둘러쌉니다:
job_name:
script:
- echo %CI_JOB_ID%
지연 확장을 위해 변수를 !로 둘러쌀 수도 있습니다.
지연 확장은 공백이나 줄 바꿈을 포함하는 변수에 필요할 수 있습니다:
job_name:
script:
- echo !ERROR_MESSAGE!
서비스 컨테이너에서#
서비스 컨테이너는 CI/CD 변수를 사용할 수 있지만,
기본적으로 .gitlab-ci.yml 파일에 저장된 변수에만 접근할 수 있습니다.
서비스 컨테이너는 기본적으로 신뢰되지 않으므로 GitLab UI에서 추가된 변수는 서비스 컨테이너에서 사용할 수 없습니다.
UI에서 정의된 변수를 서비스 컨테이너에서 사용하려면 .gitlab-ci.yml에서 다른 변수에 재할당할 수 있습니다:
variables:
SA_PASSWORD_YAML_FILE: $SA_PASSWORD_UI
재할당된 변수는 원래 변수와 같은 이름을 가질 수 없습니다. 그렇지 않으면 확장되지 않습니다.
파싱 오류 방지#
YAML 및 셸 파싱 오류를 방지하기 위해 스크립트 명령과 변수 값을 따옴표로 감쌉니다:
- 콜론(
:)을 포함하는 명령은 YAML이 이를 키-값 쌍으로 해석하지 못하도록 전체 명령을 따옴표로 감쌉니다:
job_name:
script:
- 'echo "Status: Complete"' # Single quotes prevent YAML colon parsing
- 값에 공백이나 특수 문자가 포함될 수 있는 경우 변수를 따옴표로 감쌉니다:
job_name:
script:
- echo "$FILE_PATH" # Quote if FILE_PATH might have spaces
- 변수를 별도의 셸 인수로 확장하려는 경우 따옴표를 사용하지 않습니다:
job_name:
variables:
COMPILE_FLAGS: "-Wall -Werror -O2"
script:
- gcc $COMPILE_FLAGS main.c # Expands to: gcc -Wall -Werror -O2 main.c
script 섹션에서 artifacts 또는 cache로 환경 변수 전달#
$GITLAB_ENV를 사용하여 script 섹션에서 정의된 환경 변수를 artifacts 또는 cache 키워드에서 사용합니다. 예를 들어:
build-job:
stage: build
script:
- echo "ARCH=$(arch)" >> $GITLAB_ENV
- touch some-file-$(arch)
artifacts:
paths:
- some-file-$ARCH
하나의 변수에 여러 값 저장#
값 배열인 CI/CD 변수를 만들 수는 없지만, 유사한 동작을 위해 셸 스크립팅 기법을 사용할 수 있습니다.
예를 들어, 변수에 공백으로 구분된 여러 값을 저장한 다음 스크립트로 값을 반복할 수 있습니다:
job1:
variables:
FOLDERS: src test docs
script:
- |
for FOLDER in $FOLDERS
do
echo "The path is root/${FOLDER}"
done
다른 변수에서 CI/CD 변수 사용#
변수 내에서 변수를 사용할 수 있습니다:
job:
variables:
FLAGS: '-al'
LS_CMD: 'ls "$FLAGS"'
script:
- 'eval "$LS_CMD"' # Executes 'ls -al'
문자열의 일부로#
변수를 문자열의 일부로 사용할 수 있습니다. 변수 이름을 주변 텍스트와 구분하는 데 도움이 되도록
변수를 중괄호({})로 둘러쌀 수 있습니다. 중괄호 없이는 인접한 텍스트가 변수 이름의 일부로
해석됩니다. 예를 들어:
job:
variables:
FLAGS: '-al'
DIR: 'path/to/directory'
LS_CMD: 'ls "$FLAGS"'
CD_CMD: 'cd "${DIR}_files"'
script:
- 'eval "$LS_CMD"' # Executes 'ls -al'
- 'eval "$CD_CMD"' # Executes 'cd path/to/directory_files'
CI/CD 변수에서 $ 문자 사용#
$ 문자를 다른 변수의 시작으로 해석하지 않으려면 대신 $$를 사용합니다:
job:
variables:
FLAGS: '-al'
LS_CMD: 'ls "$FLAGS" $$TMP_DIR'
script:
- 'eval "$LS_CMD"' # Executes 'ls -al $TMP_DIR'
이것은 CI/CD 변수를 다운스트림 파이프라인에 전달할 때는 작동하지 않습니다.