Je travaille avec un serveur de génération Jenkins pour exécuter la synthèse/simulation pour les FPGA . À l'heure actuelle, j'ai des versions nocturnes et je peux commencer la construction manuellement dans l'interface du navigateur Jenkins.
Ma question est:
Est-il possible de démarrer une construction de travail avec un script batch sans utiliser l'interface du navigateur?
(J'exécute Jenkins sur Windows 7 64 bits.)
Voici un exemple avec une commande curl (pour un travail avec des paramètres):
curl -X POST -u YOUR_USER:YOUR_USER_PASSWORD http://YOUR_JENKINS_URL/job/YOUR_JOB/buildWithParameters?PARAM1=value1&PARAM2=value
Et un travail sans paramètres:
curl -X POST -u YOUR_USER:YOUR_USER_PASSWORD http://YOUR_JENKINS_URL/job/YOUR_JOB/build
Si vous ne souhaitez pas utiliser votre utilisateur/mot de passe, vous pouvez générer un jeton d'API pour votre utilisateur Jenkins:
Et utilisez ce jeton dans votre commande curl:
curl -X POST http://YOUR_JENKINS_URL/job/YOUR_JOB/build?TOKEN=YOUR_API_TOKEN
Vous pouvez déclencher un travail Jenkins avec un jeton configuré à la place de votre nom d'utilisateur/mot de passe, ce qui vous permettrait de partager un script de déclenchement sans exposer vos propres informations d'identification.
Puis utilisez cette URL dans une commande curl
pour déclencher une construction. Par exemple:
curl -I https://${JENKINS_URL}/job/tmp/job/dummy-test/build?token=MY_TOKEN
Le paramètre -I
indique à curl
d’imprimer l’en-tête de la réponse, que vous pouvez utiliser pour déterminer l’état du résultat. Jenkins répond avec HTTP 201 en cas de succès:
$ curl -I https://<JENKINS_URL>/job/tmp/job/dummy-test/build\?token\=MY_TOKEN
HTTP/1.1 201 Created
Cache-Control: public
Content-Length: 0
Date: Mon, 11 Apr 2016 12:47:26 GMT
Location: https://<JENKINS_URL>/queue/item/1707/
Pragma: public
Server: Apache-Coyote/1.1
X-Content-Type-Options: nosniff
Connection: keep-alive
vous pouvez le faire en utilisant la commande curl avec l'option -I. créez un jeton API pour le travail jenkins et utilisez-le pour déclencher le travail. vous pouvez également utiliser le mot de passe utilisateur jenkins.
la commande serait
curl -I -u auto:<user_api_token> http://<jenkins_Server>/job/test/build?token=wefiytgwiefiweihfqweiodf
pour plus d'informations https://serverfault.com/questions/888176/how-to-trigger-jenkins-job-via-curl-command-remotely/888248#888248
Alors que j'essayais de déclencher mon travail via curl, je finissais toujours par recevoir des erreurs "Non autorisé".
Plus tard, j'ai découvert que c'était parce que j'avais complètement désactivé l'accès anonyme sur le serveur. La solution consistait à installer le plugin suivant: https://wiki.jenkins-ci.org/display/JENKINS/Build+Token+Root+Plugin
Dans le nouveau pipeline Jenkins, sous Build Triggers, cochez la case Trigger génère à distance (par exemple, à partir de scripts). Ensuite, donnez à Jenkins un jeton qui sera nécessaire pour déclencher la construction.
Not authorized
erreursUn problème lié au déclenchement des versions à distance est que, si vous avez configuré un accès utilisateur anonyme anonyme correct et Jenkins, vous obtiendrez des erreurs Not authorized
lorsque vous essayez de déclencher la construction à partir d'un script (comme l'a souligné @keocra). Vous avez maintenant deux options:
Pour déclencher la construction à distance, exécutez
curl JENKINS_URL/buildByToken/build?job=JobFoo&token=MyToken
Où JENKINS_URL
est l'URL de votre instance Jenkins, JobFoo
est le nom de votre travail et MyToken
est le jeton que vous avez entré sous Trigger bulids à distance.
Bien sûr, vous n'avez pas besoin d'utiliser curl
; vous pouvez également utiliser wget
ou tout autre programme pouvant émettre des requêtes HTTP.