Feb 16 2022
Registrar un Esclavo Jenkins con API REST
Aquí se explica cómo registrar un nodo Jenkins automáticamente con una llamada a una API REST a el maestro.
La mayor parte del trabajo consiste en crear el código json que describe el nuevo esclavo de Jenkins. La configuración puede ser ligeramente diferente según la configuración del nodo que desee aplicar.
Para obtener exactamente lo que desea, puede crear un esclavo de prueba manualmente y capturar el objeto JSON en la pestaña de red de las herramientas de desarrollo de su navegador mientras hace clic en «Guardar». Mientras tanto, aquí hay un ejemplo, suponiendo que el agente se inicia a través de un script de inicio:
{
"name": "my_jenkins_slave",
"nodeDescription": "my Jenkins slave",
"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"
}
]
}
}
}
}
Todo lo que queda es establecer las siguientes 3 variables de entorno:
jenkins_user=my_jenkins_slave
jenkins_token=my_jenkins_token
jenkins_url=https://jenkins.midominio.lan
Y envíe un post del archivo JSON usando una simple solicitud de 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=my_jenkins_slave&type=hudson.slaves.DumbSlave"; \
echo
200
Si no obtiene un código de respuesta 200, ejecute el mismo omitiendo «-o /dev/null» para depurar.
Algunos dirán que también puede usar otras herramientas como Jenkins CLI o plugins, pero la API REST de Jenkins funciona a través de firewalls y sigue siendo bastante simple de implementar.
En el próximo artículo, usaré este método para registrar automáticamente un agente de Jenkins con Ansible.