Avr 22 2020

Enregistrer un Esclave Jenkins par API REST

Publié par à 6:23 sous Jenkins

Voici comment enregistrer un noeud Jenkins automatiquement avec un appel à une API REST sur le maître.
Le plus gros du travail est de créer le code json qui décrit le nouvel esclave Jenkins. La configuration peut être légèrement différente selon les paramètres du noeud que vous souhaitez appliquer.
Pour obtenir exactement ce que vous voulez, vous pouvez créer un esclave test manuellement et capturer l’objet JSON dans l’onglet réseau des outils développeur de votre navigateur tout en cliquant sur « Sauver ». En attendant, voici un exemple, présumant que l’agent se lance via un script de démarrage:

{
   "name": "mon_esclave_jenkins",
   "nodeDescription": "mon esclave Jenkins",
   "numExecutors": "2",
   "remoteFS": "/home/jenkins",
   "labelString": "slave",
   "mode": "EXCLUSIVE",
   "": [
      "hudson.slaves.JNLPLauncher",
      "hudson.slaves.RetentionStrategy$Always"
   ],
   "launcher": {
      "stapler-class": "hudson.slaves.JNLPLauncher",
      "$class": "hudson.slaves.JNLPLauncher",
      "workDirSettings": {
         "disabled": true,
         "workDirPath": "",
         "internalDir": "remoting",
         "failIfWorkDirIsMissing": false
      },
      "tunnel": "",
      "vmargs": ""
   },
   "retentionStrategy": {
      "stapler-class": "hudson.slaves.RetentionStrategy$Always",
      "$class": "hudson.slaves.RetentionStrategy$Always"
   },
   "nodeProperties": {
      "stapler-class-bag": "true",
      "hudson-slaves-EnvironmentVariablesNodeProperty": {
         "env": [
            {
               "key": "JAVA_HOME",
               "value": "/usr/lib/jvm/java-8-openjdk-amd64"
            }
         ]
      },
      "_comment:": {
         "hudson-tools-ToolLocationNodeProperty": {
           "locations": [
               {
                  "key": "hudson.model.JDK$DescriptorImpl@JAVA-8",
                  "home": "/usr/bin/java"
               }
            ]
         }
      }
   }
}

 
Il ne reste qu’à définir les 3 variables d’environnement suivantes:

jenkins_user=mon_esclave_jenkins
jenkins_token=mon_token_jenkins
jenkins_url=https://jenkins.mondomaine.lan

 
Et faire un post du fichier JSON à l’aide d’une simple requête curl:

$ curl -L -s -o /dev/null -w "%{http_code}" -u $jenkins_user:$jenkins_token \
-H "Content-Type:application/x-www-form-urlencoded" -X POST \
-d "json=$(cat /tmp/node.json)" \
"$jenkins_url/computer/doCreateItem?name=mon_esclave_jenkins&type=hudson.slaves.DumbSlave"; \
echo
200

 
Si vous n’obtenez pas un code de réponse 200, exécutez la même chose en omettant « -o /dev/null » pour débugguer.
Certains diront que l’on peut aussi utiliser d’autres outils comme Jenkins CLI ou des plugins mais l’API REST de Jenkins fonctionne à travers les firewalls et reste assez simple à mettre en oeuvre.
Dans le prochain article, j’utiliserai cette méthode pour enregistrer un agent Jenkins avec Ansible automatiquement.


No responses yet

Comments RSS

Leave a Reply