Auslösen von Jenkins-Builds aus der Ferne und Übergeben von Parametern

74

Ich rufe einen Jenkins-Job remote auf und verwende Folgendes:

wget http://<ServerIP>:8080/job/Test-Jenkins/build?token=DOIT

Hier wird der Test-JenkinsJob aufgerufen und DOITist das Sicherheitstoken, das ich verwendet habe.

Jetzt muss ich einige Parameter an die Datei build.xml dieses Jobs übergeben, z Test-Jenkins.

Ich habe noch nicht herausgefunden, wie die Variablen übergeben werden sollen.

Erkunden
quelle

Antworten:

86

Siehe Jenkins Dokumentation: Parametrisierter Build

Unten ist die Zeile, die Sie interessiert:

http://server/job/myjob/buildWithParameters?token=TOKEN&PARAMETER=Value
Peter Schuetze
quelle
7
Aber es löst den Build aus. Und Sie müssen tatsächlich einen POST-Anruf tätigen. Ich möchte Leuten einen Link mit Standardparameterwerten anbieten, z. B. GET http: // <ServerIP>: 8080 / job / Test-Jenkins / build? Some_param = xyz sollte eine Webseite mit some_param auf den Wert xyz öffnen. Dann kann "Build" drücken.
Kamil Dziedzic
Es ist verwirrend, dass dies von der Standardversion nicht unterstützt wird und Sie ein Plugin benötigen.
Craig Ringer
2
Gibt es ein Plugin, das die Post behandelt? Ich möchte einen Link für einen Benutzer haben und auf klicken, um einen bestimmten parametrisierten Build-Job mit einem Klick auszulösen
Peter Kahn
Gibt es überhaupt eine Möglichkeit, die geplante Build-Job-ID nach dem Auslösen abzurufen?
Kasun Siyambalapitiya
64

Aktivieren Sie in Ihrer Jenkins-Jobkonfiguration das Kontrollkästchen " This build is parameterized", klicken Sie auf die Add ParameterSchaltfläche " " und wählen Sie den String ParameterDropdown-Wert " " aus.

Definieren Sie nun Ihren Parameter - Beispiel:

Geben Sie hier die Bildbeschreibung ein

Jetzt können Sie Ihren Parameter in Ihrer Job- / Build-Pipeline verwenden. Beispiel:

Geben Sie hier die Bildbeschreibung ein

Rufen Sie als Nächstes die folgende URL auf (entweder POST oder GET), um den Build mit einem eigenen / benutzerdefinierten Parameter auszulösen:

http://JENKINS_SERVER_ADDRESS/job/YOUR_JOB_NAME/buildWithParameters?myparam=myparam_value
Zacky Pickholz
quelle
5
Neueste Jenkins-Dokumente besagen, dass GET aus Sicherheitsgründen abgeschrieben wird, daher sollte POST bevorzugt werden.
Roman
1
Mir fehlte "Job" in meiner URL.
Dylan Kapp
1
Was ist mit Projekten mit mehreren Niederlassungen?
Lerner
@Learner haben Sie eine Lösung für ein Mehrzweigprojekt gefunden?
Cyberjoac
5

Um diese Frage zu ergänzen, habe ich herausgefunden, dass Sie den /buildWithParametersEndpunkt nicht verwenden müssen .

In meinem Szenario habe ich ein Skript, das Jenkins dazu veranlasst, nach einer Bereitstellung Tests auszuführen. Für einige dieser Tests sind zusätzliche Informationen zur Bereitstellung erforderlich, damit sie ordnungsgemäß funktionieren.

Wenn ich versuchen würde, /buildWithParameterseinen Job zu verwenden, der keine Parameter erwartet, wird der Job nicht ausgeführt. Ich möchte nicht jeden Job bearbeiten, um gefälschte Parameter zu benötigen, damit die Jobs ausgeführt werden.

Stattdessen habe ich festgestellt, dass Sie Parameter wie folgt übergeben können:

curl -X POST --data-urlencode "token=${TOKEN}" --data-urlencode json='{"parameter": [{"name": "myParam", "value": "TEST"}]}' https://jenkins.corp/job/$JENKINS_JOB/build

Damit json=...wird der Parameter myParammit dem Wert TESTbei jedem Aufruf an den Job übergeben. Der Jenkins-Job wird jedoch auch dann ausgeführt, wenn der Parameter nicht erwartet wird myParam.

Das einzige Szenario, das hier nicht behandelt wird, ist, wenn der Job einen Parameter hat, der NICHT in der übergeben wird json. Selbst wenn für den Parameter ein Standardwert festgelegt ist, kann der Job nicht ausgeführt werden. In diesem Szenario wird beim Aufruf die folgende Fehlermeldung / Stapelverfolgung angezeigt /build:

java.lang.IllegalArgumentException: No such parameter definition: myParam

Mir ist klar, dass diese Antwort einige Jahre zu spät ist, aber ich hoffe, dass dies nützliche Informationen für jemand anderen sind!

Hinweis: Ich verwende Jenkins v2.163

Monkpit
quelle
Vielleicht POSTsollte das statt gemacht buildWithParameterswerden build? Gemäß dem Cloudbees-Artikel werden die Standardwerte verwendet, wenn der erstere verwendet wird. Hier ist der Artikel: support.cloudbees.com/hc/en-us/articles/…
haridsv
@haridsv Wenn Sie dies in einem Skript verwenden, das möglicherweise beide Builds auslöst, die keine Parameter annehmen und keine annehmen, schlägt dies bei buildWithParametersJobs fehl, die nicht parametrisiert sind, während buildbei Jobs kein Fehler auftritt.
Monkpit
Danke für die Klarstellung! Ich denke, das ist wichtig, wenn das Skript sehr allgemein gehalten ist und nicht für diesen speziellen Job geschrieben wurde.
Haridsv
2

Um die Variablen zu übergeben / zu verwenden, erstellen Sie zuerst Parameter im Abschnitt configure von Jenkins. Die von Ihnen verwendeten Parameter können vom Typ Text, Zeichenfolge, Datei usw. sein.

Verwenden Sie nach dem Erstellen die Variablenreferenz in den gewünschten Feldern.

Zum Beispiel: Ich habe zwei Variablen für Email-subjectund konfiguriert / erstellt und Email-recipentListderen Referenz im EMail-extPlugin verwendet (angehängter Screenshot).

Geben Sie hier die Bildbeschreibung ein

Hari Kiran Mutyala
quelle
//, Können Sie uns einen Weg zeigen, dies mit der API zu tun?
Nathan Basanese
Ich habe einfache HTTP-Aufrufe wie POST oder GET verwendet. Beispiel: RESTCallsUtility.invokePostMethod (auth, "<Host> / Services / job / Jira2BugDB / buildWithParameters? Token = jira2bugdb_remote & Operation = create-single & Argument =" + projectKey, "data")
Hari Kiran Mutyala
2

Sie können es einfach mit einer Jenkins-Datei versuchen. Erstellen Sie einen Jenkins-Job mit dem folgenden Pipeline-Skript.

pipeline {
    agent any

    parameters {
        booleanParam(defaultValue: true, description: '', name: 'userFlag')
    }

    stages {
        stage('Trigger') {
            steps {
                script {
                    println("triggering the pipeline from a rest call...")
                }
            }
        }
        stage("foo") {
            steps {
                echo "flag: ${params.userFlag}"
            }
        }

    }
}

Erstellen Sie den Job einmal manuell, um ihn zu konfigurieren, und erstellen Sie einfach eine http-POST-Anforderung für den Jenkins-Job wie folgt.

Das Format ist http://server/job/myjob/buildWithParameters?PARAMETER=Value

curl http://admin:test123@localhost:30637/job/apd-test/buildWithParameters?userFlag=false --request POST
JMadushan
quelle
1
Wie füge ich hier ein Authentifizierungstoken mit dem Skript hinzu?
Luv33preet
0

Mithilfe der folgenden Abfrage können Sie Jenkins-Builds remote auslösen und Parameter übergeben.

JENKINS_URL/job/job-name/buildWithParameters?token=TOKEN_NAME&param_name1=value&param_name1=value

JENKINS_URL (kann sein) = https://<your domain name or server address>

TOKE_NAME kann über die Registerkarte "Konfigurieren" erstellt werden

Himanshu Mishra
quelle