GitLab CI如何动态修改变量并传递给触发/桥接作业
GitLab CI 传递JSON提取变量到下游触发流水线解决方案
核心思路
拆分路径提取和下游触发为两个独立作业,通过dotenv制品传递变量,既避开trigger作业不允许配置script的限制,也保留原生trigger的UI展示和状态依赖能力。
配置步骤
1. 调整流水线阶段定义
新增两个阶段分别处理路径提取和下游触发:
stages: - extract_path - trigger_downstream variables: FILE_NAME: default_file.json
2. 实现路径提取作业
该作业专门执行JSON解析逻辑,将提取到的路径写入dotenv制品供后续作业读取:
extract_file_path: stage: extract_path needs: [] only: - schedules - triggers - web script: - apt-get update && apt-get install -y jq # 提取路径并去除jq输出的引号,写入dotenv文件 - TARGET_FILE_PATH=$(jq -r '.file_path' $FILE_NAME) - echo "TARGET_FILE_PATH=$TARGET_FILE_PATH" >> build.env artifacts: reports: # 声明dotenv制品,后续作业会自动加载文件内的变量 dotenv: build.env expire_in: 1h
3. 实现下游触发作业
依赖路径提取作业的dotenv制品,直接使用提取到的变量触发下游流水线:
run_downstream_pipeline: stage: trigger_downstream only: - schedules - triggers - web needs: - job: extract_file_path artifacts: true variables: # 自定义变量名传递到下游,不要使用PATH作为变量名(会覆盖系统内置环境变量) DOWNSTREAM_FILE_PATH: $TARGET_FILE_PATH trigger: project: my/project branch: staging forward: # 开启变量透传到下游流水线 pipeline_variables: true # 上游流水线状态依赖下游执行结果 strategy: depend
效果说明
- 下游流水线会正常展示在上游流水线的UI界面中,和原生trigger效果完全一致
- 上游流水线最终状态会同步下游的执行成功/失败结果
- 下游流水线可以直接读取
$DOWNSTREAM_FILE_PATH变量拿到传递的文件路径
注意:禁止使用
PATH作为自定义变量名,该名称为系统内置环境变量,覆盖后会导致流水线所有命令无法找到执行路径。
内容的提问来源于stack exchange,提问作者thebaconator
相关产品推荐
相关产品推荐

