Saltar al contenido

¿Cómo ejecutar el mismo trabajo varias veces en paralelo con Jenkins?

Comprende el código correctamente previamente a adaptarlo a tu trabajo y si tquieres aportar algo puedes comentarlo.

Solución:

Entiendo que ha investigado el complemento Build Flow, pero no estoy seguro de por qué lo ha descartado. Tal vez pueda señalar los agujeros en mi propuesta.

Suponiendo que tenga suficientes ejecutores en su sistema para ejecutar trabajos en paralelo, creo que el complemento Build Flow y el complemento Build Flow Test Aggregator pueden hacer lo que desee.

  • El complemento Build Flow admite la ejecución de trabajos en paralelo. No veo ninguna razón por la que Build Flow no pueda programar su trabajo “secundario” para que se ejecute en paralelo con diferentes parámetros.

  • El agregador de prueba de flujo de compilación toma los resultados de las compilaciones programadas de un trabajo de flujo de compilación, por lo que su trabajo “secundario” deberá publicar sus propios resultados de prueba.

  • Deberá configurar su trabajo “secundario” para que pueda ejecutarse en paralelo marcando “Ejecutar compilaciones simultáneas si es necesario” en la configuración del trabajo.

  • Cualquiera que sea el conjunto de esclavos que proporcione la conexión a los dispositivos integrados, necesitará suficientes ejecutores para ejecutar sus trabajos en paralelo.


Actualizar: con la definición simple de flujo de compilación:

parallel (
   build("dbacher flow child", VALUE: 1) ,
   build("dbacher flow child", VALUE: 2) ,
   build("dbacher flow child", VALUE: 3) ,
   build("dbacher flow child", VALUE: 4) 
)

Obtengo la salida:

parallel 
    Schedule job dbacher flow child
    Schedule job dbacher flow child
    Schedule job dbacher flow child
    Schedule job dbacher flow child
    Build dbacher flow child #5 started
    Build dbacher flow child #6 started
    Build dbacher flow child #7 started
    Build dbacher flow child #8 started
    dbacher flow child #6 completed 
    dbacher flow child #7 completed 
    dbacher flow child #5 completed 
    dbacher flow child #8 completed 

El historial de trabajos muestra que los cuatro trabajos están programados con segundos de diferencia. Pero el paso de compilación del trabajo contiene un retraso artificial (suspensión) que evitaría que una sola compilación se complete tan rápidamente.


Actualización 2: Aquí hay un ejemplo de cómo generar la lista de tareas paralelas dinámicamente desde otra estructura de datos:

// create a closure for the deploy job for each server 
def paramValues = (1..4)
def testJobs = [] 
for (param in paramValues)  
  def jobParams = [VALUE: param] 
  def testJob =  
    // call build 
    build(jobParams, "dbacher flow child") 
   
  println jobParams
  testJobs.add(testJob) 
 

parallel(testJobs)

La lista que se pasa a paralelo es una lista de cierres que llaman a la compilación con parámetros únicos. Tenía que asegurarme de definir los parámetros del trabajo fuera de la función de cierre para garantizar que los trabajos se programaran por separado.

Copié la sintaxis de otra respuesta y este hilo en la lista de correo de Jenkins.

Asegúrese de que la cantidad de ejecutores en la configuración Administrar Jenkins -> Administrar nodos sea mayor que la cantidad de trabajos individuales en el proyecto MultiJob. Por defecto, supongo que es 2. Por lo tanto, debemos aumentarlo.

Agradecemos que desees añadir valor a nuestra información asistiendo con tu veteranía en las crónicas.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *