wow titulos titulo matahordas logro listado leeroy leeeeeeeeeeeeeroy inquisidor hacer ecologista como jenkins

titulos - Jenkins-Ejecución de instancias de una sola compilación al mismo tiempo



titulo inquisidor wow (5)

Jenkins tiene una casilla de verificación: "Ejecutar compilaciones concurrentes si es necesario"

Si marca esta opción, se iniciarán varias compilaciones para un trabajo.

Esto funciona con la casilla de verificación "Esta compilación está parametrizada".

Aún activaría las compilaciones, pasando su A o B como parámetros. Puede utilizar otro trabajo para activarlos o puede hacerlo manualmente a través de un script.

Me gustaría poder ejecutar varias compilaciones del mismo trabajo de Jenkins simultáneamente.

Ejemplo:

  1. Generar [* jenkins_job_1 *]: llama a un script ant con el parámetro ''A''
  2. Generar [* jenkins_job_1 *]: llama a un script ant con el parámetro ''B''
  3. repetir como sea necesario
  4. cada instancia del trabajo se ejecuta simultáneamente, en lugar de a través de una cola.

La razón por la que me gustaría hacer esto es para evitar tener que crear varios trabajos que sean casi idénticos, todos los cuales deberían mantenerse.

¿Hay alguna forma de hacerlo, o quizás otra solución (es decir, crear un trabajo de forma dinámica a partir de un trabajo base y eliminarlo después de que haya finalizado)?


Nada le impide hacer esto usando el DSL de ductos de Jenkins .

Tenemos el mismo canal que se ejecuta en paralelo para modelar cargas combinadas para una aplicación que expone los servicios web, proporciona una base de datos para varias aplicaciones externas, recibe datos a través de varias colas de trabajo y tiene una interfaz gráfica de usuario. El negocio nos da requisitos no funcionales (NFR) que nuestra aplicación debe cumplir, lo que garantiza su capacidad de respuesta incluso en momentos difíciles.

Las diferentes instancias de la tubería se ejecutan con diferentes parámetros. La primera instancia podría ser WS_Load , la segunda GUI_Load y la tercera Daily_Update_Load , modelando una gran cola de datos que necesita procesamiento dentro de un cierto marco de tiempo. Se puede agregar más dependiendo de qué combinación de cargas queremos probar.

Otras respuestas han hablado acerca de las casillas de verificación para construcciones concurrentes, pero quería mencionar otro problema: la contención de recursos.

Si su tubería usa archivos temporales o almacena archivos entre etapas de tubería, las instancias pueden terminar tirando de la alfombra debajo de los pies de cada uno. Por ejemplo, puede terminar eliminando un archivo en una instancia concurrente mientras intenta leer el mismo archivo en otra. Usamos el siguiente código para asegurar que los escondites y los nombres de archivos temporales sean únicos por instancia concurrente:

def concurrentStash(stashName, String includes) { /* make a stash unique to this pipeline and build that can be unstashed using concurrentUnstash() */ echo "Safe stashing $includes in ${concurrentSafeName(stashName)}..." stash name: concurrentSafeName(stashName), includes: includes } def concurrentSafeName(name) { /* make a name or name component unique to this pipeline and build * guards against contention caused by two or more builds from the same * Jenkinsfile trying to: * - read/write/delete the same file * - stash/unstash under the same name */ "${name}-${BUILD_NUMBER}-${JOB_NAME}" } def concurrentUnstash(stashName) { echo "Safe unstashing ${concurrentSafeName(stashName)}..." unstash name: concurrentSafeName(stashName) }

Luego podemos usar concurrentStash stashName y concurrentStash stashName concurrentUnstash stashName y las instancias concurrentes no tendrán conflicto.

Si, por ejemplo, las dos tuberías necesitan almacenar estadísticas, podemos hacer algo como esto para los nombres de archivo:

def statsDir = concurrentSafeName(''stats'')

y luego cada instancia utilizará un nombre de archivo único para almacenar su salida.


Puede seleccionar Generar un proyecto de configuración múltiple (Matrix build) cuando cree el trabajo. Luego, bajo la configuración del trabajo, puede definir la matriz de configuración que le permite especificar uno o más parámetros (ejes) para diferentes construcciones. Con respecto a la ejecución simultánea, debería poder ejecutar tantas compilaciones simultáneas como ejecutores (con la etiqueta adecuada).

Desafortunadamente, el wiki de Jenkins carece de documentación sobre esta configuración. Hay un par de preguntas anteriores de SO, here y here , que pueden proporcionar una pequeña guía. Hubo una publicación "reciente" en el blog sobre la configuración de un trabajo de configuración múltiple para realizar compilaciones en varias plataformas.


Puedes crear una compilación y configurarla con parámetros. Haga clic en la casilla de verificación This build is parameterized y agregue los This build is parameterized deseados en la Configuración de la compilación. Luego puedes disparar construcciones simultáneas usando diferentes parámetros.

Nota al margen: el "Generador This bulk build is parameterized " en Jenkins podría empujarlo a una cola, pero también hay una casilla de verificación This bulk build is parameterized .


Una solución más nueva (y mejor) es el Jenkins Job DSL Plugin .

Lo hemos estado utilizando con gran éxito. Nuestras configuraciones de trabajo ahora son desechables ... podemos configurar una enorme pila de trabajos complicados a partir de algunos archivos geniales y un par de trabajos de plantilla. Es genial.

Me gusta mucho más que las compilaciones de matriz, que fueron complicadas y más difíciles de entender.