Jenkins触发下游Job时能否在parameters中传入stashed file参数
Jenkins触发下游Job时传递stashed file参数的说明
build步骤的parameters[]配置项不支持直接传入stashed file类型的参数。
stashed file是Jenkins Pipeline执行stash命令后生成的临时文件归档,存储在Jenkins控制器或对应agent的临时工作空间缓存中,不属于parameters支持的基础参数类型(仅支持字符串、布尔值、文本、密码等可序列化的基础类型),直接配置会被忽略或抛出参数类型不匹配的异常。
可行的替代实现方案
- 同agent运行场景:上下游Job配置为在同一个agent节点上执行,上游Job完成
stash操作后,仅需要将stash名称作为字符串参数传递给下游,下游直接通过对应名称执行unstash即可读取文件,无需传递文件本身。 - 跨agent运行场景:将需要传递的文件上传到Jenkins内置制品库、共享存储或对象存储中,把文件的访问路径、拉取命令作为字符串参数传递给下游Job,下游执行对应拉取逻辑获取文件即可。
- 高频使用场景:可以通过Jenkins共享库封装通用的跨Job stash传递方法,本质是将stash的归档文件上传到固定共享存储,传递时仅传存储标识,下游自动完成拉取、解包操作。
代码示例
错误写法(不生效)
// 上游Job错误示例,stashed file无法直接作为参数传递 build job: 'your-downstream-job', parameters: [ string(name: 'ENV', value: 'prod'), // 以下配置不生效 stashedFile(name: 'APP_BINARY', value: stash(name: 'binary', includes: '*.jar')) ]
正确写法(同agent场景)
// 上游Job pipeline { agent { label 'common-worker' } stages { stage('打包并暂存产物') { steps { sh 'mvn clean package' stash name: 'app-binary', includes: 'target/*.jar' // 仅传递stash名称作为参数 build job: 'your-downstream-job', parameters: [ string(name: 'STASH_ID', value: 'app-binary') ] } } } }
// 下游Job pipeline { agent { label 'common-worker' } // 和上游使用同一个节点标签,保证工作空间缓存可复用 parameters { string(name: 'STASH_ID', description: '上游传递的暂存产物ID') } stages { stage('读取上游产物') { steps { unstash params.STASH_ID sh 'java -jar target/*.jar' } } } }
内容的提问来源于stack exchange,提问作者Viktor Baert
相关产品推荐
相关产品推荐

