continuous integration - técnicas - Marcar el Jenkins/Hudson en sentido ascendente como fallido si falla el trabajo en sentido descendente
saber trabajar en equipo (4)
Estoy usando el complemento de activación parametrizado para activar una compilación posterior.
¿Cómo especifico que mi trabajo ascendente debería fallar si falla el flujo descendente? El trabajo ascendente es en realidad un trabajo ficticio con parámetros que se pasan al flujo descendente.
Echa un vistazo a la siguiente respuesta: Fail hudson build with groovy script . Puede obtener acceso al trabajo anterior y fallar a su compilación PERO ... tenga cuidado con el hecho de que las acciones posteriores a la compilación de Hudson / Jenkins en este momento no permiten especificar ningún orden: si su secuencia de comandos groovy está especificada además de otras postconstrucciones acciones, y esas acciones afectan el resultado de la compilación (es decir, el análisis de los resultados de la prueba), entonces no podrá actualizar el estado del trabajo en sentido ascendente si Jenkins decide ejecutarlos después de su guión maravilloso.
En el paso de compilación, configure Trigger / Call builds en otros proyectos, elija el trabajo posterior. Seleccione "Bloquear hasta que el proyecto activado termine su construcción". Guarda la configuración por defecto debajo de ella. Esta configuración hará que el trabajo en sentido ascendente falle si el flujo en sentido descendente falla.
este código marcará la generación ascendente inestable / fallida en función del estado del trabajo posterior.
/*************************************************
Description: This script needs to put in Groovy
Postbuild plugin of Jenkins as a Post Build task.
*************************************************/
import hudson.model.*
void log(msg) {
manager.listener.logger.println(msg)
}
def failRecursivelyUsingCauses(cause) {
if (cause.class.toString().contains("UpstreamCause")) {
def projectName = cause.upstreamProject
def number = cause.upstreamBuild
upstreamJob = hudson.model.Hudson.instance.getItem(projectName)
if(upstreamJob) {
upbuild = upstreamJob.getBuildByNumber(number)
if(upbuild) {
log("Setting to ''" + manager.build.result + "'' for Project: " + projectName + " | Build # " + number)
//upbuild.setResult(hudson.model.Result.UNSTABLE)
upbuild.setResult(manager.build.result);
upbuild.save()
// fail other builds
for (upCause in cause.upstreamCauses) {
failRecursivelyUsingCauses(upCause)
}
}
} else {
log("No Upstream job found for " + projectName);
}
}
}
if(manager.build.result.isWorseOrEqualTo(hudson.model.Result.UNSTABLE)) {
log("****************************************");
log("Must mark upstream builds fail/unstable");
def thr = Thread.currentThread()
def build = thr.executable
def c = build.getAction(CauseAction.class).getCauses()
log("Current Build Status: " + manager.build.result);
for (cause in c) {
failRecursivelyUsingCauses(cause)
}
log("****************************************");
}
else {
log("Current build status is: Success - Not changing Upstream build status");
}
Asegúrese de estar usando el paso correcto para ejecutar sus trabajos posteriores; Descubrí que desde que estaba ejecutando el mío como un "paso posterior a la compilación", no tenía la opción "Bloquear hasta que los proyectos activados terminen sus compilaciones". Cambiar eso a "tarea de compilación" en lugar de "tarea de compilación posterior", me permitió encontrar las opciones que está buscando dentro del complemento de activador parametrizado.