2016-04-12 111 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 
相關問題