Jenkins中Pipeline A调用Pipeline B传文件参数及处理的语法咨询
Jenkins跨流水线传递文件并双向同步的实现方案
实现该需求的标准方案是结合Jenkins内置的构建参数传递+Copy Artifact插件完成跨流水线的文件共享,以下是完整可直接运行的流水线代码:
前置依赖
- 提前在Jenkins插件管理中安装 Copy Artifact Plugin
- 两个流水线互相开放「Job读取权限」和「复制产物权限」,可在任务配置的权限管理页调整
Pipeline A 代码(调用方)
负责生成/准备File A,调用Pipeline B并传递参数,最终拉取B处理后的File A:
pipeline { agent any stages { stage('准备File A') { steps { // 模拟生成初始File A,实际场景可替换为你的文件生成逻辑 writeFile file: 'fileA.txt', text: 'Pipeline A生成的初始文件内容\n' // 归档文件,供Pipeline B拉取 archiveArtifacts artifacts: 'fileA.txt', fingerprint: true } } stage('调用Pipeline B') { steps { build job: 'Pipeline-B', parameters: [ // 传递当前任务信息,供B拉取文件 string(name: 'UPSTREAM_JOB_NAME', value: env.JOB_NAME), string(name: 'UPSTREAM_BUILD_NUM', value: env.BUILD_NUMBER), // 自定义字符串参数,可按需修改值 string(name: 'INPUT_STR', value: '这是Pipeline A传的自定义字符串') ], wait: true, propagate: true } } stage('读取B处理后的File A') { steps { // 拉取Pipeline B处理完成的File A copyArtifacts projectName: 'Pipeline-B', selector: lastSuccessful(), filter: 'fileA.txt', target: './' // 验证内容,按需替换为你自己的业务逻辑 sh 'echo "B处理后File A的最终内容:" && cat fileA.txt' } } } }
Pipeline B 代码(被调用方)
负责接收参数和File A,处理完成后回传更新后的File A:
pipeline { agent any // 定义接收的入参 parameters { string(name: 'UPSTREAM_JOB_NAME', description: '上游Pipeline A的任务名称') string(name: 'UPSTREAM_BUILD_NUM', description: '上游Pipeline A的构建号') string(name: 'INPUT_STR', description: 'Pipeline A传递的自定义字符串') } stages { stage('拉取Pipeline A的File A') { steps { copyArtifacts projectName: params.UPSTREAM_JOB_NAME, selector: build(params.UPSTREAM_BUILD_NUM), filter: 'fileA.txt', target: './' } } stage('打印参数与原始文件内容') { steps { echo "收到的自定义字符串参数:${params.INPUT_STR}" echo "File A原始内容如下:" sh 'cat fileA.txt' } } stage('追加内容到File A') { steps { // 追加自定义内容,可按需修改行数和内容 sh ''' echo "Pipeline B追加的第一行内容" >> fileA.txt echo "Pipeline B追加的第二行内容" >> fileA.txt ''' // 归档处理后的文件,供Pipeline A拉取 archiveArtifacts artifacts: 'fileA.txt', fingerprint: true } } } }
注意事项
- 如果你的文件体积大于100M,建议在归档时配置压缩参数,或者用对象存储共享文件的方式替代Copy Artifact,提升传输效率
- 可以按需调整构建历史保留规则,避免归档的文件占用过多磁盘空间
- 若Pipeline B执行失败,Pipeline A会同步报错终止,可修改
propagate: false关闭该联动逻辑
内容的提问来源于stack exchange,提问作者Bhuvika K
相关产品推荐
相关产品推荐

