Avr 22 2020

Enregistrement Auto d’un Esclave Jenkins avec une API REST

Publié par à 6:23 sous Jenkins




Créez un noeud Jenkins automatiquement avec un appel à une API REST. 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 variables 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’un simple 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 qu’on peut aussi utiliser d’autres outils comme Jenkins CLI ou des plugins 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 automatiser l’enregistrement d’un agent Jenkins agent avec Ansible


No responses yet

Comments RSS

Leave a Reply