CI/CD Pass env to other job

https://docs.gitlab.com/ee/ci/variables/index.html#pass-an-environment-variable-to-another-job

특별히 값을 만들어서 다른 작업으로 넘겨줘야할 때가 있다.

다음처럼 하면된다.

build:
  stage: build
  script:
    - echo "BUILD_VARIABLE=value_from_build_job" >> build.env
  artifacts:
    reports:
      dotenv: build.env

deploy:
  stage: deploy
  variables:
    BUILD_VARIABLE: value_from_deploy_job
  script:
    - echo "$BUILD_VARIABLE" # Output is: 'value_from_build_job' due to precedence

echo "BUILD_VARIABLE=value_from_build_job" 이런식으로 KEY=value를 만들어서 echo로 출력후 env파일로 저장한다. 그리고 artifacts:reports:dotenv 에 추가한다.

이제 다른 작업에서 $KEY 로 호출하면 자동으로 읽어온다.

동작 방식은 깃랩 러너가 env파일을 읽어서 로딩을 미리 해두고 우리는 $KEY로 사용만 하면된다.

혹시 값이 안넘어오면 아래 코드를 참고해보자. dependency나 need를 사용하면된다.

build:
  stage: build
  script:
    - echo "BUILD_VERSION=hello" >> build.env
  artifacts:
    reports:
      dotenv: build.env

deploy_one:
  stage: deploy
  script:
    - echo "$BUILD_VERSION" # Output is: 'hello'
  dependencies:
    - build

deploy_two:
  stage: deploy
  script:
    - echo "$BUILD_VERSION" # Output is empty
  dependencies: []

deploy_three:
  stage: deploy
  script:
    - echo "$BUILD_VERSION" # Output is: 'hello'
  needs:
    - build

deploy_four:
  stage: deploy
  script:
    - echo "$BUILD_VERSION" # Output is: 'hello'
  needs:
    job: build
    artifacts: true

deploy_five:
  stage: deploy
  script:
    - echo "$BUILD_VERSION" # Output is empty
  needs:
    job: build
    artifacts: false

deploy_two는 empty인것을 알수 있다. 이건 dependency를 사용하지 않았기 때문이다.

Last updated

Was this helpful?