2016-04-12 112 views
6

我创建了一个Groovy脚本,用于需要访问当前作业的当前版本的Jenkins作业中的System Groovy Script步骤。在Groovy脚本中访问当前的Jenkins内部版本

当使用Hudson.model Cause.UpstreamCause将当前作业的当前版本链接到我正在调度的从属作业时,需要使用当前版本。

由于代码更简洁:

my-job-step.groovy

def scheduleDependentJob(jobName) { 
    def fooParam = new StringParameterValue('foo', 'bar'); 
    def paramsAction = new ParametersAction(fooParam) 

    println "Scheduling dependent job" 
    def currentJob = ??? 
    def cause = new Cause.UpstreamCause(currentBuild) 
    def causeAction = new hudson.model.CauseAction(cause) 
    instance.queue.schedule(job, 0, causeAction, paramsAction) 
} 

CauseAction构造(见于http://javadoc.jenkins-ci.org/hudson/model/Cause.UpstreamCause.html)需要一个Run对象,该对象的当前生成对象应的一个实例。我只是找不到一个好的方法来获取Groovy脚本中当前正在运行的作业。

回答

4

这是我一直在寻找的片段!

import hudson.model.* 
def currentBuild = Thread.currentThread().executable 

这与我上面的脚本适合在像这样:

import hudson.model.* 


def scheduleDependentJob(jobName) { 
    def fooParam = new StringParameterValue('foo', 'bar'); 
    def paramsAction = new ParametersAction(fooParam) 

    println "Scheduling dependent job" 
    def currentBuild = Thread.currentThread().executable 
    def cause = new Cause.UpstreamCause(currentBuild) 
    def causeAction = new hudson.model.CauseAction(cause) 
    instance.queue.schedule(job, 0, causeAction, paramsAction) 
} 
+1

我发现情况因人而异有点取决于什么叫Groovy脚本(如email-ext-plugin,后期制作动作)。通过运行作业'activeBuild = Thread.currentThread()。executable'可以工作。用旧的工作不起作用。使用预定义的var版本可能是最好的,如果它存在。为了在两种情况下获得构建对象,您可以执行类似于'try {c = build.getClass()} catch(Exception ex){try {build = Thread.currentThread()。executable} catch(Exception ex2){println( “哦,亲爱的,没有建立对象。”)}}'。 – gaoithe

8

如果你詹金斯的工作,你正在使用Groovy plug-in,那里面Execute system Groovy script一步插件已经为您提供了访问一些预定义变量:

build 
    The current AbstractBuild. 
launcher 
    A Launcher. 
listener 
    A BuildListener. 
out 
    A PrintStream (listener.logger). 

例如:

println build.getClass() 

输出:

class hudson.model.FreeStyleBuild 
相关问题