Jenkins 远程参数化构建始终使用默认参数值而不是传递的参数值

Posted

技术标签:

【中文标题】Jenkins 远程参数化构建始终使用默认参数值而不是传递的参数值【英文标题】:Jenkins Remote Parametrized build always uses default parameter values instead of those that are passed 【发布时间】:2014-10-21 09:21:34 【问题描述】:

我有一个只有一个布尔参数的 Jenkins 作业。此参数的默认值为 false。我通过 POST 到构建 URL 并传递我的令牌和参数,从 ANT 构建脚本(另一个作业)远程构建它。

curl -X POST 'MY_JENKINS_SERVER/job/JOB_NAME/buildWithParameters?token=12345;REPORTS=true' --user MY_USERNAME:MY_PASS

请注意,我的 URL 用单引号括起来(应该处理编码问题),并且布尔参数的名称是 REPORTS(在 Jenkins 和 ANT 中大写)。另外,我想指出,如果我使用与号 (&) 分隔令牌和我的其他参数,我会在构建时收到以下错误:对实体“报告”的引用必须以 ';' 结尾分隔符。

无论 URL 字符串中 REPORTS 参数的值是什么,该参数在构建时始终为默认值 false。我在 Jenkins 中将默认值更改为 true,无论传递的参数值如何,它始终为 true。基本上,它总是使用默认值并忽略传递的参数值。我也尝试过不传递任何 REPORTS 参数,当然它采用默认值。

在我的作业构建文件(我远程触发的那个)中,我将参数打印为 $env.REPORTS

我查看了关于 SO 的类似问题,但他们的解决方案都不适合我。我尝试在 URL 中移动参数,但似乎没有任何效果。有什么想法吗?

【问题讨论】:

The reference to entity "foo" must end with the ';' delimiter的可能重复 【参考方案1】:

基于这一行:

对实体“REPORTS”的引用必须以“;”结尾分隔符

试试&,而不是&

这不是 Jenkins 的问题,而是一个 XML 文件的 Ant。由于& 是XML 的特殊字符,因此为了在任何地方都具有& 的纯值,您需要将其写为&

【讨论】:

谢谢。我不敢相信它是如此简单。但是为什么需要用 & 编码呢?除非我弄错了,参数化构建文档link 似乎暗示引用 URL 不需要转义它。 我不知道你的情况。对我来说,直接使用 ?token=12345&REPORTS=true 可以毫无问题地使用单引号和双引号。但是我只是在其他地方遇到了exact相同的错误消息。对我来说,它包括 & 作为 XML 文件中的文本(从 ANT 执行命令行),解决方案是 & 等一下...我重新阅读了您的问题。您正在从 ANT 脚本启动 curl,所以您的问题与我的完全一样。这是一个 XML 的东西,与 Jenkins 无关。

以上是关于Jenkins 远程参数化构建始终使用默认参数值而不是传递的参数值的主要内容,如果未能解决你的问题,请参考以下文章

Jenkins 参数化构建

尝试使用 wget 触发远程 Jenkins 作业时出现 405 错误

linux12Devops -->04Jenkins参数化构建

Jenkins参数化构建

八. jenkins参数化构建 git分支

无法在jenkins中使用变量参数调用远程参数化作业。