tutorial significado continuous-integration hudson jenkins

continuous integration - significado - Jenkins-¿pasa variables entre trabajos?



jenkins significado (10)

Tengo dos trabajos en Jenkins, los cuales necesitan el mismo parámetro.

¿Cómo puedo ejecutar el primer trabajo con un parámetro para que cuando active el segundo trabajo, se use el mismo parámetro?


(para compañeros googlers)

Si está construyendo una tubería seria con Build Flow Plugin , puede pasar parámetros entre trabajos con la DSL de esta manera:

Suponiendo un parámetro de cadena disponible "CVS_TAG", para pasarlo a otros trabajos:

build("pipeline_begin", CVS_TAG: params[''CVS_TAG'']) parallel ( // will be scheduled in parallel. { build("pipeline_static_analysis", CVS_TAG: params[''CVS_TAG'']) }, { build("pipeline_nonreg", CVS_TAG: params[''CVS_TAG'']) } ) // will be triggered after previous jobs complete build("pipeline_end", CVS_TAG: params[''CVS_TAG''])

Sugerencia para mostrar variables / params disponibles:

// output values out.println ''------------------------------------'' out.println ''Triggered Parameters Map:'' out.println params out.println ''------------------------------------'' out.println ''Build Object Properties:'' build.properties.each { out.println "$it.key -> $it.value" } out.println ''------------------------------------''



Al leer las respuestas, no veo otra opción que me guste, así que la ofreceré también. Me encanta la parametrización de trabajos, pero no siempre se escala bien. Si tiene trabajos que no están directamente aguas abajo del primer trabajo, pero más abajo en la tubería, realmente no desea parametrizar cada trabajo en la tubería para poder pasar los parámetros completamente. O si tiene una gran cantidad de parámetros utilizados por una variedad de otros trabajos (especialmente aquellos que no están necesariamente vinculados a un trabajo primario o maestro), nuevamente la parametrización no funciona.

En estos casos, prefiero dar salida a los valores a un archivo de propiedades y luego inyectar eso en cualquier trabajo que necesite usando el complemento EnvInject . Esto se puede hacer de forma dinámica, que es otra forma de resolver el problema a partir de otra respuesta anterior donde aún se usaban trabajos parametrizados. Esta solución escala muy bien en muchos escenarios.


Creo que la respuesta anterior necesita alguna actualización:

Estaba intentando crear un directorio dinámico para almacenar mis artefactos de construcción en sentido ascendente, así que quería pasar mi número de compilación de trabajo en sentido ascendente a trabajo en sentido descendente. Probé los pasos anteriores pero no pude hacerlo funcionar. Así es como funcionó:

  1. Copié los artefactos de mi trabajo actual usando el plugin copy artifacts.
  2. En la acción de compilación posterior del trabajo en sentido ascendente, agregué la variable como "SOURCE_BUILD_NUMBER = $ {BUILD_NUMBER}" y la configuré para activar el trabajo en sentido descendente.
  3. Todo funcionó, excepto que mi trabajo indirecto no pudo obtener $ SOURCE_BUILD_NUMBER para crear el directorio.
  4. Así que descubrí que para usar esta variable tengo que definir la misma variable en el trabajo de bajada como una variable de parámetro como en esta imagen a continuación:

Esto se debe a que la nueva versión de jenkins también requiere que defina la variable en el trabajo indirecto. Espero que sea útil.


La respuesta aceptada aquí no funciona para mi caso de uso. Necesitaba poder crear dinámicamente parámetros en un trabajo y pasarlos a otro. Como Mark McKenna menciona, aparentemente no hay forma de exportar una variable desde un paso de compilación de shell a las acciones de compilación posteriores.

Logré una solución utilizando el Complemento disparador parametrizado escribiendo los valores en un archivo y usando ese archivo como los parámetros para importar a través de ''Agregar acción posterior a la construcción'' -> ''Activar compilación parametrizada ...'' y luego seleccionando ''Añadir parámetros'' - > ''Parámetros del archivo de propiedades''.


Me enfrenté al mismo problema cuando tuve que pasar una versión de pom a un trabajo Rundeck corriente abajo.

Lo que hice fue usar la inyección de parámetros a través de un archivo de propiedades como tal:

1) Crear propiedades en el archivo de propiedades a través de shell:

Desarrollar acciones:

  • Ejecute un script de shell
  • Inyectar variables de entorno

Ej .: definición de propiedades

2) Pasar propiedades definidas al trabajo en sentido descendente: Acciones de compilación posterior:

  • Activar la construcción parametrizada en otro proyecto
  • Agregar parámetros: parámetros de compilación actuales
  • Agregar parámetros: parámetros predefinidos

Ejemplo: envío de propiedades

3) Entonces era posible usar $ POM_VERSION como tal en el trabajo Runde Run downstream.

/! / Jenkins Version: 1.636

/! / Por alguna razón, al crear la creación desencadenada, era necesario agregar la opción ''Parámetros de compilación actuales'' para pasar las propiedades.




Solo agregue mi respuesta además de la de Nigel Kirby ya que aún no puedo hacer ningún comentario:

Para pasar un parámetro creado dinámicamente, también puede exportar la variable en el mosaico ''Ejecutar Shell'' y luego pasarla a través de ''Desencadenar la creación parametrizada en otros proyectos'' => ''Parámetros predefinidos'' => dar ''YOUR_VAR = $ YOUR_VAR''. Mi equipo usa esta característica para pasar la versión del paquete npm desde el trabajo de compilación a los trabajos de implementación

ACTUALIZACIÓN: arriba solo funciona para los parámetros inyectados de Jenkins, el parámetro creado a partir del shell aún necesita usar el mismo método. p.ej. repita YOUR_VAR = $ {YOUR_VAR}> variable.properties y pase ese archivo corriente abajo


Ver mi respuesta en esta otra publicación:

Funcionó para mí (los parámetros deben especificarse en ambos trabajos, no solo en el trabajo principal)

https://.com/a/40348900/2010136