我想要将我们在Jenkins任务中定义的参数作为同一任务中shell命令的参数来使用。
我已经创建了一个带有以下参数的参数化构建:
high.version: 234
low.version: 220
我希望将这些变量用作构建脚本的参数:
/bin/bash /hai/mycode/scripts/run_script.sh high.version
我该如何在同一个作业中设置这些参数?
我想要将我们在Jenkins任务中定义的参数作为同一任务中shell命令的参数来使用。
我已经创建了一个带有以下参数的参数化构建:
high.version: 234
low.version: 220
我希望将这些变量用作构建脚本的参数:
/bin/bash /hai/mycode/scripts/run_script.sh high.version
我该如何在同一个作业中设置这些参数?
Jenkins会使用参数名称创建环境变量。
这里需要注意的是Jenkins也会为不代表有效变量名称的参数创建环境变量,这些很难在bash中访问。这就是你的例子所在的情况,因为bash变量名不能包含“.”字符。
最简单的解决方案是:
例如:
/bin/bash /hai/mycode/scripts/run_script.sh "$high_version"
如果您无法重命名参数以表示有效的bash
变量名称(例如,出于可用性原因:Jenkins在Web表单中向最终用户呈现变量名称):您仍然可以通过在env
命令输出中搜索参数名称来访问此类参数。
你试过这个吗?
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
在参数中使用 点(.)
不是一个好的做法。你应该选择 highVersion
或者 high_version
作为你的参数名称。
根据你的问题,看起来你正在使用 Freestyle
任务,但是许多开发人员也会对 Pipeline
语法感兴趣,因此我提供了一种在 Jenkins pipeline DSL
中使用参数的解决方案。
在 Jenkins Pipeline
shell 脚本中,有两种方式可以使用 Jenkins 参数:
stage('Test'){
sh "/bin/bash /hai/mycode/scripts/run_script.sh $highVersion"
}
stage('Test'){
sh "/bin/bash /hai/mycode/scripts/run_script.sh ${params.highVersion}"
}
echo $choice
查看我的参数值。 - mooreds