2016-05-12 23 views
2

Ich triggert einen Job (untergeordneten Job) in "Server B" von einem Job (übergeordneter Job) in "Server A" über ein Python-Skript. Ich habe 2-3 Elternjobs. Ich möchte also wissen, welcher übergeordnete Job den untergeordneten Job ausgelöst hat. Woher weiß ich, welcher Elternjob einen Kinderjob ausgelöst hat?Wie kann ich die Projektdetails erhalten, die den spezifischen Job ausgelöst haben?

Kann ich den übergeordneten Jobnamen an den untergeordneten Jobnamen übergeben? Oder Kann ich den übergeordneten Namen direkt aus dem untergeordneten Job abrufen? (Umgebungsvariable/Python-Skripte verwenden)

Antwort

0

Sie könnten einen zusätzlichen Parameter für Ihren untergeordneten Job verwenden.

4

Jeder Build hat eine Umgebungsvariable JOB_NAME. Sie können dies als String-Parameter an Ihren untergeordneten Job übergeben.

folgende Beschreibung ist in der /env-vars.html bereitgestellt:

JOB_NAME

Name des Projekts, dieses zu bauen, wie beispielsweise "foo" oder "foo/bar". (Um Ordnerpfaden von einer Bourne-Shell-Skript abzustreifen, versuchen: $ {JOB_NAME ## * /})

2

Vorbei an der Jobnamen als Umgebungsvariable wie OltzU erwähnt, kann der Weg zu gehen, aber Das hängt davon ab, wie Sie den untergeordneten Job auslösen. Wenn Sie den untergeordneten Job mithilfe eines Post-Build-Schritts direkt aus dem übergeordneten Job auslösen, können Sie den Jobnamen mit dem Plug-In Parameterized Remote Build weiterleiten. Wenn Sie ein Skript im übergeordneten Job verwenden, um den untergeordneten Job auszulösen, können Sie den Namen des Jobs als Parameter angeben.

Wenn Sie den auslösenden Job nicht als Parameter übergeben können, können Sie die Build-Trigger mithilfe von Groovy programmgesteuert abrufen. Groovy ist wirklich die einzige Sprache, die vollständig in die Jenkins API integriert ist. Wenn Sie also eine andere Sprache (Python) verwenden möchten, müssen Sie den Rest api oder jenkins cli verwenden, die beide begrenzt sind, was sie Ihnen geben können (z keiner kann dir den auslösenden Job nach meinem Wissen geben).

Wenn Sie groovy verwenden möchten, um den Trigger-Job zu erhalten, benötigen Sie die Groovy Plugin, die Sie als Build-Schritt in Ihrem untergeordneten Job ausführen werden. Hier ist ein Codeschnipsel, um die Kette von Upstream-Jobs zu erhalten, die Ihren Build ausgelöst haben. Möglicherweise müssen Sie den Code abhängig vom Typ des verwendeten Triggers ändern.

def getUpstreamProjectTriggers(causes) { 
    def upstreamCauses = [] 
    for (cause in causes) { 
     if (cause.class.toString().contains("UpstreamCause")) {   
      upstreamCauses.add(cause.getUpstreamProject()) 
     } 
    } 
    return upstreamCauses 
} 

getUpstreamProjectTriggers(build.getCauses()) 

Von hier aus, wenn Sie die auslösenden Job in verwenden möchten, sagen wir, ein Python-Skript, würden Sie groovy verwenden müssen die auslösenden Job in einer Umgebungsvariablen zu setzen. Diese SO thread gibt mehr Informationen darüber, oder Sie können zu my answer in that thread überspringen, um zu sehen, wie ich es mache.