Trabajos Jenkins y multi-configuración (matrix)


¿Por qué hay dos tipos de trabajos para Jenkins, tanto el proyecto de configuración múltiple como el proyecto de estilo libre? Leí en alguna parte que una vez que eliges uno de ellos, no puedes convertir al otro (fácilmente). ¿Por qué no elegiría siempre el proyecto multi-configuración para estar seguro de futuros cambios?

Me gustaría configurar una compilación para un proyecto de construcción tanto en Windows y Unix (y otras plataformas también). Encontré esta pregunta ), que pregunta lo mismo, pero realmente no entiendo la respuesta. ¿Por qué necesitaría tres proyectos matrix (y no tres proyectos de estilo libre), uno para cada plataforma? ¿Por qué no puedo mantenerlos todos en una matriz, con plataformas y (por ejemplo) versión gcc en un eje y (mi) versiones de software en el otro?

También leí esta entrada de blog, pero eso construye todo en la misma máquina, con solo diferentes versiones de Python.

Así que, en resumen: ¿cómo la mayoría de la gente configura un proyecto multi-configuración ¿dirigirse a muchas plataformas diferentes?

Author: Community, 2011-09-22

9 answers

Los dos tipos de trabajos tienen funciones separadas:

  • Trabajos de estilo libre: estos le permiten construir su proyecto en un solo equipo o etiqueta (grupo de equipos, por ejemplo, "Windows-XP-32").
  • Trabajos de configuración múltiple: estos le permiten construir su proyecto en varios equipos o etiquetas, o una mezcla de los dos, por ejemplo, Windows-XP, Windows-Vista, Windows-7 y RedHat - útil para verificar la compatibilidad o la construcción para múltiples plataformas (qt los programas?)

Si tiene un proyecto que desea compilar en Windows y Unix, tiene dos opciones:

  • Cree un trabajo de estilo libre separado para cada configuración, en cuyo caso debe mantener cada uno individualmente
  • Tiene un trabajo de configuración múltiple y selecciona 2 (o más) etiquetas/ordenadores/esclavos-1 para Windows y 1 para Unix. En este caso, solo tiene que mantener un trabajo para la compilación

Puede mantener su gcc versiones en un eje y versiones de software en otro. No hay razón para que no puedas hacerlo.

La pregunta que enlaza tiene un punto justo, pero uno que no se relaciona directamente con su pregunta: en su caso, tenía un trabajo de configuración múltiple A, que-en caso de éxito - activó otro trabajo B. Ahora, en un trabajo de configuración múltiple, si falla una de las configuraciones, falla todo el trabajo (obviamente, ya que desea que su proyecto se compile correctamente en todos sus configuraciones).

En mi humilde opinión, para construir el mismo proyecto en múltiples plataformas, la mejor manera de hacerlo es usar un trabajo de estilo multi-configuración.

 42
Author: Sagar,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-01-21 14:01:54

Otra opción es usar un paso de compilación de python para verificar el sistema operativo actual y luego llamar a un script de configuración o compilación apropiado. En el script python, puede guardar el entorno actualizado en un archivo e inyectar el entorno de nuevo utilizando el complemento EnvInject para los pasos de compilación posteriores. Dependiendo del tamaño de su entorno de compilación, también podría usar una herramienta de compilación multiplataforma como SCons.

 6
Author: Michael,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-09-29 03:38:08

Una opción es usar el eje definido por el usuario combinado con esclavos (windows, linux,...), por lo que necesita agregar un filtro para cada combinación y usar el plugin Condicional BuildStep para establecer el paso de compilación específico para cada plataforma(Executar shell, Windows command,...)

Este enlace tiene un tutorial, pero está en portugués, pero es fácil de trabajar en base a la imagen... http://manhadalasanha.wordpress.com/2013/06/20/projeto-de-multiplas-configuracoes-matrix-no-jenkins/

 4
Author: pauloremoli,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-06-21 01:55:19

Puede crear un script (por ejemplo, build) y un archivo por lotes (por ejemplo, build.bat) que se registran con su código fuente. En Jenkins en tu paso de compilación puedes llamar a WORKSPACE WORKSPACE/build - Windows ejecutará build.bat mientras que Linux ejecutará build.

 3
Author: decocijo,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-07-10 15:40:02

Puede usar la variable que jenkins crea cuando define un eje de matriz de configuración. Por ejemplo: Crea un eje esclavo con el nombre OSTYPE y comprueba los dos esclavos (Windows y Linux). A continuación, cree dos pasos de compilación separados y compruebe la variable de entorno OSTYPE.

Podría usar un lenguaje de script mejorado, como python, que es multiplataforma y puede lograr la misma funcionalidad independientemente del nombre de los esclavos y en un solo paso de compilación.

 2
Author: Lucas Ces,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-01-26 23:16:07

Si vas por la ruta de la matriz con Windows y algo más, querrás el complemento XShell. Usted acaba de crear sus dos scripts de compilación como " build.bat "para cmd y "build" para bash, y dile a XShell que ejecute "build". La correcta se ejecutará en cada caso.

 2
Author: Todd Greer,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-10-19 03:52:57

Un truco para ejecutar archivos por lotes en Windows y scripts de shell en Unix:

En Unix, haga que los archivos por lotes salgan con 0 estado de salida:

ln -s /bin/true /bin/cmd

En Windows, busca un true.exe, nómbralo sh.exe y colócalo en algún lugar de la RUTA.

Alternativamente, si tiene algún sh.exe instalado en Windows (Desde Cygwin, Git u otra fuente), agregue esto a la parte superior del script de shell en Jenkins:

[ -n "$WINDIR" ] && exit 0

 1
Author: larsch,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-09-20 11:05:34

¿Por qué no elegirías siempre el tipo de trabajo de configuración múltiple?

Algunas razones vienen a la mente:

  1. Porque los trabajos deben ser fáciles de crear y configurar. Si es difícil configurar cualquier trabajo en su entorno, es probable que esté haciendo algo mal fuera del alcance del trabajo de jenkins. Si estás contento de haber logrado crear ese trabajo y finalmente funciona, y eres reacio a hacer todo este trabajo de nuevo, ahí es donde deberías tratar de mejorar.
  2. Porque los trabajos de configuración múltiple son más complejos. Por lo general, requieren que piense tanto en el trabajo principal como en las diferentes variables de trabajo secundario, y tienden a crecer en complejidad hasta un nivel más allá de ser manejables. Así que en un solo escenario de trabajo, probablemente desperdiciarías pensamientos en no usar esa complejidad, y al extender las variables de compilación, las cosas podrían crecer en la dirección equivocada. Sugeriría usar los trabajos simples como predeterminados, y los trabajos de configuración múltiple solo si hay una necesidad de múltiples configuraciones.
  3. Porque ejecutar trabajos de configuración múltiple podría necesitar más espacios de trabajo en los esclavos que trabajos individuales. Siempre habrá un trabajo maestro que se ejecuta en una ranura especial e invisible (eso no es un problema por sí mismo) y desencadena los trabajos secundarios, pero si estos trabajos secundarios desencadenan por sí mismos trabajos secundarios, puede terminar fácilmente en un punto muerto si hay más trabajos secundarios que espacios, y algunos trabajos secundarios activan nuevamente trabajos secundarios que luego no pueden ejecutarse porque no hay más espacios abiertos. Este problema puede ser eludido usando alguna configuración en los esclavos, pero está presente y solo puede ocurrir si varios trabajos múltiples se ejecutan simultáneamente.

Así que en esencia: El trabajo de configuración múltiple es una cosa más compleja, y debido a que la complejidad debe evitarse a menos que sea necesario, el trabajo de estilo libre regular es un mejor valor predeterminado.

 1
Author: Sven,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-06-30 12:34:45

Si desea seleccionar en qué esclavo ejecuta el trabajo, debe usar el proyecto de configuración múltiple (de lo contrario, no podrá seleccionar/limitar los esclavos en los que lo ejecuta-hay tres formas de hacerlo, sin embargo, las he probado todas (El complemento Tie funciona solo para el trabajo maestro, Restringir en las Opciones Avanzadas del proyecto no es un disparador seguro, así que desea usar el eje esclavo que se ha demostrado que funciona correctamente hoy.)

 0
Author: igraczech,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-08-17 13:34:13