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

时间:2013-03-19 21:27:00

标签: jenkins jenkins-plugins

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

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

这就是我所做的:

  1. 在U中,我为“其他项目的触发参数化构建”添加了“后构建操作”。
  2. 对于“要构建的项目”,我输入D并仅在“稳定”时构建。
  3. 我添加了“Subversion修订版”的触发器。
  4. 我保存了此配置
  5. 现在我不知道我接下来应该做什么,但我没有得到反馈来表明这是有效的。事实上,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}放在最后?或者什么?

2 个答案:

答案 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开始构建,它抓住了第一个提交,而不是最新提交。这就是我测试它的方式。

更好的反馈会受到赞赏,但至少我知道它有效。