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

13

Este es un proyecto web escrito en Java.

Entonces, estoy escribiendo los scripts de compilación y despliegue. Para crear la compilación, usé hormiga. La construcción continua se realiza con Jenkins.

La construcción genera 3 artefactos diferentes:

  1. El archivo de guerra
  2. Una cremallera 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:

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

Estaba hablando con mi colega y me dijo que también deberíamos generar un artefacto (quizás deploy.xml ) que despliegue estos artefactos cuando se coloque en el servidor correcto.

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

  • Descargar los artefactos jenkins
  • scp a cada servidor y coloque el deploy.xml allí
  • invocar remotamente el deploy.xml

Lo que me incomoda un poco es el acto de tener el deploy.xml como un artefacto de compilación. La motivación detrás de esto sería poder realizar una implementación sin necesidad de tener acceso a los repositorios de 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 que generó Jenkins.

¿Dónde se deben colocar los scripts de implementación? ¿Deberían estar solo en el VCS o también deberían ser artefactos de construcción?

Edison Gustavo Muenz
fuente
esta pregunta es buena / que nos hace querer más uno / gustaría poder contestar
Amara

Respuestas:

6

Mi experiencia es que todo lo que se puede automatizar debería ser. Si puede describirlo como paso 1, paso 2, ... entonces debería ser un script. Si el script se puede generar automáticamente para incluir información específica de compilación (por ejemplo, etiqueta de revisión), entonces 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 script de reversión generado automáticamente que pueda ser utilizado por cualquier persona del equipo en caso de que el script de implementación generado automáticamente se vuelva loco y manguee el servidor de producción.

Peter Rowell
fuente
3

Todo lo que Peter Rowell escribió es correcto, además quisiera:

Para el archivo de script de implementación

  • si fue escrito por alguien, debe estar en control de versiones.
  • si se generó y puede generarse nuevamente, 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 algo de código) que realice la implementación y un artefacto de compilación de Jenkins ya no es autónomo.

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

Peter Kofler
fuente