web-dev-qa-db-fra.com

Comment déclencher des builds Jenkins à distance et passer des paramètres

J'appelle un travail Jenkins à distance en utilisant: 

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

Ici, Test-Jenkins travail est appelé et DOIT est le jeton de sécurité que j'ai utilisé.

Maintenant, je dois passer quelques paramètres au fichier build.xml de ce travail, à savoir Test-Jenkins.

Je n'ai pas encore compris comment passer les variables.

47
Exploring

Voir la documentation Jenkins: Construction paramétrée

Vous trouverez ci-dessous la ligne qui vous intéresse:

http://server/job/myjob/buildWithParameters?token=TOKEN&PARAMETER=Value
53
Peter Schuetze

Pour déclencher une construction avec des paramètres propres/personnalisés, appelez l'URL suivante (à l'aide de POST ou de GET):

http://JENKINS_SERVER_ADDRESS/job/YOUR_JOB_NAME/buildWithParameters?myparam=myparam_value

Ensuite, dans votre configuration de travail Jenkins, cochez la case "This build is parameterized", cliquez sur le bouton "Add Parameter" et sélectionnez la valeur déroulante "String Parameter".

Définissez maintenant votre paramètre - exemple:

 Enter image description here

Vous pouvez maintenant utiliser votre paramètre dans votre pipeline de travail/génération, par exemple:

 Enter image description here

46
Zacky Pickholz

Pour transmettre/utiliser les variables, commencez par créer des paramètres dans la section configurer de Jenkins. Les paramètres que vous utilisez peuvent être de type texte, chaîne, fichier, etc.

Après les avoir créés, utilisez la référence de variable dans les champs souhaités.

Par exemple: j'ai configuré/créé deux variables pour Email-subject et Email-recipentList et j'ai utilisé leur référence dans le plugin EMail-ext (capture d'écran jointe).

Enter image description here

2

Pour ajouter à cette question, j'ai découvert qu'il n'était pas nécessaire d'utiliser le noeud final /buildWithParameters.

Dans mon scénario, j'ai un script qui déclenche l'exécution par Jenkins de tests après un déploiement. Certains de ces tests nécessitent des informations supplémentaires sur le déploiement pour fonctionner correctement.

Si j'essayais d'utiliser /buildWithParameters sur un travail qui n'attend pas de paramètres, le travail ne s'exécutera pas. Je ne veux pas éditer chaque travail pour exiger de faux paramètres uniquement pour que les travaux soient exécutés.

Au lieu de cela, j'ai trouvé que vous pouvez transmettre des paramètres comme ceci:

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

Avec ce json=..., le paramètre myParam avec la valeur TEST sera transmis au travail chaque fois que l'appel sera effectué. Toutefois, le travail Jenkins sera toujours exécuté même s'il n'attend pas le paramètre myParam.

Le seul scénario que cela ne couvre pas est si le travail a un paramètre qui n'est PAS passé dans la variable json. Même si le travail a une valeur par défaut définie pour le paramètre, l'exécution du travail échouera. Dans ce scénario, vous rencontrerez le message d'erreur suivant/la trace de pile lorsque vous appelez /build:

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

Je me rends compte que cette réponse a plusieurs années de retard, mais j'espère que cela pourra être utile pour quelqu'un d'autre!

Note: J'utilise Jenkins v2.163

1
Monkpit

Vous pouvez simplement l'essayer avec un fichier jenkins. Créez un travail Jenkins avec le script de pipeline suivant.

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}"
            }
        }

    }
}

Créez le travail une fois manuellement pour le configurer et créez simplement une requête http POST au travail Jenkins comme suit.

Le format esthttp://server/job/myjob/buildWithParameters?PARAMETER=Value

curl http://admin:test123@localhost:30637/job/apd-test/buildWithParameters?userFlag=false --request POST
0
JMadushan