Jenkins Gradle插件 - 使用-P而不是-D传递参数

11

好的

我有一个Jenkins任务(Jenkins版本较新)。

在我的Jenkins任务中,我有一些参数(字符串类型)。

例如:param1=value1 ... 到 paramN=valueN

现在,在Jenkins作业下的BUILD部分中,我正在调用"Invoke Gradle"。

在这个Gradle部分中,我正在调用一个任务。例如:clean build

我需要的是:我想以-PparamN=ValueN的方式将上述Jenkins作业的参数传递给Gradle?

但是,当我在Gradle Build部分的"Switches"选项中传递-Pparam1=${param1} -Pparam2=${param2} ...等等时,我看到Jenkins日志显示:

它成功地调用了Gradle exectuable并带有这些参数。

...somepath.../bin/gradle -Dparam1=value1 -Dparam2=value2 ... -DparamN=valueN -Pparam1=value1 -Pparam2=value2 ... -PparamN=valueN

这意味着Jenkins很好地将我在作业中定义的参数免费传递给Gradle,方式为“-D”。

我的问题是:

  1. 我不想将上述参数作为"-Dxxx=yyy"传递。
  2. 我只想以"-Pxxx=yyy"的方式传递参数。
  3. 使用“Invoke Gradle”插件可以实现吗?

Jenkins Gradle插件会将任何构建参数添加为系统属性。通过将它们添加到“switches”配置中,您还将它们添加为项目属性。我认为重复声明并不会有什么问题,并且我也看不到禁用该特定插件行为的方法。 - Mark Vieira
同意,但一个是通过定义Java属性(-D)的方式,另一个是我手动在“开关”框中指定的方式(-P),它们都是Gradle的系统属性。 - AKS
3个回答

6
我猜在这个时候,无法告诉Jenkins中的Gradle插件不要将参数(在Jenkins作业中定义)作为-Dxxx=$yyy的方式传递(它会免费为我们执行此操作)。
我们可以使用“开关”框/选项来指定这些参数作为-P方式,但是不太清楚-D参数将如何影响Gradle用于运行自身的JVM,并且-D参数是否会与-P参数发生冲突(因为它们被传递/定义了两次)。
作为解决方法,我停止使用Gradle插件,并在BUILD部分下使用“Execute Shell”选项,并使用相应的参数(-P方式)和任务调用gradle可执行文件。
这只是一种以参数和任务的方式调用Gradle的简单方法,就像您在CMD或$提示符下运行的方式。

5

随着Jenkins Gradle插件1.27的推出,现在有一个复选框可以告诉插件不要将参数作为系统属性传递并手动添加一些参数。您还可以选择将所有参数作为Gradle属性传递,这可能是您想要的。

enter image description here


即使我将其作为Gradle项目属性传递,它仍然使用-D参数进行传递,而不是-P。另外,如果我想传递多个参数(而不是作为项目属性),该怎么办? - Ven
请确保您正在使用至少1.27版本的Gradle Jenkins插件。我在上面添加了一张截图。请注意,项目和系统属性的配置现在在“高级”下面。有两个字段(“项目属性”和“系统属性”),允许您传递多个属性。 - wolfs42

3

首先让Jenkins使用-D参数,然后可以用-P参数将其传递给Gradle。例如,如果您有一个名为env的参数,则可以将其放在任务中:

 -Penv=${env}

1
在Jenkins中,Gradle插件是否有参数配置? - lephix

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