5

Ich versuche, wie ein nachgeschaltetes Job von meinem aktuellen Job zu triggern sojenkins nicht auf einen nachgelagerten Job bauen

pipeline { 
    stages { 
    stage('foo') { 
     steps{ 
     build job: 'my-job', propagate: true, wait: true 
     } 
    } 
    } 
} 

Der Zweck auf dem Arbeitsergebnis zu warten ist und scheitern oder gelingen nach diesem Ergebnis. Jenkins versagt immer mit der Nachricht Waiting for non-job items is not supported. Der oben erwähnte Job hat keine Parameter und ist wie der Rest meiner Jobs mit dem Multi-Branch-Pipeline-Plugin definiert.

Alles, was ich mir vorstellen kann, ist, dass diese Art von Jenkins Element nicht als Build-Schritt-Eingabe unterstützt wird, aber das scheint nicht eingängig und würde sich als Blocker für mich erweisen. Kann mir jemand bestätigen, dass dies tatsächlich der Fall ist?

Wenn ja, kann jemand irgendwelche Workarounds vorschlagen?

Danke

+1

Ich habe mit ziemlich genau das gleiche Problem hier. Leider ist das einzige andere Material, das ich zu diesem Thema finden kann, ein weiterer StackOverflow-Post vom April: https://stackoverflow.com/questions/43337070/how-to-invoke-a-jenkins-pipeline-a-in-another-jenkins- pipeline-b –

Antwort

1

Das sieht aus wie JENKINS-45443, die den Kommentar

Pipeline hat keine Unterstützung für das Upstream/Downstream-Auftragssystem, teilweise aufgrund technischer Einschränkungen, teilweise aufgrund der Tatsache beinhaltet, dass Es gibt keine statische Jobkonfiguration, die dies möglich machen würde, es sei denn, Sie überprüfen die letzten Build-Metadaten.

Aber es bietet auch die Abhilfe:

solange die Lösung noch nicht abgeschlossen ist, ich bin hier, um unsere Abhilfe. Es basiert in der rtp (Rich Text Publisher) plugin, die Sie installiert haben sollten, damit es funktioniert:

Am Ende unserer Jenkinsfile und nach dem Auslösen des Jobs warten wir, bis es fertig ist. In diesem Fall gibt build() das Objekt zurück, mit dem der nachgeordnete Job ausgeführt wurde. Wir bekommen die Informationen von ihm.

Warnung: getAbsoluteUrl() Funktion ist eine kritische. Benutzen Sie es auf eigene Gefahr!

def startedBld = build(
    job: YOUR_DOWNSTREAM_JOB, 
    wait: true, // VERY IMPORTANT, otherwise build() does not return expected object 
    propagate: true 
) 

// Publish the started build information in the Build result 
def text = '<h2>Downstream jobs</h2>Started job <a href="' + startedBld.rawBuild.getAbsoluteUrl() + '">' + startedBld.rawBuild.toString() + '</a>' 
rtp (nullAction: '1',parserName: 'HTML', stableText: text) 

Dieses Problem Teil JENKINS-29913 ist, geöffnet für die letzten zwei Jahre:

Derzeit DependencyGraph zu AbstractProject begrenzt ist, so dass es unmöglich für Workflows in vorgeschalteten Teilnahme/Downstream Beziehungen (in Fällen, in denen eine Jobverkettung erforderlich ist, z. B. aufgrund von Sicherheitsbeschränkungen).

Es bezieht sich die RFE (Request for Enhancement) JENKINS-37718, basierend auf einem anderen (offen) Stack Overflow question.

7

Ich schaffte es tatsächlich, dies zu beheben, indem ich mehr auf die Definition des Build-Schrittes achtete. Da alle meine Downstream-Jobs als Multi-Branch-Pipeline-Jobs definiert sind, ist ihre Struktur folderartig, wobei jedes Element im Ordner einen separaten Job darstellt. Daher war der richtige Weg, die Downstream-Jobs aufzurufen, nicht build job: 'my-job', propagate: true, wait: true, sondern build job: "my-job/my-branch-name", propagate: true, wait: true.

Auch unabhängig von der Frage, sondern in Bezug auf das vorliegende Problem, stellen Sie sicher, dass Sie immer mindestens einen weiteren Executor frei auf der Jenkins-Maschine haben, da die Warte-Syntax einen Thread für den wartenden Job und einen für Der Job wird gewartet, und Sie können sich leicht in einer Ressourcensituation befinden.

Hoffe, das hilft

+0

Also der Fehler, den ich erwähnt habe, gilt hier nicht? +1 sowieso. – VonC

Verwandte Themen