Describa el mejor entorno de implementación con el que ha trabajado [cerrado]

8

La prueba de Joel incluye la pregunta:

¿Se puede hacer una acumulación en un solo paso?

¿Qué es importante, pero me pregunto, qué tan optimizados han sido algunos de los procesos de implementación ?

Se aplica todo el software, desde el encogimiento hasta la web: ¿cuál es el mejor entorno de implementación con el que ha trabajado y qué pasos se han involucrado?

Steven Evers
fuente
¿La prueba de Joel incluye la pregunta: "¿hay una piscina privada al aire libre y canchas de tenis disponibles para los empleados?"
1
@Pierre 303 No, pero si tienes uno, ¿dónde puedo enviar mi currículum? :)
Steven Evers
swift.com : envíe su CV en la sede central en Bélgica
Lo más increíble que he visto.

Respuestas:

6

Es el entorno que he establecido en mi empresa, y estoy trabajando en este momento.

Descripción del entorno.

Somos un equipo de 4 desarrolladores , trabajando en un proyecto de escritorio Java . El código fuente está bajo Mercurial , con el repositorio principal alojado en nuestro servidor de desarrollo. Usamos principalmente TortoiseHg para trabajar con Mercurial. Los proyectos que abrimos provienen de BitBucket . El proyecto está construido con Maven . El IDE que utilizamos es Netbeans , que funciona de manera impresionante con Maven (también funciona bien con Mercurial).

Nuestro servidor de desarrollo ejecuta Archiva , que es un repositorio proxy de Maven. Usamos maven para construir el proyecto, pero también lo usamos para ejecutarlo (mvn exec), para desplegar los artefactos generados en Archiva (lanzamiento de mvn) y para generar un ensamblaje a partir de los artefactos alojados por Archiva (ensamblaje de mvn).

También tenemos un rastreador de errores de Redmine , y está al tanto de los repositorios de Mercurial. Utilizamos un cliente RSS para estar informado de la actividad del proyecto (de Redmine y Mercurial). También tenemos un servidor Jabber para enviar mensajes y archivos entre nosotros.

Configuramos un servidor Hudson (integración continua) y un servidor Sonar (métricas de código). Pero en la práctica realmente no lo usamos.

Tenemos la opción de usar Windows o Linux

Pasos para hacer un lanzamiento

Ejemplo para lanzar una versión 1.1.3

# tags the VCS, updates all the version numbers in the maven config file
mvn --batch-mode release:prepare -DreleaseVersion=1.1.3 -DdevelopmentVersion=1.1.4-SNAPSHOT
# performs a clean build, runs all tests, deploys to the server
mvn release:perform
# creates a unique jar (the final product) from the previously deployed artifacts (no recomilation involved)
<update the version number in a config file to 1.1.3>
mvn assembly:assembly
barjak
fuente
+1 para lanzamiento de mvn: realizar
Fil
+1 por tener Sonar en tu proceso de construcción. -1 por no usarlo.
mhaller
En realidad, simplemente no sé qué hacer con los datos que me da Sonar. Mirar las estadísticas de la base de código es divertido, pero no me ayuda en mi trabajo diario. Ah, y no me gustan las herramientas de análisis estático: producen demasiados falsos positivos para ser útiles.
barjak
3

Utilicé fabric para configurar la implementación en mi nuevo inicio.

Actualizar el servidor en vivo es tan simple como:

fab prod upgrade

Esto obtiene toda la fuente más reciente, abre una página de mantenimiento, migra la base de datos, configura el nuevo código, obtiene todas las dependencias, detiene / inicia todo, etc. Toda la información pertinente (contraseñas, nombres de usuario, etc.) Todos preguntaron por adelantado.

Solo ejecuto el comando, ingreso información y voy a tomar una taza de café. Todo está vivo para cuando regrese.

Sam Dolan
fuente
Eso suena celestial.
Steven Evers
2

No estoy seguro de estar de acuerdo con Joel en esto: ¿seguramente ningún paso es mejor que uno?

Usamos Hudson para hacer un script de nuestras compilaciones (continuamente en Mac y Windows), incluyendo instaladores de construcción e imágenes de CD por las pocas veces que enviamos una caja real. Siempre probamos desde el instalador en QA.

También usamos Hudson para copiar los instaladores al área "beta" de nuestro sitio web en vivo una vez al día.

Esencialmente, podemos implementar a los usuarios todos los días sin ningún paso. Cuando hacemos un lanzamiento oficial, simplemente cambiamos los nombres de archivo de los instaladores en CMS para que los instaladores beta actuales sean los lanzamientos, y cambiamos el script de compilación Ant para cambiar al nuevo número de versión (que se convierte en la nueva beta).

Tener esto configurado y funcionando hace que el día de lanzamiento sea un completo no evento (que es exactamente lo que debería ser). ¡No hemos tenido un error en el día del lanzamiento desde hace un tiempo (solía ser algo habitual)!

Ofertas
fuente
¿Cuándo se activa la compilación del instalador, si no de forma manual? Periódicamente? ¿En un evento de compromiso?
barjak
1

En uno de mis clientes, trabajamos en Rails y tenemos todo configurado para que la implementación se extraiga de git. Sin embargo, no "construimos", ya que es Rails.

Entonces el proceso de implementación es algo así como

git checkout review
git merge whatever-that-was
git push
cap review deploy:migrations

La mezcla entre Capistrano y GIT funciona bastante bien.

Por supuesto, más secuencias de comandos serían para omitir algunos de estos pasos.

Dan Rosenstark
fuente
1

Mi flujo de trabajo actual es así.

  1. Desarrollar en VM local
  2. Probar, confirmar cambios, empujar a github
  3. ssh en EC2 y sacar cambios

Todo esto se puede incluir en un solo paso.

Mccotton
fuente
8
Puedes escribir el paso 1, ¿en serio? :)
barjak
repositorio github público o privado? Si es esto último, ¿cuál es su experiencia?
Estoy usando un repositorio público, pero para un proyecto anterior estoy usando Kiln de fogcreek como un repositorio privado.
mcotton
@ ThorbjørnRavnAndersen: estoy usando repositorios privados de github. Funciona bien, exactamente igual que uno público, excepto que solo usted puede acceder a él. :)
Bjarke Freund-Hansen
1

Tenemos una aplicación Java Web Start: estamos a punto de reconstruir el procedimiento de implementación para que sea un archivo WAR y el archivo JNLP se adapte a la URL solicitada cuando los usuarios lo soliciten.

Espero que sea extremadamente suave.

Últimamente hemos usado mucho git. La idea de registrar implementaciones en repositorios de git para que pueda simplemente pedirle a git que compruebe la versión que desea ejecutar. Actualizaciones de fondo, tiempo de pago muy corto para actualizar archivos reales, tiempo de pago muy corto para volver a una versión anterior en caso de problemas. Creo que podría funcionar muy bien para nosotros.


fuente
1

Es cierto que ahora está bastante anticuado, pero solía tener los siguientes pasos para implementar mi código hace muchas lunas que encontré que era el mejor que he tenido:

  1. El check-in de mi código cambia a Visual SourceSafe.
  2. Obtenga la última versión en la máquina de mi jefe.
  3. Compile la solución que produjo algunas DLL.
  4. Muestre que el nuevo código funcionó como debería.
  5. Desconecte el servidor de producción de Internet para actualizarlo sin interferencias.
  6. Copie los binarios en el servidor de producción.
  7. Inicia IIS.
  8. Vuelva a marcar en Internet en la línea ISDN utilizada.

Esto fue a fines de la década de 1990 cuando estaba programando en Visual C ++ en NT 4.0 para un punto-com. La mayoría de los procesos de implementación desde entonces se han vuelto más complicados al tener tareas nAnt y otras cosas adicionales, como tratar con servidores de producción con equilibrio de carga, mientras que en el pasado solo teníamos una caja de producción.

Por supuesto, pasar el proceso a un ingeniero de lanzamiento es mejor, pero no es lo mismo que si pusiera el código en la naturaleza.

JB King
fuente
0

No por nada, pero hacer clic derecho en una aplicación web ASP.NET y seleccionar Publicar fue una sorpresa agradable y agradable cuando tuve que implementar una aplicación. De acuerdo, tuve que configurar el directorio virtual y tal en IIS de antemano, pero la implementación de nuevas versiones está a unos pocos clics de distancia.

Código difícil
fuente