Home » Beitrag verschlagwortet mit 'Jenkins'
Schlagwort-Archive: Jenkins
Jenkins Trigger Child Job
Notizen zu meiner Odysse zum Versuch, aus einem Jenkins Job einen Folge-Job mit jeweils unterschiedlichen Parametern aufzurufen.
Wie es funktioniert
Variante 1 (getestet)
Das Parameterized Trigger Plugin, wenn es in der Build (nicht Post-Build) Phase configuriert wird so aufgerufen werden, dass für jedes Configurations-File (welches auf das definierte File-Name-Pattern passt) einmal der definierte Job aufgerufen wird. (–> Hier der Hinweis)
Wenn das Parameterized Trigger Plugin jedoch in der Post-Build phase configuriert wird ist das Trigger-Pro-File Feature leider nicht konfigurierbar.
Variante 2 (nicht getestet)
Aufruf über HTTP. Diese Variante hab ich nicht ausgetestet, weil ich befürchtet habe in Jenkins meines Arbeitgebers nicht so leicht an die Authorisierungs-Tokens zu gelangen und eine so geartete Lösung produktiv so liefern zu können.
Links:
- Jenkins Remote Build Trigger – Build Jobs with URL and Token
- Trigger Jenkins Job Remotely using Jenkins API
Was ich auch noch gelernt habe
Aufruf von Folge-Jobs via Groovy
Leider habe ich es nicht geschaft dem Groovy-mässigen Aufruf auch Parameter mit zu geben.
Der folgende Code, eingefügt in in Groovy Plugin in Post-Build ruft tatsächlich den Folge-Job auf (aber leider one Parameter):
import jenkins.*
import jenkins.model.*
import hudson.*
import hudson.model.*
def build = Thread.currentThread().executable
def buildNumber = build.number
def target = Jenkins.instance.getItemByFullName("Mein_Jenkins_Job") ?: null
if (!target) {
manager.listener.logger.println("No downstream job found")
} else {
manager.listener.logger.println("I found it!")
def execution = target.scheduleBuild2(0, new Cause.UpstreamCause(build))
manager.listener.logger.println("Running test job:")
manager.listener.logger.println("Complete, result was: " + execution.get().result)
}
Dokumentation hudson.model.AbstractProject Klasse, dessen scheduleBuild2() Methode aufgerufen wird.
Die doBuildWithParameters Methode ist leider deprecated und für den Ersatz sind keine Beispiele auffindbar.
–> Inspiration für diesen Code
–> Groovy Syntax
Definition Folge-Job als Multi-Configuration-Projekt & Aufruf einer spezifischen Ausprägung davon
Multikonfigurations-Jobs haben typischerweise eine Dimension in der sie sich unterscheiden, z.B. die Dimension Betriebssystem (Windows, Linux, GoogleOS, …). Für jede dieser Dimensionen wird eine Instanz generiert. Wenn man den Job startet, wird per Default für jede der Ausprägungen eine Instanz gestartet.
Nun sah es vielsversprechend aus, dass man einen solchen Job unter Mitgabe einer Dimensions-Ausprägung hätte staten können. Ich war bislang nicht er folgreich.
Readings:
Jenkins: Environment Varable via Groovy Script setzen
In einem Jenkins Job unter dem ‚Kapitel‘ ‚Build Environment‘ kann via die Option ‚Inject environment variables to the build process‘ optional mittels ‚Evaluated Groovy script“ > ‚Groovy Script‘ ein eben solches angegeben werden.
Dazu ist aber wahrscheinlich das EnvInject Plugin notwendig!
import hudson.model.* //Importieren der Jenkins libraries
def build = Thread.currentThread().executable //Den build in dem wir laufen holen
def userCause = build.getCause(hudson.model.Cause$UserIdCause)
//<--Jenkins nach dem user fragen
def userName = userCause?.userId ?: 'Jenkins'
['BUILD_USER': userName] //Die user variable im Environment bekannt machen.
Ein etwas ausführlicheres und komplexeres aber verständliches Beispiel ist hier documentiert.
Auch lesenswert: Jenkins: Builds mit Groovy-Scripts aufpeppen