IMO,这个用例确实需要在插件的网页/文档中明确说明。
假设我有一个名为U的项目用于上游,D项目用于下游。当U完成构建时,我希望D签出U刚建立的相同版本。你总是要结账HEAD。
这就是我所做的:
现在我不知道我接下来应该做什么,但我没有得到反馈来表明这是有效的。事实上,even this testcase that's committed to the plugin source表明这是我应该做的。
但是,如果我猜测,我认为我应该将U标记为参数化构建并为其添加参数。这个参数应该被命名为U发送给D的东西。但是,如果我有正确的想法,我不知道我应该命名这个参数。 D的控制台日志和U的控制台日志都没有提及任何新参数。
我猜了并在U中创建了一个名为“SVN_REVISION”的String参数,并将其默认为-1,但这没有任何效果。每次D触发构建时,SVN_REVISION默认为-1。
这是在D项目上运行export
的输出:
+ 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环境变量。但我认为这不一定来自插件。我的证据来自jenkins中“存储库URL”的描述:
在构建期间,检出的模块的版本号 可通过提供的环境变量SVN_REVISION获得 你只是检查一个模块。如果你有多个 检出模块,使用svnversion命令。如果你有多个 模块签出后,可以使用svnversion命令获取 修订信息,或者您可以使用SVN_REVISION_环境 变量,其中是与位置匹配的从1开始的索引 配置。这些URL可通过类似的SVN_URL_获得 环境变量。
但是我们假设这是从U而不是D设置的。我如何让D使用它或者当D被触发时我怎么知道它正在使用它?
让我问一个问题,我接下来可能会问。一旦我知道了我需要使用的参数的名称,如何修改D的配置以便检查该修订版?我是否修改了“存储库URL”以将@${PARAMETER_NAME}
放在最后?或者什么?
答案 0 :(得分:5)
我不知道为什么“Subversion revision”参数不起作用(请参阅下面的疑难解答提示),但尝试在“添加参数”下拉列表中的“在其他项目上触发参数化构建”下手动添加参数。最简单的可能是添加“当前构建参数”。
您也可以使用“预定义参数”指定所需的参数,可能是这样的:
SVN_REVISION=${SVN_REVISION}
将D标记为参数化不一定是必要的,这意味着您可以使用默认值指定参数,并使Jenkins在手动触发构建时询问参数。但是,无论作业如何配置,任何调度新构建的内容(如参数化触发器插件都可以)总是可以向该构建添加任何参数。
故障排除提示:在触发的构建中添加构建步骤以转储环境变量(也应具有所有构建参数)。最简单的方法是使用命令添加“执行shell”/“执行Windows批处理命令”以转储环境(export
使用unix shell,set
使用Windows)。
然后从构建控制台输出,查看参数是否应该是(存在且具有正确的值)。
答案 1 :(得分:3)
原来,like the test case says,这就是我必须做的。我通过承诺给U测试了这个,然后在它建造的时候再次投入。一旦D开始构建,它抓住了第一个提交,而不是最新提交。这就是我测试它的方式。
更好的反馈会受到赞赏,但至少我知道它有效。