如何将GitLab一个Job生成的制品用于另一个Job的rule中?
GitLab CI 在Rule中使用制品内容的解决方案
背景信息
GitLab CI支持将标准输出保存为制品,传递给后续Job,示例配置如下:
stages: - stage1 - stage2 stage1: stage: stage1 ... script: ... ... - echo "$(yq ".[].metadata | select(.name == \"$ARGOCD_APP_NAME\")" $HELM_APP_ARGOCD)" > build.env artifacts: paths: - build.env stage2: stage: stage2 ... script: - cat build.env ... needs: - job: stage1 artifacts: true
问题
但我需要在rule中使用该制品的内容,请问有什么解决方案?
已验证的解决方法
1. 用dotenv制品传递环境变量
将需要判断的逻辑结果存入dotenv格式的文件,GitLab会自动将该文件中的键值对解析为后续Job的环境变量,示例配置:
job1: stage: stage1 tags: - ... only: - pipelines script: ... ... after_script: ... ... - export SKIP_JOB=$(yq ".[].metadata | select(.name == \"$ARGOCD_APP_NAME\")" $HELM_APP_ARGOCD) - |- if [[ $SKIP_JOB != '' ]]; then echo "SKIP_JOB=True" >dotenv.env else echo "SKIP_JOB=False" >dotenv.env fi artifacts: reports: dotenv: dotenv.env
2. 通过环境变量判断并跳过Job执行
在依赖的Job中读取传递过来的环境变量,使用exit 0指令可以在不触发流水线失败的前提下跳过当前Job的执行,示例配置:
job2: stage: stage2 tags: - ... only: - pipelines script: - |- if [ "$SKIP_JOB" == "True" ]; then echo "This job is skipped based on the condition" exit 0 else echo "This job is running" fi ... ... needs: - job: job1
内容的提问来源于stack exchange,提问作者sfl0r3nz05
相关产品推荐
相关产品推荐

