Jenkins:我如何使用参数化触发器插件并传递颠覆修订版?

Dan*_*lan 19 jenkins jenkins-plugins

IMO,这个用例确实需要在插件的网页/文档中明确说明.

假设我有一个名为U的项目用于上游,D项目用于下游.当U完成构建时,我希望D签出与刚刚构建的相同的版本.你总是会结账HEAD.

这就是我所做的:

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

现在我不知道接下来应该做什么,但我没有得到反馈表明这是有效的.事实上,即使是这个致力于插件源的测试用例也表明这是我应该做的.

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

我猜了一下,在U中创建了一个名为"SVN_REVISION"的String参数,并将其默认为-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"
Run Code Online (Sandbox Code Playgroud)

所以看起来它有一个SVN_REVISION环境变量.但我认为这不一定来自插件.我的证据来自jenkins中"存储库URL"的描述:

在构建期间,如果您只签出一个模块,则可以通过环境变量SVN_REVISION获取已检出的模块的版本号.如果已签出多个模块,请使用svnversion命令.如果已签出多个模块,则可以使用svnversion命令获取修订信息,也可以使用SVN_REVISION_环境变量,其中基于1的索引与配置的位置匹配.URL可通过类似的SVN_URL_环境变量获得.

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


让我问一个我接下来可能需要问的问题.一旦我知道了我需要使用的参数的名称,如何修改D的配置以便检查该修订版?我是否修改了"存储库URL"以将其@${PARAMETER_NAME}放在最后?

hyd*_*yde 5

我不知道为什么"Subversion revision"参数不起作用(请参阅下面的故障排除提示),但尝试在"添加参数"下拉列表的"其他项目上的触发器参数化构建"下手动添加参数.最简单的可能是添加"当前构建参数".

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

SVN_REVISION=${SVN_REVISION}
Run Code Online (Sandbox Code Playgroud)

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


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

然后从构建控制台输出,查看参数是否应该是(存在且具有正确的值).


Dan*_*lan 3

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

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