2016-04-12 16 views
6

में मौजूदा जेनकींस बिल्डिंग तक पहुंचने के लिए मैंने एक ग्रोवी स्क्रिप्ट बनाई है जिसका उपयोग जेनकिन्स नौकरी में System Groovy Script चरण में किया जाता है, जिसे वर्तमान नौकरी के वर्तमान निर्माण तक पहुंचने की आवश्यकता होती है।ग्रोवी स्क्रिप्ट

वर्तमान बिल्डिंग की आवश्यकता है जब मैं अपने वर्तमान नौकरी के वर्तमान निर्माण को शेड्यूलिंग कर रहा हूं, तो वर्तमान कार्य के वर्तमान निर्माण को जोड़ने के लिए 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 वस्तु है, जो वर्तमान बिल्ड वस्तु का एक उदाहरण होना चाहिए की आवश्यकता है। मुझे ग्रोवी लिपि के अंदर मौजूदा चल रहे नौकरी के निर्माण के लिए एक अच्छा तरीका नहीं मिल रहा है।

उत्तर

4

यह वह स्निपेट है जिसे मैं ढूंढ रहा हूं!

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

यह बहुत की तरह मेरे ऊपर स्क्रिप्ट के साथ में फिट बैठता है: आप Execute system Groovy script कदम प्लग में पहले से ही प्रदान करता है अंदर Groovy plug-in उपयोग कर रहे हैं

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

मैं YMMV पाया थोड़ा क्या ग्रूवी स्क्रिप्ट कॉल के आधार पर (जैसे ईमेल-एक्सटी-प्लगइन, पोस्ट-बिल्ड एक्शन)। चल रही नौकरियों के साथ 'सक्रिय बिल्ड = थ्रेड.current थ्रेड()। निष्पादन योग्य' काम करता है। पुरानी नौकरियों के साथ जो काम नहीं करता है। पूर्वनिर्धारित var build का उपयोग शायद सबसे अच्छा है अगर यह वहां है। दोनों मामलों में बिल्ड ऑब्जेक्ट प्राप्त करने के लिए आप कुछ कोशिश कर सकते हैं जैसे 'try {c = build.getClass()} पकड़ें (अपवाद पूर्व) {try {build = Thread.currentThread() निष्पादन योग्य} पकड़ें (अपवाद ex2) {println ("ओह प्रिय, कोई बिल्ड ऑब्जेक्ट नहीं।")}} '। – gaoithe

8

यदि आपका जेनकींस नौकरी में है, तो आप कुछ पूर्वनिर्धारित वैरिएबल के लिए पहुँच :

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

उदाहरण के लिए:

println build.getClass() 

आउटपुट:

class hudson.model.FreeStyleBuild 
संबंधित मुद्दे