steps - ¿Cómo desencadenar una compilación de jenkins en un nodo específico utilizando el complemento de canalización?
jenkins pipeline tutorial (4)
Tengo un trabajo en la tubería de Jenkins llamado "TestPipeline". Quiero activar una compilación en 2 esclavos diferentes que etiquetan "tester1 ''y" tester2 ". Y el script de canalización es bastante simple aquí:
node(''tester1'') {
build ''test_job''
}
node(''tester2'') {
build ''test_job''
}
Sin embargo, cuando ejecuto el trabajo TestPipeline, el "test_job" no se ejecutará en los nodos que asigné. Pero ejecuta en el nodo aleatorio en su lugar.
Me pregunto si debo establecer "Restringir dónde se puede ejecutar este proyecto" en mi "test_job". Así que lo puse a "tester" (la etiqueta de "tester" contiene tanto el nodo "tester1" como "tester2"). Pero cuando vuelvo a ejecutar el trabajo de canalización, el "test_job" se ejecuta en "tester2" dos veces. Debería esperar que el trabajo se ejecute en "tester1" primero y luego se ejecute en "tester2". ¿Porqué es eso? ¿Se debe a que el paso del "nodo" no importa en qué nodo se debe construir el paso de compilación?
Acabo de probar esto en mi instalación y corrió correctamente cada script en cada nodo. Es posible que desee comprobar que ha configurado sus esclavos correctamente. Creo que la documentación dice que necesitan tener los agentes de Launch slave a través de la configuración de Java Web Start, puede verificarlo.
Así es como lo tengo funcionando
cree un ''trabajo'' ''test_job'' con el tipo de parámetro ''label'', nombre ''nodo'', el valor puede ser cualquier cadena. (este es el trabajo que se activará). Establezca ''Restringir donde se puede ejecutar este proyecto'' al valor de la etiqueta
crear una ''tubería'' con el tipo de parámetro "Nodo". Desde la sección de tubería, use el siguiente script
Tenga en cuenta que la etiqueta para test_job es $ {env.NODE_NAME} que se establecerá según la elección del usuario
pipeline {
agent any
stages {
stage(''Build'') {
steps {
echo ''Building..''
script {
build job: ''test_job'', parameters: [
[$class: ''LabelParameterValue'', name: ''node'', label: "${env.NODE_NAME}" ]
]
}}}}}
Hice lo mismo, pero utilizando el parámetro Nodo, por lo que puedo usar la lista de nodos ejecutando el trabajo directamente, o ejecutando la tubería (en la tubería, uso el parámetro Elección para tener la lista de nodos disponibles). Así que en mi caso:
- Instalar complemento de parámetro Nodo y Etiqueta
- En la configuración de test_job, seleccione ''Esta compilación está parametrizada'' y agregue un parámetro de Nodo y establezca el nombre del parámetro como
node_name
- En la tubería, agregue el parámetro Elección, nómbrelo como
node
, coloque allí las posibles opciones, de modo que al ejecutar la tubería puede elegir en qué nodo se debe ejecutar.
Código para insertar en el script de tubería:
build job: ''my_job'',
parameters: [[$class: ''NodeParameterValue'', name: ''node_name'', labels: ["$node"], nodeEligibility: [$class: ''AllNodeEligibility'']]]
Por favor, vea el error here . La solución es la siguiente.
- Instalar complemento de parámetro Nodo y Etiqueta
- En la configuración de test_job, seleccione ''Esta compilación está parametrizada'' y agregue un parámetro Label y configure el nombre del parámetro como ''nodo''
- En el script de tubería, use el código:
build job: ''test_job'', parameters: [[$class: ''LabelParameterValue'', name: ''node'', label: ''tester1'']]
build job: ''test_job'', parameters: [[$class: ''LabelParameterValue'', name: ''node'', label: ''tester2'']]
Y el trabajo será construido como yo quería.
Sin embargo , creo que es sólo una solución. Todavía creo que esto es un error. Porque el paso de nodo debe hacer su trabajo en lugar de permitir que otros complementos lo hagan por él.