plugins - steps - jenkins pipeline tutorial español
¿Cómo puedo hacer que un trabajo en Jenkins comience después de que varios trabajos ascendentes simultáneos tengan éxito? (6)
Con el fin de obtener la retroalimentación más rápida posible, ocasionalmente queremos que los trabajos de Jenkins se ejecuten en Paralelo. Jenkins tiene la capacidad de iniciar múltiples trabajos en sentido descendente (o ''fork'' la tubería) cuando termina un trabajo. Sin embargo, Jenkins no parece tener ninguna forma de hacer un trabajo indirecto, solo el comienzo de todas las ramas de ese tenedor tiene éxito (o ''unirse'' al tenedor nuevamente).
Jenkins tiene el botón "Construir después de que se hayan creado otros proyectos", pero interpreto esto como "iniciar este trabajo cuando termina cualquier trabajo de subida" (no "iniciar este trabajo cuando todos los trabajos anteriores tienen éxito").
Aquí hay una visualización de lo que estoy hablando. ¿Alguien sabe si existe un complemento para hacer lo que estoy buscando?
Editar:
Cuando originalmente publiqué esta pregunta en 2012, la respuesta de Jason (los complementos Join y Promoted Build) fue la mejor y la solución que elegí.
Sin embargo, la respuesta de dnozay (el plugin Build Flow) se hizo popular aproximadamente un año después de esta pregunta, que es una respuesta mucho mejor. Por lo que vale, si la gente me hace esta pregunta hoy, ahora lo recomiendo.
Plugin Pipeline
Puede usar el plugin Pipeline (anteriormente workflow-plugin
).
Viene con muchos ejemplos , y puedes seguir este tutorial .
p.ej
// build
stage ''build''
...
// deploy
stage ''deploy''
...
// run tests in parallel
stage ''test''
parallel ''functional'': {
...
}, ''performance'': {
...
}
// promote artifacts
stage ''promote''
...
Plugin de compilación de flujo
También puede usar el plugin Build Flow . Es simplemente increíble, pero está en desuso (desarrollo congelado).
Configurando los trabajos
Crear trabajos para:
- construir
- desplegar
- pruebas de rendimiento
- pruebas funcionales
- promoción
Configurando el flujo ascendente
en el sentido ascendente (aquí
build
) crea un artefacto único, por ejemplo:echo ${BUILD_TAG} > build.tag
archivar el artefacto
build.tag
.- registrar huellas dactilares para rastrear el uso del archivo; si un trabajo copia el mismo archivo
build.tag
y registra las huellas dactilares, podrá hacer un seguimiento del padre. - Configure para obtener una promoción cuando el trabajo de
promotion
sea exitoso.
Configuración de los trabajos indirectos
- Uso 2 parámetros
PARENT_JOB_NAME
yPARENT_BUILD_NUMBER
Copie los artefactos del trabajo de
build
ascendente utilizando el complemento Copiar artefacto- Nombre del proyecto =
${PARENT_JOB_NAME}
- Which build =
${PARENT_BUILD_NUMBER}
- Artefactos para copiar =
build.tag
- Nombre del proyecto =
Registro de huellas dactilares; eso es crucial.
Configuración del trabajo de promoción aguas abajo
Haga lo mismo que lo anterior, para establecer una relación río arriba-río abajo. No necesita ningún paso de compilación. Puede realizar acciones adicionales posteriores a la construcción como "Oye QA, es tu turno".
Crear un trabajo de flujo de construcción
// start with the build
parent = build("build")
parent_job_name = parent.environment["JOB_NAME"]
parent_build_number = parent.environment["BUILD_NUMBER"]
// then deploy
build("deploy")
// then your qualifying tests
parallel (
{ build("functional tests",
PARENT_BUILD_NUMBER: parent_build_number,
PARENT_JOB_NAME: parent_job_name) },
{ build("performance tests",
PARENT_BUILD_NUMBER: parent_build_number,
PARENT_JOB_NAME: parent_job_name) }
)
// if nothing failed till now...
build("promotion",
PARENT_BUILD_NUMBER: parent_build_number,
PARENT_JOB_NAME: parent_job_name)
// knock yourself out...
build("more expensive QA tests",
PARENT_BUILD_NUMBER: parent_build_number,
PARENT_JOB_NAME: parent_job_name)
buena suerte.
Creo que el complemento de flujo de trabajo ahora se llama Complemento de canalización y es la solución preferida (actual) a la pregunta original, inspirada en el Plugin de flujo de compilación. También hay un Tutorial de Inicio en GitHub.
El plugin Multijob funciona maravillosamente para ese escenario. También resulta útil si desea que un solo trabajo "padre" inicie varios trabajos "secundarios" pero aún así pueda ejecutar cada uno de ellos manualmente, por sí mismo. Esto funciona creando "fases", a las cuales agrega 1 a n trabajos. La compilación solo continúa cuando se completa toda la fase, por lo que si una fase es un trabajo múltiple, todos deben completar antes de que se ejecute el resto. Naturalmente, es configurable si la construcción continúa si hay una falla dentro de la fase.
Hay dos soluciones que he usado para este escenario en el pasado:
Use el Plugin de unión en su trabajo de "implementación" y especifique "promover" como el trabajo específico. Tendría que especificar "Pruebas funcionales" y "Pruebas de rendimiento" como trabajos unidos e iniciarlos de alguna manera, después de la compilación. El complemento del disparador parametrizado es bueno para esto.
Utilice el Complemento de compilaciones promocionadas en su trabajo de "implementación", especifique una promoción que funcione cuando se completen trabajos en sentido descendente y especifique los trabajos de prueba funcionales y de rendimiento. Como parte de la acción de promoción, active el trabajo de "promoción". Aún debe iniciar los dos trabajos de prueba desde "implementar"
Hay un aspecto CRÍTICO en estas dos soluciones: las huellas dactilares deben usarse correctamente. Esto es lo que encontré:
- El trabajo de "compilación" debe ORIGINAR un nuevo archivo de huellas dactilares. En otras palabras, tiene que tomar una huella dactilar de un archivo que, según cree Jenkins, fue originado por el trabajo inicial. Verifique el enlace "Ver huellas digitales" del trabajo para verificar esto.
- Todos los trabajos vinculados en sentido descendente (en este caso, "implementar", "Pruebas funcionales" y "Pruebas de rendimiento") deben obtener y tomar las huellas digitales de este mismo archivo. El complemento Copy Artifacts es ideal para este tipo de cosas.
- Tenga en cuenta que algunos complementos le permiten cambiar el orden de las huellas digitales y el inicio del trabajo en sentido descendente; en este caso, la toma de huellas dactilares DEBE ocurrir antes de que un trabajo aguas abajo tome las huellas dactilares del mismo archivo para asegurarse de que el ORIGEN de la huella dactilar esté correctamente configurado.
Jenkins jenkins-ci.org/content/workflow-plugin-10 recientemente una asistencia de primera clase para el flujo de trabajo.
Las respuestas de jason y dnozay son lo suficientemente buenas. Pero en caso de que alguien esté buscando una forma sencilla, solo use el plugin JobFanIn .