tutorial tareas superior programador nodos nivel marked integrar failure español ejecutar ejecuciones disparadores con jenkins jenkins-pipeline

tareas - Ejecución de etapas en paralelo con el flujo de trabajo/canalización de Jenkins



nodos jenkins (5)

Tenga en cuenta: la pregunta se basa en el formato de canal antiguo, ahora llamado "con guiones". Cuando se utilizan "tuberías declarativas", se pueden anidar bloques paralelos dentro de bloques de etapas (ver Etapas paralelas con Canalización declarativa 1.2 ).

Me pregunto cómo se supone que los pasos paralelos funcionan con el plugin de flujo de trabajo / canalización de Jenkins, esp. cómo mezclarlos con etapas de construcción. Sé sobre el patrón general:

parallel(firstTask: { // Do some stuff }, secondTask: { // Do some other stuff in parallel })

Sin embargo, me gustaría ejecutar dos etapas en paralelo (en el mismo nodo, que tiene múltiples ejecutores), así que traté de agregar etapas como esta:

stage ''A'' // Do some preparation stuff parallel(firstTask: { stage ''B1'' // Do some stuff }, secondTask: { stage ''B2'' // Do some other stuff in parallel }) stage ''C'' // Finalizing stuff

Esto no funciona como se esperaba Las tareas de "hacer cosas" se ejecutan en paralelo, pero las etapas paralelas finalizan inmediatamente y no incorporan las cosas que deberían contener. Como consecuencia, Stage View no muestra el resultado correcto y tampoco vincula los registros.

¿Puedo construir diferentes etapas en paralelo o el paso "paralelo" solo se debe usar en una sola etapa?


Acabo de probar la siguiente canalización y funciona

parallel firstBranch: { stage (''Starting Test'') { build job: ''test1'', parameters: [string(name: ''Environment'', value: "$env.Environment")] } }, secondBranch: { stage (''Starting Test2'') { build job: ''test2'', parameters: [string(name: ''Environment'', value: "$env.Environment")] } }

Este trabajo llamado ''trigger-test'' acepta un parámetro llamado ''Environment''

Job ''test1'' y ''test2'' son trabajos simples:

Ejemplo para ''test1''

  • Un parámetro llamado ''Ambiente''
  • Pipeline: echo "$ env.Environment-TEST1"

En la ejecución, puedo ver las dos etapas ejecutándose al mismo tiempo


Como mencionó @Quartz, puedes hacer algo como

stage(''Tests'') { parallel( ''Unit Tests'': { container(''node'') { sh("npm test --cat=unit") } }, ''API Tests'': { container(''node'') { sh("npm test --cat=acceptance") } } ) }



No puede colocar la stage obsoleta sin ámbito de bloque (como en la pregunta original) dentro de parallel .

A partir de JENKINS-26107 , stage toma un argumento de bloque. Puede colocar parallel dentro del stage o stage dentro del stage parallel o en el stage dentro del stage etc. Sin embargo, no se garantiza que las visualizaciones de la compilación respalden todas las anidaciones; en particular

  • Los pasos integrados de Pipeline (una "tabla de árbol" que enumera cada paso ejecutado por la compilación) muestran la anidación arbitraria de stage .
  • El complemento Pipeline Stage View solo mostrará una lista lineal de etapas, en el orden en que comenzaron, independientemente de la estructura de anidación.
  • Blue Ocean mostrará etapas de primer nivel, más ramas parallel dentro de un nivel superior, pero actualmente no más.

JENKINS-27394 , si se implementa, mostraría stage anidadas arbitrariamente.


esa sintaxis ahora está en desuso, obtendrá este error:

org.codehaus.groovy.control.MultipleCompilationErrorsException: startup failed: WorkflowScript: 14: Expected a stage @ line 14, column 9. parallel firstTask: { ^ WorkflowScript: 14: Stage does not have a name @ line 14, column 9. parallel secondTask: { ^ 2 errors

Deberías hacer algo como:

stage("Parallel") { steps { parallel ( "firstTask" : { //do some stuff }, "secondTask" : { // Do some other stuff in parallel } ) } }

Solo para agregar el uso del nodo aquí, para distribuir trabajos entre varios servidores / máquinas virtuales de compilación:

pipeline { stages { stage("Work 1"){ steps{ parallel ( "Build common Library": { node(''<Label>''){ /// your stuff } }, "Build Utilities" : { node(''<Label>''){ /// your stuff } } ) } }

Todas las máquinas virtuales deben etiquetarse para usar como grupo.