InfoGrab Docs

변수를 사용할 수 있는 위치

요약

CI/CD 변수 문서에서 설명한 것처럼 다양한 변수를 정의할 수 있습니다. 이 문서는 다양한 유형의 변수를 어디에서 어떻게 사용할 수 있는지 설명합니다. 정의된 변수를 사용할 수 있는 두 곳이 있습니다: config.toml에 대한 자세한 내용은 GitLab Runner 문서를 참조하세요.

CI/CD 변수 문서에서 설명한 것처럼 다양한 변수를 정의할 수 있습니다. 일부는 모든 GitLab CI/CD 기능에 사용할 수 있지만, 일부는 다소 제한되어 있습니다.

이 문서는 다양한 유형의 변수를 어디에서 어떻게 사용할 수 있는지 설명합니다.

변수 사용#

정의된 변수를 사용할 수 있는 두 곳이 있습니다:

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

.gitlab-ci.yml 파일#

히스토리
  • CI_ENVIRONMENT_SLUG를 제외한 CI_ENVIRONMENT_* 변수 지원이 GitLab 16.4에서 도입됨.
정의 확장 가능? 확장 위치 설명
after_script yes 스크립트 실행 셸 변수 확장은 실행 셸 환경에 의해 수행됩니다.
artifacts:name yes Runner 변수 확장은 GitLab Runner의 내부 변수 확장 메커니즘에 의해 수행됩니다.
artifacts:paths yes Runner 변수 확장은 GitLab Runner의 내부 변수 확장 메커니즘에 의해 수행됩니다.
artifacts:exclude yes Runner 변수 확장은 GitLab Runner의 내부 변수 확장 메커니즘에 의해 수행됩니다.
before_script yes 스크립트 실행 셸 변수 확장은 실행 셸 환경에 의해 수행됩니다.
cache:key yes Runner 변수 확장은 GitLab Runner의 내부 변수 확장 메커니즘에 의해 수행됩니다.
cache:paths yes Runner 변수 확장은 GitLab Runner의 내부 변수 확장 메커니즘에 의해 수행됩니다.
cache:policy yes Runner 변수 확장은 GitLab Runner의 내부 변수 확장 메커니즘에 의해 수행됩니다.
environment:name yes GitLab environment:url과 유사하지만 변수 확장은 다음을 지원하지 않습니다:

- CI_ENVIRONMENT_* 변수.
- 지속된 변수.
environment:url yes GitLab 변수 확장은 GitLab의 내부 변수 확장 메커니즘에 의해 수행됩니다.

잡에 대해 정의된 모든 변수가 지원됩니다(프로젝트/그룹 변수, .gitlab-ci.yml의 변수, 트리거의 변수, 파이프라인 예약의 변수).

GitLab Runner config.toml에 정의된 변수와 잡의 script에서 생성된 변수는 지원되지 않습니다.
environment:deployment_tier yes GitLab environment:url과 유사하지만 변수 확장은 다음을 지원하지 않습니다:

- CI_ENVIRONMENT_* 변수.
- 지속된 변수.
environment:auto_stop_in yes GitLab 변수 확장은 GitLab의 내부 변수 확장 메커니즘에 의해 수행됩니다.

대체되는 변수의 값은 사람이 읽을 수 있는 자연어 형식의 기간이어야 합니다. 자세한 내용은 지원되는 값을 참조하세요.
environment:kubernetes:agent yes GitLab environment:url과 유사하지만 변수 확장은 다음을 지원하지 않습니다:

- CI_ENVIRONMENT_* 변수.
- 지속된 변수.
environment:kubernetes:namespace yes GitLab environment:url과 유사하지만 변수 확장은 다음을 지원하지 않습니다:

- CI_ENVIRONMENT_* 변수.
- 지속된 변수.
id_tokens:aud yes GitLab 변수 확장은 GitLab의 내부 변수 확장 메커니즘에 의해 수행됩니다. 변수 확장은 GitLab 16.1에서 도입됨.
image yes Runner 변수 확장은 GitLab Runner의 내부 변수 확장 메커니즘에 의해 수행됩니다.
include yes GitLab 변수 확장은 GitLab의 내부 변수 확장 메커니즘에 의해 수행됩니다.

지원되는 변수에 대한 자세한 내용은 include로 변수 사용을 참조하세요.
resource_group yes GitLab environment:url과 유사하지만 변수 확장은 다음을 지원하지 않습니다:
- CI_ENVIRONMENT_URL
- 지속된 변수.
rules:changes no GitLab 변수 확장은 GitLab의 내부 변수 확장 메커니즘에 의해 수행됩니다.
rules:changes:compare_to no GitLab 변수 확장은 GitLab의 내부 변수 확장 메커니즘에 의해 수행됩니다.
rules:exists no GitLab 변수 확장은 GitLab의 내부 변수 확장 메커니즘에 의해 수행됩니다.
rules:if no 해당 없음 변수는 $variable 형식이어야 합니다. 다음은 지원되지 않습니다:

- CI_ENVIRONMENT_SLUG 변수.
- 지속된 변수.
script yes 스크립트 실행 셸 변수 확장은 실행 셸 환경에 의해 수행됩니다.
services:name yes Runner 변수 확장은 GitLab Runner의 내부 변수 확장 메커니즘에 의해 수행됩니다.
tags yes GitLab 변수 확장은 GitLab의 내부 변수 확장 메커니즘에 의해 수행됩니다.
triggertrigger:project yes GitLab 변수 확장은 GitLab의 내부 변수 확장 메커니즘에 의해 수행됩니다. trigger:project에 대한 변수 확장은 GitLab 15.3에서 도입됨.
variables yes GitLab/Runner 변수 확장은 먼저 GitLab의 내부 변수 확장 메커니즘에 의해 수행된 다음, 인식되지 않거나 사용할 수 없는 변수는 GitLab Runner의 내부 변수 확장 메커니즘에 의해 확장됩니다.
workflow:name yes GitLab 변수 확장은 GitLab의 내부 변수 확장 메커니즘에 의해 수행됩니다.

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

GitLab Runner config.toml에 정의된 변수, 잡에 정의된 변수, 또는 지속된 변수는 지원되지 않습니다.

config.toml 파일#

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

config.toml에 대한 자세한 내용은 GitLab Runner 문서를 참조하세요.

확장 메커니즘#

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

  • GitLab
  • GitLab Runner
  • 실행 셸 환경

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

확장될 부분은 $variable, ${variable} 또는 %variable% 형식이어야 합니다. 각 형식은 OS/셸에 상관없이 동일하게 처리됩니다. 확장이 러너가 잡을 받기 전에 GitLab에서 수행되기 때문입니다.

중첩 변수 확장#

GitLab은 잡 변수 값을 러너에게 보내기 전에 재귀적으로 확장합니다. 예를 들어 다음 시나리오에서:

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

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

사용할 수 없는 변수에 대한 참조는 그대로 유지됩니다. 이 경우 러너는 런타임에 변수 값을 확장하려고 시도합니다. 예를 들어 CI_BUILDS_DIR과 같은 변수는 런타임에만 러너에게 알려집니다.

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

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

러너는 변수 확장에 Go의 os.Expand() 메서드를 사용합니다. 즉 $variable${variable}로 정의된 변수만 처리합니다. 또한 중요한 점은 확장이 한 번만 수행된다는 것으로, 중첩 변수는 변수 정의 순서와 GitLab에서 중첩 변수 확장이 활성화되어 있는지 여부에 따라 작동할 수도 있고 작동하지 않을 수도 있습니다.

아티팩트 및 캐시 업로드의 경우 러너는 os.Expand()파라미터 확장을 지원하므로 Go의 os.Expand() 대신 변수 확장에 mvdan.cc/sh/v3/expand를 사용합니다.

실행 셸 환경#

이것은 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_PIPELINE_CREATED_AT
  • 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'

변수를 사용할 수 있는 위치

Tier: Free, Premium, Ultimate
Offering: GitLab.com, GitLab Self-Managed, GitLab Dedicated
원문 보기
요약

CI/CD 변수 문서에서 설명한 것처럼 다양한 변수를 정의할 수 있습니다. 이 문서는 다양한 유형의 변수를 어디에서 어떻게 사용할 수 있는지 설명합니다. 정의된 변수를 사용할 수 있는 두 곳이 있습니다: config.toml에 대한 자세한 내용은 GitLab Runner 문서를 참조하세요.

CI/CD 변수 문서에서 설명한 것처럼 다양한 변수를 정의할 수 있습니다. 일부는 모든 GitLab CI/CD 기능에 사용할 수 있지만, 일부는 다소 제한되어 있습니다.

이 문서는 다양한 유형의 변수를 어디에서 어떻게 사용할 수 있는지 설명합니다.

변수 사용#

정의된 변수를 사용할 수 있는 두 곳이 있습니다:

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

.gitlab-ci.yml 파일#

히스토리
  • CI_ENVIRONMENT_SLUG를 제외한 CI_ENVIRONMENT_* 변수 지원이 GitLab 16.4에서 도입됨.
정의 확장 가능? 확장 위치 설명
after_script yes 스크립트 실행 셸 변수 확장은 실행 셸 환경에 의해 수행됩니다.
artifacts:name yes Runner 변수 확장은 GitLab Runner의 내부 변수 확장 메커니즘에 의해 수행됩니다.
artifacts:paths yes Runner 변수 확장은 GitLab Runner의 내부 변수 확장 메커니즘에 의해 수행됩니다.
artifacts:exclude yes Runner 변수 확장은 GitLab Runner의 내부 변수 확장 메커니즘에 의해 수행됩니다.
before_script yes 스크립트 실행 셸 변수 확장은 실행 셸 환경에 의해 수행됩니다.
cache:key yes Runner 변수 확장은 GitLab Runner의 내부 변수 확장 메커니즘에 의해 수행됩니다.
cache:paths yes Runner 변수 확장은 GitLab Runner의 내부 변수 확장 메커니즘에 의해 수행됩니다.
cache:policy yes Runner 변수 확장은 GitLab Runner의 내부 변수 확장 메커니즘에 의해 수행됩니다.
environment:name yes GitLab environment:url과 유사하지만 변수 확장은 다음을 지원하지 않습니다:

- CI_ENVIRONMENT_* 변수.
- 지속된 변수.
environment:url yes GitLab 변수 확장은 GitLab의 내부 변수 확장 메커니즘에 의해 수행됩니다.

잡에 대해 정의된 모든 변수가 지원됩니다(프로젝트/그룹 변수, .gitlab-ci.yml의 변수, 트리거의 변수, 파이프라인 예약의 변수).

GitLab Runner config.toml에 정의된 변수와 잡의 script에서 생성된 변수는 지원되지 않습니다.
environment:deployment_tier yes GitLab environment:url과 유사하지만 변수 확장은 다음을 지원하지 않습니다:

- CI_ENVIRONMENT_* 변수.
- 지속된 변수.
environment:auto_stop_in yes GitLab 변수 확장은 GitLab의 내부 변수 확장 메커니즘에 의해 수행됩니다.

대체되는 변수의 값은 사람이 읽을 수 있는 자연어 형식의 기간이어야 합니다. 자세한 내용은 지원되는 값을 참조하세요.
environment:kubernetes:agent yes GitLab environment:url과 유사하지만 변수 확장은 다음을 지원하지 않습니다:

- CI_ENVIRONMENT_* 변수.
- 지속된 변수.
environment:kubernetes:namespace yes GitLab environment:url과 유사하지만 변수 확장은 다음을 지원하지 않습니다:

- CI_ENVIRONMENT_* 변수.
- 지속된 변수.
id_tokens:aud yes GitLab 변수 확장은 GitLab의 내부 변수 확장 메커니즘에 의해 수행됩니다. 변수 확장은 GitLab 16.1에서 도입됨.
image yes Runner 변수 확장은 GitLab Runner의 내부 변수 확장 메커니즘에 의해 수행됩니다.
include yes GitLab 변수 확장은 GitLab의 내부 변수 확장 메커니즘에 의해 수행됩니다.

지원되는 변수에 대한 자세한 내용은 include로 변수 사용을 참조하세요.
resource_group yes GitLab environment:url과 유사하지만 변수 확장은 다음을 지원하지 않습니다:
- CI_ENVIRONMENT_URL
- 지속된 변수.
rules:changes no GitLab 변수 확장은 GitLab의 내부 변수 확장 메커니즘에 의해 수행됩니다.
rules:changes:compare_to no GitLab 변수 확장은 GitLab의 내부 변수 확장 메커니즘에 의해 수행됩니다.
rules:exists no GitLab 변수 확장은 GitLab의 내부 변수 확장 메커니즘에 의해 수행됩니다.
rules:if no 해당 없음 변수는 $variable 형식이어야 합니다. 다음은 지원되지 않습니다:

- CI_ENVIRONMENT_SLUG 변수.
- 지속된 변수.
script yes 스크립트 실행 셸 변수 확장은 실행 셸 환경에 의해 수행됩니다.
services:name yes Runner 변수 확장은 GitLab Runner의 내부 변수 확장 메커니즘에 의해 수행됩니다.
tags yes GitLab 변수 확장은 GitLab의 내부 변수 확장 메커니즘에 의해 수행됩니다.
triggertrigger:project yes GitLab 변수 확장은 GitLab의 내부 변수 확장 메커니즘에 의해 수행됩니다. trigger:project에 대한 변수 확장은 GitLab 15.3에서 도입됨.
variables yes GitLab/Runner 변수 확장은 먼저 GitLab의 내부 변수 확장 메커니즘에 의해 수행된 다음, 인식되지 않거나 사용할 수 없는 변수는 GitLab Runner의 내부 변수 확장 메커니즘에 의해 확장됩니다.
workflow:name yes GitLab 변수 확장은 GitLab의 내부 변수 확장 메커니즘에 의해 수행됩니다.

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

GitLab Runner config.toml에 정의된 변수, 잡에 정의된 변수, 또는 지속된 변수는 지원되지 않습니다.

config.toml 파일#

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

config.toml에 대한 자세한 내용은 GitLab Runner 문서를 참조하세요.

확장 메커니즘#

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

  • GitLab
  • GitLab Runner
  • 실행 셸 환경

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

확장될 부분은 $variable, ${variable} 또는 %variable% 형식이어야 합니다. 각 형식은 OS/셸에 상관없이 동일하게 처리됩니다. 확장이 러너가 잡을 받기 전에 GitLab에서 수행되기 때문입니다.

중첩 변수 확장#

GitLab은 잡 변수 값을 러너에게 보내기 전에 재귀적으로 확장합니다. 예를 들어 다음 시나리오에서:

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

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

사용할 수 없는 변수에 대한 참조는 그대로 유지됩니다. 이 경우 러너는 런타임에 변수 값을 확장하려고 시도합니다. 예를 들어 CI_BUILDS_DIR과 같은 변수는 런타임에만 러너에게 알려집니다.

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

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

러너는 변수 확장에 Go의 os.Expand() 메서드를 사용합니다. 즉 $variable${variable}로 정의된 변수만 처리합니다. 또한 중요한 점은 확장이 한 번만 수행된다는 것으로, 중첩 변수는 변수 정의 순서와 GitLab에서 중첩 변수 확장이 활성화되어 있는지 여부에 따라 작동할 수도 있고 작동하지 않을 수도 있습니다.

아티팩트 및 캐시 업로드의 경우 러너는 os.Expand()파라미터 확장을 지원하므로 Go의 os.Expand() 대신 변수 확장에 mvdan.cc/sh/v3/expand를 사용합니다.

실행 셸 환경#

이것은 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_PIPELINE_CREATED_AT
  • 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'