如何在shell脚本中使用Jenkins参数

vd2z7a6w  于 2022-12-29  发布在  Jenkins
关注(0)|答案(5)|浏览(452)

我想使用我们在Jenkins作业中定义的参数作为同一作业中shell命令的参数。
我已经创建了一个参数化的构建,包含以下参数:

high.version: 234
low.version: 220

我想使用这些变量作为构建shell脚本的参数:

/bin/bash /hai/mycode/scripts/run_script.sh high.version

如何在同一作业中使用这些参数?

vx6bjr1n

vx6bjr1n1#

Jenkins将使用参数名称创建环境变量
这里需要注意的是,Jenkins * 也 * 会对不表示有效变量名的参数这样做--这些变量名在bash中很难访问,在您的示例中就是这样,因为bash变量名不能包含.字符。
最简单的解决方案是

      • 重命名参数**,例如,重命名为high_versionlow_version(这是有效的bash变量名)
  • 然后在调用脚本时使用相应的变量名

示例:

/bin/bash /hai/mycode/scripts/run_script.sh "$high_version"
    • 如果无法重命名参数以表示有效的bash变量名(例如,出于可用性原因:Jenkins在Web表单中向最终用户显示变量名称,以便开始构建):您仍然可以通过env命令**的输出中greping参数名称来访问此类参数。
frebpwbc

frebpwbc2#

真正帮助我的是Hudson: How to pass parameters to shell script
解决方案:变量是大写的,即使你用小写定义它们!

drkbr07n

drkbr07n3#

使用以下语法将jenkins参数传递给shell脚本-
例如YourScript.sh %JENKINS_PARAMETER%之后,您可以在脚本中像使用普通shell脚本命令行参数一样使用这些参数。例如myParam = $1;

zphenhs4

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

2nc8po8w

2nc8po8w5#

在参数中使用dot(.)不是一个好的做法。您应该选择highVersionhigh_version作为参数名。
根据您的问题,您似乎正在处理Freestyle作业,但许多开发人员也会对Pipeline语法感兴趣,因此我将提供一个在Jenkins pipeline DSL中使用params的解决方案。
1.作为壳参数

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。

相关问题