如何在GitLab Pipeline后续作业中获取前序作业输出的fileId?
实现方法
要在publish-file作业中获取upload-file输出的fileId,可以通过GitLab CI的dotenv artifacts传递变量,具体操作如下:
1. 修改upload-file作业,提取并传递fileId
在upload-file的脚本里,先捕获上传命令的JSON输出,提取出fileId并写入dotenv格式的文件,再通过artifacts把这个文件传递给后续作业:
upload-file: stage: upload script: # 执行上传命令,将输出保存到文件 - <command> > upload_result.json # 用jq提取fileId(确保runner已安装jq,未安装的话需先安装,比如apt-get install jq) - FILE_ID=$(jq -r '.fileId' upload_result.json) # 将fileId写入dotenv文件 - echo "FILE_ID=$FILE_ID" > file_id.env artifacts: reports: # 让GitLab自动加载该文件中的变量到后续关联作业 dotenv: file_id.env when: manual
2. 修改publish-file作业,使用传递的fileId
修正needs的作业名称(原配置里的upload-theme是笔误,应改为upload-file),之后直接用$FILE_ID变量即可:
publish-file: stage: publish script: - command --fileId=$FILE_ID needs: [upload-file] when: manual
补充说明
- 如果runner没有预装
jq,可以在upload-file的脚本开头添加安装命令(以Debian/Ubuntu镜像为例):- apt-get update && apt-get install -y jq - 若不想用
jq,也可以用grep+sed组合提取fileId:- FILE_ID=$(grep -o '"fileId": "[^"]*"' upload_result.json | sed 's/"fileId": "//;s/"$//')
内容的提问来源于stack exchange,提问作者alex
相关产品推荐
相关产品推荐

