변수 사용 가능한 위치

Tier: Free, Premium, Ultimate Offering: GitLab.com, Self-managed, GitLab Dedicated

CI/CD 변수 문서에 설명된대로 다양한 변수를 정의할 수 있습니다. 일부 변수는 모든 GitLab CI/CD 기능에 사용될 수 있지만, 일부는 더 나은지 또는 제한적입니다.

이 문서는 다른 유형의 변수가 어디에서 어떻게 사용될 수 있는지 설명합니다.

변수 사용

정의된 변수는 두 군데에서 사용될 수 있습니다.

  1. GitLab 측인 .gitlab-ci.yml 파일 내에서
  2. GitLab Runner 측인 config.toml 내에서

.gitlab-ci.yml 파일

  • CI_ENVIRONMENT_SLUG를 제외한 CI_ENVIRONMENT_* 변수를 16.4버전에서 지원합니다.
정의 확장 가능 여부 확장 위치 설명
after_script 가능 스크립트 실행 쉘 변수 확장은 실행 쉘 환경에 의해 이루어집니다.
artifacts:name 가능 Runner 변수 확장은 GitLab Runner의 쉘 환경에 의해 이루어집니다.
artifacts:paths 가능 Runner 변수 확장은 GitLab Runner의 쉘 환경에 의해 이루어집니다.
before_script 가능 스크립트 실행 쉘 변수 확장은 실행 쉘 환경에 의해 이루어집니다.
cache:key 가능 Runner 변수 확장은 GitLab Runner의 내부 변수 확장 메커니즘에 의해 이루어집니다.
cache:policy 가능 Runner 변수 확장은 GitLab Runner의 내부 변수 확장 메커니즘에 의해 이루어집니다.
environment:name 가능 GitLab environment:url과 유사하지만, 변수 확장은 다음을 지원하지 않습니다:

- CI_ENVIRONMENT_* 변수
- 유지 변수.
environment:url 가능 GitLab 변수 확장은 GitLab의 내부 변수 확장 메커니즘에 의해 이루어집니다.

작업에 정의된 모든 변수가 지원됩니다 (프로젝트/그룹 변수, .gitlab-ci.yml의 변수, 트리거 변수, 파이프라인 스케줄 변수).

GitLab Runner config.toml에서 정의된 변수나 작업의 script에서 생성된 변수는 지원되지 않습니다.
environment:auto_stop_in 가능 GitLab 변수 확장은 GitLab의 내부 변수 확장 메커니즘에 의해 이루어집니다.

변수의 값은 인간이 읽기 쉬운 자연어 형태의 기간이어야 합니다. 자세한 정보는 가능한 입력에서 확인하세요.
id_tokens:aud 가능 GitLab 변수 확장은 GitLab의 내부 변수 확장 메커니즘에 의해 이루어집니다. 변수 확장은 16.1버전에서 지원됩니다.
image 가능 Runner 변수 확장은 GitLab Runner의 내부 변수 확장 메커니즘에 의해 이루어집니다.
include 가능 GitLab 변수 확장은 GitLab의 내부 변수 확장 메커니즘에 의해 이루어집니다.

더 자세한 정보는 포함 시 변수 사용에서 확인하세요.
resource_group 가능 GitLab environment:url과 유사하지만, 변수 확장은 다음을 지원하지 않습니다:
- CI_ENVIRONMENT_URL
- 유지 변수.
rules:changes 불가 GitLab 변수 확장은 GitLab의 내부 변수 확장 메커니즘에 의해 이루어집니다.
rules:changes:compare_to 불가 GitLab 변수 확장은 GitLab의 내부 변수 확장 메커니즘에 의해 이루어집니다.
rules:exists 불가 GitLab 변수 확장은 GitLab의 내부 변수 확장 메커니즘에 의해 이루어집니다.
rules:if 불가 해당 없음 변수는 $variable 형식이어야 합니다. 지원되지 않는 것은 다음과 같습니다:

- CI_ENVIRONMENT_SLUG 변수
- 유지 변수.
script 가능 스크립트 실행 쉘 변수 확장은 실행 쉘 환경에 의해 이루어집니다.
services:name 가능 Runner 변수 확장은 GitLab Runner의 내부 변수 확장 메커니즘에 의해 이루어집니다.
services 가능 Runner 변수 확장은 GitLab Runner의 내부 변수 확장 메커니즘에 의해 이루어집니다.
tags 가능 GitLab 변수 확장은 GitLab의 내부 변수 확장 메커니즘에 의해 이루어집니다.
trigger trigger:project 가능 GitLab 변수 확장은 GitLab의 내부 변수 확장 메커니즘에 의해 이루어집니다. trigger:project의 변수 확장은 15.3버전에서 지원됩니다.
variables 가능 GitLab/Runner 변수 확장은 먼저 GitLab의 내부 변수 확장 메커니즘에 의해 이루어지고, 인식되지 않거나 사용할 수 없는 변수는 GitLab Runner의 내부 변수 확장 메커니즘에 의해 확장됩니다.
workflow:name 가능 GitLab 변수 확장은 GitLab의 내부 변수 확장 메커니즘에 의해 이루어집니다.

workflow에서 사용 가능한 모든 변수가 지원됩니다:
- 프로젝트/그룹 변수.
- 전역 variablesworkflow:rules:variables (규칙과 일치할 때).
- 상위 파이프라인에서 상속된 변수.
- 트리거 변수.
- 파이프라인 스케줄 변수.

GitLab Runner config.toml에 정의된 변수, 작업에서 정의된 변수, 또는 유지 변수는 지원되지 않습니다.

config.toml 파일

정의 확장 가능? 설명
runners.environment 변수 확장은 GitLab Runner의 내부 변수 확장 메커니즘에 의해 이루어집니다.
runners.kubernetes.pod_labels 변수 확장은 GitLab Runner의 내부 변수 확장 메커니즘에 의해 이루어집니다.
runners.kubernetes.pod_annotations 변수 확장은 GitLab Runner의 내부 변수 확장 메커니즘에 의해 이루어집니다.

config.toml에 대해 더 읽어보세요. GitLab Runner 문서.

확장 메커니즘

세 가지 확장 메커니즘이 있습니다.

  • GitLab
  • GitLab Runner
  • 실행 셸 환경

GitLab 내부 변수 확장 메커니즘

확장된 부분은 $variable, ${variable} 또는 %variable%의 형식이어야 합니다. 모든 형식은 동일한 방식으로 처리되며, 어떤 OS/셸에서 작업을 처리하든 상관없이, 확장은 모든 Runner가 작업을 받기 전에 GitLab에서 수행됩니다.

중첩 변수 확장

GitLab은 실행 전에 작업 변수 값을 재귀적으로 확장한 다음 Runner로 보냅니다. 예를 들어, 다음 시나리오에서:

- BUILD_ROOT_DIR: '${CI_BUILDS_DIR}'
- OUT_PATH: '${BUILD_ROOT_DIR}/out'
- PACKAGE_PATH: '${OUT_PATH}/pkg'

Runner는 유효한, 완전히 형성된 경로를 받습니다. 예를 들어, ${CI_BUILDS_DIR}/output이라면, PACKAGE_PATH/output/out/pkg가 됩니다.

사용할 수 없는 변수에 대한 참조는 그대로 남아 있습니다. 이 경우 Runner는 런타임에 변수 값을 확장하려고 시도합니다. 예를 들어, CI_BUILDS_DIR와 같은 변수는 Runner에게 런타임에만 알려진 변수입니다.

GitLab Runner 내부 변수 확장 메커니즘

  • 지원: 프로젝트/그룹 변수, .gitlab-ci.yml 변수, config.toml 변수 및 트리거, 파이프라인 스케줄 및 수동 파이프라인에서의 변수.
  • 미지원: 스크립트 내에서 정의된 변수 (예: export MY_VARIABLE="test").

Runner는 변수 확장을 위해 Go의 os.Expand() 메서드를 사용합니다. 즉, $variable${variable}로만 정의된 변수를 처리합니다. 또한 확장은 한 번만 수행되므로 중첩 변수가 작동할지 여부는 변수 정의의 순서 및 GitLab에서 중첩 변수 확장이 활성화되었는지에 따라 달라집니다.

실행 셸 환경

이것은 script 실행 중에 발생하는 확장 단계입니다. 그 동작은 사용하는 셸에 따라 다릅니다 (bash, sh, cmd, PowerShell). 예를 들어, 작업의 scriptecho $MY_VARIABLE-${MY_VARIABLE_2}라는 줄이 있는 경우, bash/sh에서는 적절하게 처리되지만(변수가 정의되었든 안 되었든 빈 문자열 또는 일부 값이 남음), Windows의 cmd 또는 PowerShell에서는 작동하지 않습니다. 이는 이러한 셸이 다른 변수 구문을 사용하기 때문입니다.

지원 대상:

  • script는 해당 셸에 대한 기본 사용 가능한 모든 변수를 사용할 수 있습니다 (예: 모든 bash/sh 셸에 있는 $PATH) 및 GitLab CI/CD에서 정의된 모든 변수 (프로젝트/그룹 변수, .gitlab-ci.yml 변수, config.toml 변수, 트리거 및 파이프라인 스케줄에서의 변수).
  • script는 이전 라인에서 정의된 모든 변수를 사용할 수 있습니다. 따라서 예를 들어, export MY_VARIABLE="test"를 정의하면:
    • before_script에서는 before_script의 후속 라인 및 관련 script의 모든 라인에서 작동합니다.
    • script에서는 script의 후속 라인에서 작동합니다.
    • after_script에서는 after_script의 후속 라인에서 작동합니다.

after_script 스크립트의 경우:

  • 동일 after_script 섹션 내에서 스크립트 이전에 정의된 변수만 사용할 수 있습니다.
  • before_scriptscript에서 정의된 변수를 사용할 수 없습니다.

이러한 제한이 존재하는 이유는 after_script 스크립트가 별도의 셸 컨텍스트에서 실행되기 때문입니다.

지속 변수

일부 사전 정의된 변수는 “지속” 변수라고 합니다. 지속 변수는 다음과 같습니다.

파이프라인 트리거 작업에서는 작업 수준의 지속 변수를 사용할 수 없지만, 파이프라인 수준의 지속 변수를 사용할 수 있습니다.

일부 지속 변수에는 토큰이 포함되어 있어서 보안상의 이유로 일부 정의에서 사용할 수 없습니다.

파이프라인 수준의 지속 변수:

  • CI_PIPELINE_ID
  • CI_PIPELINE_URL

작업 수준의 지속 변수:

  • CI_DEPLOY_PASSWORD
  • CI_DEPLOY_USER
  • CI_JOB_ID
  • CI_JOB_STARTED_AT
  • CI_JOB_TOKEN
  • CI_JOB_URL
  • CI_REGISTRY_PASSWORD
  • CI_REGISTRY_USER
  • CI_REPOSITORY_URL

환경 범위의 변수

환경 범위로 정의된 변수는 지원됩니다. 즉, 예를 들어, review/staging/* 범위에서 정의된 $STAGING_SECRET 변수가 있는 경우, 동적 환경을 사용하는 다음 작업이 해당하는 변수 표현식을 기반으로 생성됩니다:

my-job:
  stage: staging
  environment:
    name: review/$CI_JOB_STAGE/deploy
  script:
    - 'deploy staging'
  rules:
    - if: $STAGING_SECRET == 'something'