¿Debería el script de implementación ser un artefacto de la compilación?

13

Este es un proyecto web escrito en Java.

Por lo tanto, estoy escribiendo la compilación y los scripts de implementación. Para crear el build, utilicé ant. La compilación continua se realiza con Jenkins.

La construcción genera 3 artefactos diferentes:

  1. El archivo de guerra
  2. Un zip con diseños
  3. Un zip con imágenes

Hasta ahora, todo bien, pero ahora necesito escribir el script de implementación, que debería:

  • Despliega la guerra (artefacto 1) en el tomcat que se ejecuta en servidor 1
  • Coloque el artefacto 2 en servidor 1 en un directorio específico
  • Coloque el artefacto 3 en servidor 2 en un directorio específico

Estaba hablando con mi colega y él dijo que también deberíamos generar un artefacto (tal vez deploy.xml ) que implemente estos artefactos cuando se coloquen en el servidor correcto.

Así que habría otro script, que sería:

  • Descargue los artefactos de Jenkins
  • scp a cada servidor y coloca el deploy.xml allí
  • invocar de forma remota el archivo deploy.xml

Lo que me hace sentir un poco incómodo es el hecho de tener deploy.xml como artefacto de construcción. La motivación detrás de esto sería poder realizar una implementación sin necesidad de tener acceso a los repositorios VCS, por lo que una compilación sería autónoma, es decir, cualquier compilación podría entrar en producción solo con lo generado por Jenkins. p>

¿Dónde se deben colocar los scripts de implementación? ¿Deben ser solo en el VCS o también deben ser artefactos de compilación?

    
pregunta Edison Gustavo Muenz 14.12.2011 - 17:48

2 respuestas

6

Mi experiencia es que todo lo que pueda se puede automatizar debería ser. Si puede describirlo como paso 1, paso 2, .... , entonces debería ser un script. Si la secuencia de comandos se puede generar automáticamente para incluir información específica de la compilación (por ejemplo, la etiqueta de revisión), eso es lo que debe hacer. Esto no es por ser perezoso, sino por ser predecible y reproducible .

Nota bene: también debe tener un revert script generado automáticamente que cualquier persona en el equipo puede usar en caso de que el script de implementación generado automáticamente se vuelva loco y controle la producción. servidor.

    
respondido por el Peter Rowell 14.12.2011 - 18:23
3

Todo lo que escribió Peter Rowell es correcto, además yo lo haría:

Para el archivo de script de implementación

  • si fue escrito por alguien, debe estar en el control de versiones.
  • si se generó y se puede generar de nuevo, generalmente no entra en el control de versiones.

Para el proceso de implementación:

  • Si desea que sus artefactos sean autocontenidos y se pueda hacer fácilmente, entonces el archivo podría ser un artefacto de compilación, lo que significa que está empaquetado con el resultado de la compilación de tal manera que sea utilizable para la implementación.
  • Por otro lado, las implementaciones se vuelven cada vez más complejas, por lo que tarde o temprano necesitará un programa dedicado (lea un código) que haga la implementación y un artefacto de compilación Jenkins ya no es autónomo.

Esto depende más bien de su proceso y de cómo quiera manejar las implementaciones.

    
respondido por el Peter Kofler 17.12.2011 - 00:30

Lea otras preguntas en las etiquetas