如何在Jenkins Job Builder中将变量传入Pipeline脚本?
解决Jenkins Job Builder中Groovy脚本变量不替换的问题
问题出在你使用的!include-raw指令上——它只是原样导入文件内容,不会对文件里的{var1}这类变量做插值替换。要实现变量传递,需要调整两个地方:
1. 替换文件导入指令
把job-template里的!include-raw改成!include-raw-escape,这个指令会先对导入的Groovy文件内容执行JJB的变量替换,再作为Pipeline DSL内容使用。
2. 在job-template中声明变量
需要在job-template里明确声明要接收的变量,让JJB知道需要把这个变量传递给模板内容。
修改后的完整配置
my_definition.yml
- project: name: my-project jobs: - my-jobs - job-group: name: my-jobs jobs: - "{job-name}_job": job-name: '1' file-path: "./path/to/my_job.groovy" var1: "smth" - job-template: name: "{job-name}_job" project-type: pipeline concurrent: true var1: "" # 声明模板变量,可设默认空值 dsl: !include-raw-escape: "{file-path}" # 替换为支持变量替换的导入方式
my_job.groovy
不需要修改,保持原内容即可:
pipeline { agent any stages { stage('Example') { steps { echo '{var1}' } } } }
这样重新生成Jenkins任务后,Pipeline脚本里的echo '{var1}'就会被替换成echo 'smth'了。
补充说明:如果你的Groovy脚本里包含JJB模板语法(比如{% ... %}),可以改用!include指令,但!include-raw-escape更适合只需要替换{变量}的场景,避免Groovy语法和JJB模板语法冲突。
内容的提问来源于stack exchange,提问作者Tessey
相关产品推荐
相关产品推荐

