我正在尝试使用
kaniko
在我的 gitlab-ci-pipeline 中实现构建 docker-image 的阶段。在构建过程中,我需要当前的 git-hash,但 kaniko
-image 不包含 git。因此,我想在我的管道中有一个单独的阶段,用于将当前的 git-hash 保存在环境变量中并使用 dotenv-artifact 转发它:
prepare_docker_build_job:
stage: prepare_docker
extends:
- .rules:new_push_pipelines
<<: *before_script_template
needs: [test_job]
script:
- echo "CUR_GIT_VERSION=$(git describe --always --dirty)" >> git_variables.env
artifacts:
reports:
dotenv: git_variables.env
之后,我应该能够在构建作业中访问它:
docker_build_job:
stage: docker_build
needs:
- job: prepare_docker_build_job
optional: false
artifacts: true
extends:
- .rules:new_push_pipelines
image:
name: gcr.io/kaniko-project/executor:debug
entrypoint: [""]
script:
- echo "Current git version is $CUR_GIT_COMMIT"
- echo "Current project path is $CI_PROJECT_DIR"
- /kaniko/executor --context "$CI_PROJECT_DIR"
--cache=true
--dockerfile "${CI_PROJECT_DIR}/docker/docker_setup"
--destination "${CI_REGISTRY_LOCATION}:${CI_COMMIT_TAG}"
--build-arg CUR_GIT_COMMIT=$CUR_GIT_COMMIT
但是,在
docker_build
的设置部分,我可以看到现有文件 git_variables.env
被删除,随后 $CUR_GIT_COMMIT
未定义。我是否忘记了任何允许 docker_build
保留环境文件的内容?
正如@kofemann所提到的,只要在后续作业中引用
$CUR_GIT_VERSION
,这就会起作用。