You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.16 03:45:03