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

26

我想要将我们在Jenkins任务中定义的参数作为同一任务中shell命令的参数来使用。

我已经创建了一个带有以下参数的参数化构建:

high.version: 234
low.version: 220

我希望将这些变量用作构建脚本的参数:

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

我该如何在同一个作业中设置这些参数?

5个回答

20

Jenkins会使用参数名称创建环境变量。

这里需要注意的是Jenkins也会为不代表有效变量名称的参数创建环境变量,这些很难在bash中访问。这就是你的例子所在的情况,因为bash变量名不能包含“.”字符。

最简单的解决方案是:

  • 重命名您的参数,例如将其重命名为“high_version”和“low_version”(这些是有效的bash变量名称)
  • 然后在调用脚本时使用相应的变量名

例如:

/bin/bash /hai/mycode/scripts/run_script.sh "$high_version"

如果您无法重命名参数以表示有效的bash变量名称(例如,出于可用性原因:Jenkins在Web表单中向最终用户呈现变量名称):您仍然可以通过env命令输出中搜索参数名称来访问此类参数。


17

2
看起来他们已经改变了,现在变量是区分大小写的。 - Florian Straub
1
是的,在2.210版本(至少,这是我正在运行的版本)中,参数被转化为变量而不进行修改。也就是说,我创建了一个名为"choice"的参数,并且能够使用echo $choice查看我的参数值。 - mooreds

1
使用以下语法将Jenkins参数传递给Shell脚本 - 例如。 YourScript.sh %JENKINS_PARAMETER% 然后在您的脚本中,您可以像正常的Shell脚本命令行参数一样使用该参数。例如。 myParam = $1;

0

你试过这个吗?

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


0

在参数中使用 点(.) 不是一个好的做法。你应该选择 highVersion 或者 high_version 作为你的参数名称。

根据你的问题,看起来你正在使用 Freestyle 任务,但是许多开发人员也会对 Pipeline 语法感兴趣,因此我提供了一种在 Jenkins pipeline DSL 中使用参数的解决方案。 在 Jenkins Pipeline shell 脚本中,有两种方式可以使用 Jenkins 参数:

  1. 作为 Shell 参数
stage('Test'){
  sh "/bin/bash /hai/mycode/scripts/run_script.sh $highVersion"
}

作为Groovy参数。
stage('Test'){
  sh "/bin/bash /hai/mycode/scripts/run_script.sh ${params.highVersion}"
}

我建议使用第二种方法,因为我们正在使用Groovy作为管道DSL。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接