19

IMO,这个用例确实需要在插件的网页/文档上特别说明。

假设我有一个名为 U 代表上游和 D 代表下游的项目。当 U 完成构建时,我希望 D 签出 U 刚刚构建的相同版本。您将始终结帐 HEAD。

这是我所做的:

  1. 在 U 中,我为“在其他项目上触发参数化构建”添加了“构建后操作”。
  2. 对于“要构建的项目”,我输入了 D 并且仅在“稳定”时构建。
  3. 我为“Subversion revision”添加了一个触发器。
  4. 我保存了这个配置

现在我不知道接下来我应该做什么,但我没有收到任何反馈表明这是有效的。事实上,即使这个提交给插件源的测试用例也表明这就是我应该做的。

但是,如果我猜的话,我想我应该将 U 标记为参数化构建并为其添加一个参数。这个参数应该命名为 U 发送给 D 的内容。但是,如果我有正确的想法,我不知道应该如何命名这个参数。D 的控制台日志和 U 的控制台日志都没有提到任何新参数。

我猜测并在 U 中创建了一个名为“SVN_REVISION”的字符串参数,并将其默认为 -1,但这没有任何效果。每次 D 触发构建时,SVN_REVISION 默认为 -1。


这是在exportD 项目上运行的输出:

+ export
export BUILD_ID="2013-03-20_09-48-32"
export BUILD_NUMBER="4522"
export BUILD_TAG="jenkins-D-4522"
export BUILD_URL="http://my.jenkins.server.com:8081/job/D/4522/"
export EXECUTOR_NUMBER="2"
export HUDSON_COOKIE="8ec52f7a-d60d-4640-83a9-dbed7351b32a"
export HUDSON_HOME="/opt/hudson"
export HUDSON_SERVER_COOKIE="633967fcd1d6f7b38a85042ada5c3949"
export HUDSON_URL="http://my.jenkins.server.com:8081/"
export JAVA_HOME="/opt/java"
export JENKINS_HOME="/opt/hudson"
export JENKINS_SERVER_COOKIE="633967fcd1d6f7b38a85042ada5c3949"
export JENKINS_URL="http://my.jenkins.server.com:8081/"
export JOB_NAME="D"
export JOB_URL="http://my.jenkins.server.com:8081/job/D/"
export LANG="en_US.UTF-8"
export LD_LIBRARY_PATH="/opt/jdk1.6.0_30/jre/lib/i386/server:/opt/jdk1.6.0_30/jre/lib/i386:/opt/jdk1.6.0_30/jre/../lib/i386"
export M2="/opt/maven/bin"
export M2_HOME="/opt/maven"
export MAVEN_OPTS="-Xms256m -Xmx512m"
export NHINC_PROPERTIES_DIR="/opt/nhinc/Properties"
export NLSPATH="/usr/dt/lib/nls/msg/%L/%N.cat"
export NODE_LABELS="master"
export NODE_NAME="master"
export OLDPWD
export PATH="/sbin:/usr/sbin:/bin:/usr/bin:/opt/java/bin:/opt/apache-ant-1.8.1/bin:/usr/local/bin:/opt/maven/bin"
export PWD="/opt/hudson/jobs/D/workspace"
export SHLVL="2"
export SVN_REVISION="24186"
export SVN_URL="https://a/url/trunk"
export TERM="xterm"
export WORKSPACE="/opt/hudson/jobs/D/workspace"
export XFILESEARCHPATH="/usr/dt/app-defaults/%L/Dt"
export _="/opt/java/bin/java"

所以看起来它有一个 SVN_REVISION 环境变量。但我认为这不一定来自插件。我的证据来自詹金斯对“存储库 URL”的描述:

在构建过程中,已签出的模块的修订号可通过环境变量 SVN_REVISION 获得,前提是您只签出一个模块。如果您检查了多个模块,请使用 svnversion 命令。如果您有多个模块签出,您可以使用 svnversion 命令获取修订信息,或者您可以使用 SVN_REVISION_ 环境变量,其中 1 是与配置的位置匹配的基于 1 的索引。这些 URL 可通过类似的 SVN_URL_ 环境变量获得。

但是让我们假设这是从 U 而不是 D 设置的。我如何让 D 使用它,或者当 D 被触发时我怎么知道它正在使用它?


让我问一个我接下来可能需要问的问题。一旦我知道我需要使用的参数的名称,我该如何修改 D 的配置以便它检查该修订?我是否修改“存储库 URL”以将 a@${PARAMETER_NAME}放在末尾或其他什么地方?

4

2 回答 2

5

我不知道为什么“Subversion revision”参数不起作用(请参阅下面的故障排除提示),但尝试在“Trigger parameterized build on other projects”下使用“Add parameter”下拉菜单手动添加参数。最简单的可能是添加“当前构建参数”。

您也可以使用“预定义参数”指定所需的参数,可能像这样:

SVN_REVISION=${SVN_REVISION}

不需要将 D 标记为参数化,这仅意味着您可以使用默认值指定参数,并让 Jenkins 在手动触发构建时询问参数。但是任何安排新构建的东西(如参数化触发器插件)总是可以向该构建添加任何参数,无论作业如何配置。


故障排除提示:添加构建步骤以在触发的构建中转储环境变量(也应具有所有构建参数)。最简单的方法是添加“执行 shell”/“执行 Windows 批处理命令”以及转储环境的命令(export使用 unix shell,set使用 Windows)。

然后从构建控制台输出中,查看参数是否与它们应有的一样(存在并具有正确的值)。

于 2013-03-20T07:41:41.523 回答
3

事实证明,就像测试用例所说的那样,这就是我所要做的。我通过提交给 U 来测试它,然后在它构建时再次提交。一旦 D 开始构建,它会抓取第一个提交,而不是最新的。这就是我测试它是否有效的方式。

更好的反馈将不胜感激,但至少我知道它是有效的。

于 2013-05-15T18:08:13.757 回答