2013-09-03 11 views
5

ho bisogno di ottenere il lavoro nome in questo esempio, ho un codice per ottenere il valore precedente del parametro di compilazione con quel codiceCome ottenere il nome del lavoro su un parametro dinamico Groovy in Jenkins

jenkins.model.Jenkins.instance.getItem("nameOfJob").lastBuild.getBuildVariables().get("NameOfParameter"); 

Il Il nome del lavoro ora è hard coded, ho bisogno di ottenere questo nome sarà il nome del lavoro corrente, come non posso fare?

Grazie

risposta

8

Groovy I parametri dinamici non hanno accesso alle normali variabili di ambiente a cui è riservato il resto del lavoro di jenkins.

Ecco un hack di lavoro per ottenere il nome del lavoro:

def build = Thread.currentThread().toString() 
def regexp= ".+?/job/([^/]+)/.*" 
def match = build =~ regexp 
def jobName = match[0][1] 
4

Se si esegue un passo di un progetto poi c'è un ambiente JOB_NAME variabile

che in Groovy è possibile accedere

String jobName = System.getenv('JOB_NAME') 

Se si desidera inviare costruire poi controlla questa risposta How to get specific information about the current build project in Jenkins with Groovy?

Come per la domanda aggiuntiva, per ottenere l'accesso al nome del lavoro Jenkins nella fase di impostazione che è necessario di utilizzare la EnvInject plugin che supporta Groovy - ha bisogno di restituire una mappa

println "currentJob -->${currentJob}" 
println "currentBuild --> ${currentBuild}" 

[currentJob: currentJob, currentBuild: currentBuild] 

Questa è l'uscita quando uso un lavoro shell eco il nuovo ambiente

Started by user anonymous 
[EnvInject] - Loading node environment variables. 
[EnvInject] - Preparing an environment for the build. 
[EnvInject] - Keeping Jenkins system variables. 
[EnvInject] - Keeping Jenkins build variables. 
[EnvInject] - Evaluation the following Groovy script content: 

println "currentJob -->${currentJob}" 
println "currentBuild --> ${currentBuild}" 

[currentJob: currentJob, currentBuild: currentBuild] 

currentJob -->[email protected][_xxx] 
currentBuild --> _xxx #6 
[EnvInject] - Injecting contributions. 
Building on master in workspace /var/lib/jenkins/workspace/_xxx 
[_xxx] $ /bin/sh -xe /tmp/hudson3812821436584477615.sh 
+ echo _xxx #6 
_xxx #6 
+ echo [email protected][_xxx] 
[email protected][_xxx] 
Finished: SUCCESS 

Hai bisogno di fare un po 'di manipolazione di stringhe per separare il lavoro e creare

+0

Grazie mille –

+0

Uomo, nel parametro dinamico questo non funziona –

+1

Hai ragione. se lo fai nella proprietà dinamica 'System.getenv(). each {println it}' allora non elenca l'ambiente JENKINS. – KeepCalmAndCarryOn

2

In seguito lavora per me dallo script Groovy parametro di plug-uno-scelta (significa prima che la build è legato):

def job = this.binding.jenkinsProject 

Se siete interessati al nome del lavoro, quindi:

def jobName = this.binding.jenkinsProject.name 
+0

chiama semplicemente 'jenkinsProject'? – akostadinov

0
(Thread.currentThread().toString() =~ /job\/(.*?)\//)[0][1] 
Problemi correlati