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

如何在Job DSL中将Jenkins参数作为参数传递给从文件读取的shell脚本

问题原因

你原有写法语法不合法:readFileFromWorkspace的返回值是build.sh的文本内容,直接和${CHOICE_PARAMETER_VALUE}拼接不符合Groovy语法规则,且即使拼接成功,变量也不会作为参数传递给脚本,只会被识别为普通的shell命令片段执行,必然报错。

解决方案

根据你的使用场景选择对应写法即可:

场景1:脚本已存在于Jenkins执行节点的文件系统中(和GUI配置场景一致)

直接对应GUI的写法转写为Job DSL语法即可,注意用单引号包裹命令,避免Groovy提前解析Jenkins变量:

steps {
    shell('/path/to/script ${CHOICE_PARAMETER_VALUE}')
}

这里的${CHOICE_PARAMETER_VALUE}会在作业实际运行时由Jenkins替换为用户选择的参数值,和GUI配置效果完全一致。

场景2:需要读取Job DSL工作区的脚本文件内联执行(必须使用readFileFromWorkspace的场景)

如果你的build.sh是存放在Job DSL执行时的工作区,需要读取内容作为内联脚本执行,可以用bash -s配合here-doc的方式将Jenkins变量作为位置参数传入脚本:

steps {
    shell('bash -s ${CHOICE_PARAMETER_VALUE} <<\'EOF\'\n' + readFileFromWorkspace('build.sh') + '\nEOF')
}

逻辑说明:

  • bash -s表示从标准输入读取脚本内容,后续追加的内容会作为位置参数(对应脚本内的$1/$2...)传递给脚本
  • <<'EOF'格式的here-doc会原样包裹读取到的脚本内容,避免脚本内的特殊字符被意外转义
  • 单引号包裹的${CHOICE_PARAMETER_VALUE}不会被Groovy提前解析,会留到作业运行时由Jenkins替换为实际值

如果需要传递多个参数,按顺序在bash -s后追加变量即可:

shell('bash -s ${PARAM1} ${PARAM2} ${PARAM3} <<\'EOF\'\n' + readFileFromWorkspace('build.sh') + '\nEOF')

内容的提问来源于stack exchange,提问作者mel

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 12:06:03