我想使用我们在Jenkins作业中定义的参数作为同一作业中shell命令的参数。我已经创建了一个参数化的构建,包含以下参数:
high.version: 234 low.version: 220
我想使用这些变量作为构建shell脚本的参数:
/bin/bash /hai/mycode/scripts/run_script.sh high.version
如何在同一作业中使用这些参数?
vx6bjr1n1#
Jenkins将使用参数名称创建环境变量。这里需要注意的是,Jenkins * 也 * 会对不表示有效变量名的参数这样做--这些变量名在bash中很难访问,在您的示例中就是这样,因为bash变量名不能包含.字符。最简单的解决方案是
bash
.
high_version
low_version
示例:
/bin/bash /hai/mycode/scripts/run_script.sh "$high_version"
env
frebpwbc2#
真正帮助我的是Hudson: How to pass parameters to shell script解决方案:变量是大写的,即使你用小写定义它们!
drkbr07n3#
使用以下语法将jenkins参数传递给shell脚本-例如YourScript.sh %JENKINS_PARAMETER%之后,您可以在脚本中像使用普通shell脚本命令行参数一样使用这些参数。例如myParam = $1;
zphenhs44#
你试过这个吗?
echo "function hello() { " > gg.sh echo "echo \$1">> gg.sh echo "}" >> gg.sh echo "hello \$1" >> gg.sh chmod 777 gg.sh ./gg.sh $hello_version
注意变量名,点不是很受支持,详细信息,可以参考. https://issues.jenkins-ci.org/browse/JENKINS-7180
2nc8po8w5#
在参数中使用dot(.)不是一个好的做法。您应该选择highVersion或high_version作为参数名。根据您的问题,您似乎正在处理Freestyle作业,但许多开发人员也会对Pipeline语法感兴趣,因此我将提供一个在Jenkins pipeline DSL中使用params的解决方案。1.作为壳参数
dot(.)
highVersion
Freestyle
Pipeline
Jenkins pipeline DSL
stage('Test'){ sh "/bin/bash /hai/mycode/scripts/run_script.sh $highVersion" }
1.作为Groovy参数
stage('Test'){ sh "/bin/bash /hai/mycode/scripts/run_script.sh ${params.highVersion}" }
我建议使用第二种方法,因为我们将groovy用作管道DSL。
5条答案
按热度按时间vx6bjr1n1#
Jenkins将使用参数名称创建环境变量。
这里需要注意的是,Jenkins * 也 * 会对不表示有效变量名的参数这样做--这些变量名在
bash
中很难访问,在您的示例中就是这样,因为bash
变量名不能包含.
字符。最简单的解决方案是
high_version
和low_version
(这是有效的bash
变量名)示例:
bash
变量名(例如,出于可用性原因:Jenkins在Web表单中向最终用户显示变量名称,以便开始构建):您仍然可以通过在env
命令**的输出中greping参数名称来访问此类参数。frebpwbc2#
真正帮助我的是Hudson: How to pass parameters to shell script
解决方案:变量是大写的,即使你用小写定义它们!
drkbr07n3#
使用以下语法将jenkins参数传递给shell脚本-
例如YourScript.sh %JENKINS_PARAMETER%之后,您可以在脚本中像使用普通shell脚本命令行参数一样使用这些参数。例如myParam = $1;
zphenhs44#
你试过这个吗?
注意变量名,点不是很受支持,详细信息,可以参考. https://issues.jenkins-ci.org/browse/JENKINS-7180
2nc8po8w5#
在参数中使用
dot(.)
不是一个好的做法。您应该选择highVersion
或high_version
作为参数名。根据您的问题,您似乎正在处理
Freestyle
作业,但许多开发人员也会对Pipeline
语法感兴趣,因此我将提供一个在Jenkins pipeline DSL
中使用params的解决方案。1.作为壳参数
1.作为Groovy参数
我建议使用第二种方法,因为我们将groovy用作管道DSL。