下游Jenkins项目上游运行参数错误

时间:2014-11-28 00:20:56

标签: jenkins continuous-integration

我遇到Jenkins构建管道问题。第一个作业之后的所有作业都使用第一个作业的“运行参数”进行参数化。默认情况下,这应该引用第一个作业的最新稳定版本。每个后续作业使用第一个作业的“运行参数”来访问第一个作业中保存的工件。每个后续作业作为参数化构建触发管道的下一个作业并传递上述“运行参数”。管道的第一个作业将第二个作业作为简单(即非参数化)构建触发。

以下是下游作业相关配置的屏幕截图: enter image description here

我的问题是“运行参数”中的作业编号不是管道第一个作业的作业编号。相反,它是之前管道的第一个作业的作业编号。因此,如果第一个作业在构建#11上,那么该管道的所有后续作业将访问第一个作业的构建#10的存档。

如何获取管道的后续作业以访问管道第一个作业的存档目录?

2 个答案:

答案 0 :(得分:1)

我发现了答案。显然,下游作业使用上一个管道的上游作业中的工件的原因是因为我已将下游作业配置中的“运行参数”过滤器设置为“仅稳定构建” 。将此过滤器设置为“All Builds”可以产生正确的行为。

当Jenkins在其构建后部分开始另一个构建时,它似乎并不认为上游作业是稳定的。

答案 1 :(得分:0)

引用:“默认情况下,这应该引用第一个作业的最新稳定版本。”

您的意思是Top作业的最后一次成功构建。因为在这种情况下,可能存在最高成功的最后成功构建为#7且当前构建为#11的情况。因此,您希望下游作业查找#7而不是#10。

如果是这种情况,那么我建议进行一个常规的构建步骤。为此安装groovy插件。但在那之前测试剧本。

打开:YourJenkinsServerURL / script

运行此脚本。

def tmp = hudson.model.Hudson.instance
def myJobName="YourTopJobName";

tmp.getItems(hudson.model.Job).each {job ->
if(job.displayName == myJobName)
   {
        println(job.getLastSuccessfulBuild())
    }  
}

在groovy中,您可以访问并设置一个环境变量(可能通过envInject插件注入)到最后一个成功的内部版本号,然后将此变量传递给下游作业。

如果情况并非如此,那么我建议使用Nant Script。 使用“int :: parse()”将字符串格式的内部版本号转换为整数。减小值,然后将值传递给下游作业。

相关问题