Pregunta

O, en realidad, establecer un proceso de construcción cuando, para empezar, no hay mucho de uno implementado.

Actualmente, esa es prácticamente la situación que enfrenta mi grupo.Principalmente desarrollamos aplicaciones web (pero no desarrollamos escritorios en este momento).Las implementaciones de software son feas y difíciles de manejar incluso con nuestras modestas aplicaciones, y hemos tenido demasiados problemas en los dos años que he sido parte de este equipo (y compañía).Ya es hora de hacer algo al respecto, y el resultado es que podremos matar dos pájaros de Joel Test de un tiro (construcciones diarias y de un solo paso, ninguna de las cuales existe de ninguna forma).

Lo que busco aquí es una idea general sobre el tipo de cosas que necesito hacer o pensar, de parte de personas que han estado en el desarrollo de software durante más tiempo que yo y que también tienen cerebros más grandes.Estoy seguro de que serán la mayoría de las personas que publican actualmente en la versión beta.

Herramientas relevantes:Visual Build Source Safe 6.0 (lo sé, pero no puedo hacer nada sobre si usamos o no Source Safe en este momento.Esa podría ser la próxima batalla que pelee.)

Tentativamente, tengo un proyecto Visual Build que hace esto:

  1. Obtenga la fuente y colóquela en el directorio local, incluidas las DLL necesarias para el proyecto.
  2. Obtenga los archivos de configuración y cámbieles el nombre según sea necesario (los almacenamos en un subdirectorio especial que no forma parte de la aplicación real y se nombran según su uso).
  3. Construir usando Visual Studio
  4. Precompilar usando la línea de comando, copiando en lo que será un directorio de "compilación"
  5. Copiar a destino.
  6. Obtenga los recursos adicionales necesarios, principalmente cosas como documentos, imágenes e informes asociados con el proyecto (y colocados en el directorio desde el paso 5).Hay muchas de estas cosas y no quería incluirlas anteriormente.Sin embargo, solo voy a copiar los elementos modificados, por lo que tal vez sea irrelevante.No estaba seguro de si realmente quería incluir estas cosas en los pasos anteriores.

Todavía necesito convencerme de que cierre sesión en Visual Build para todo esto, pero no estoy en un punto en el que necesite hacerlo todavía.

¿Alguien tiene algún consejo o sugerencia que hacer?Actualmente no estamos utilizando un proyecto de implementación, lo tomaré en cuenta.Supongo que eliminaría algunos de los pasos necesarios en esta compilación (como el intercambio de web.config).

¿Fue útil?

Solución

Al emprender un proyecto que nunca ha tenido un proceso de construcción automatizado, es más fácil hacerlo en pasos.No intente tragar demasiado de una vez, de lo contrario puede resultar abrumador.

  1. Primero, compile su código en un solo paso utilizando un programa de compilación automatizado (es decir,nant/msbuild).No voy a discutir cuál es mejor.Encuentre uno que le resulte cómodo y úselo.Haga que los scripts de compilación estén activos con el proyecto en control de fuente.
  2. Descubra cómo desea que se active su compilación automatizada.Ya sea conectándolo a CruiseControl o ejecutando una tarea de compilación nocturna mediante Tareas programadas.CruiseControl o TeamCity son probablemente la mejor opción para esto, porque incluyen muchas herramientas que puedes usar para facilitar este paso.CruiseControl es gratuito y TeamCity es gratuito hasta cierto punto, en el que es posible que tengas que pagar dependiendo del tamaño del proyecto.
  3. Bien, en este punto te sentirás bastante cómodo con las herramientas.Ahora está listo para agregar más tareas según lo que desee hacer para las pruebas, la implementación, etc.

Espero que esto ayude.

Otros consejos

Tengo un conjunto de scripts de Powershell que hacen todo esto por mí.

Guión 1:Compilación: esta es simple, se maneja principalmente mediante una llamada a msbuild y también crea los scripts de mi base de datos.

Guión 2:Paquete: este toma varios argumentos para empaquetar una versión para varios entornos, como prueba, y subconjuntos del entorno de producción, que consta de muchas máquinas.

Guión 3:Implementar: se ejecuta en cada máquina individual desde la carpeta creada por el script del paquete (el script de implementación se copia como parte del paquete).

Desde el script de implementación, hago comprobaciones de estado de cosas como el nombre de la máquina para que las cosas no se implementen accidentalmente en el lugar equivocado.

Para archivos web.config, uso el

<appSettings file="Local.config">

Esta característica tiene anulaciones que ya están en las máquinas de producción y son de solo lectura para que no se sobrescriban accidentalmente.Los archivos Local.config no están registrados y no tengo que cambiar ningún archivo en el momento de la compilación.

[Editar] El equivalente de appSettings file= para una sección de configuración es configSource="Local.config"

Pasamos del uso de un script Perl a MSBuild hace dos años y no hemos mirado atrás.Se pueden crear soluciones de Visual Studio simplemente especificándolas en el archivo xml principal.

Para cualquier cosa más complicada (obtener el código fuente, ejecutar pruebas unitarias, crear paquetes de instalación, implementar sitios web), puede simplemente crear una nueva clase en .net derivada de Tarea que anula la función Ejecutar y luego hace referencia a esto desde su archivo xml de compilación.

Aquí hay una introducción bastante buena:introducción

Solo he trabajado en un par de proyectos .Net (he hecho principalmente Java) pero una cosa que recomendaría es usar una herramienta como hormiga.Tengo un problema real al acoplar mi compilación al IDE, termina haciendo que sea una verdadera molestia configurar servidores de compilación en el futuro, ya que tienes que realizar una instalación VS completa en cualquier caja desde la que quieras compilar en el futuro.

Dicho esto, cualquier compilación automatizada es mejor que ninguna compilación automatizada.

Nuestro proceso de construcción es un conjunto de scripts Perl de cosecha propia que han evolucionado durante aproximadamente una década, nada sofisticado pero que hace el trabajo.Un script obtiene el código fuente más reciente, otro lo construye y un tercero lo traslada a una ubicación de red.Realizamos desarrollo de aplicaciones de escritorio, por lo que nuestro proceso de preparación también crea paquetes de instalación para probarlos y, finalmente, enviarlos a los clientes.

Le sugiero que lo divida en pasos individuales porque habrá ocasiones en las que desee reconstruir pero no obtener la versión más reciente, o tal vez simplemente necesite volver a realizar la etapa.Nuestros scripts también pueden manejar la construcción desde diferentes ramas, así que considérelo también con cualquier solución que desarrolle.

Finalmente tenemos una máquina de construcción dedicada que reconstruye el tronco y las ramas de mantenimiento todas las noches y envía un correo electrónico con cualquier problema o si se completó exitosamente.

Una cosa que sugeriría es asegurarse de que su script de compilación (y el proyecto de instalación, si es relevante en su caso) esté bajo control de código fuente.Tiendo a tener un script muy simple que simplemente verifica\obtiene la última versión del script de compilación "principal" y luego lo inicia.

Digo esto porque veo equipos que simplemente ejecutan la última versión del script de compilación en el servidor, pero nunca lo ponen en control de fuente o, cuando lo hacen, solo lo registran de forma aleatoria.Si realiza que el proceso de compilación "obtenga" el control de fuente, lo obligará a mantener allí el script de compilación más reciente y mejor.

Nuestro sistema de compilación es un archivo MAKE (o dos).Ha sido bastante divertido hacerlo funcionar, ya que debe ejecutarse tanto en Windows (como una tarea de compilación en VS) como en Linux (como una tarea normal de "make bla").Lo realmente divertido es que la compilación obtiene la lista de archivos real de un archivo .csproj, crea (otro) archivo MAKE a partir de ese y lo ejecuta.En los procesos, el archivo make en realidad se llama a sí mismo.

Si ese pensamiento no asusta al lector, entonces (o está loco o) probablemente pueda conseguir que make + "tu destructor de cuerdas favorito" trabaje para él.

Usamos UppercuT.UppercuT usa NAnt para construir y es extremadamente fácil de usar.

http://code.google.com/p/uppercut/

Algunas buenas explicaciones aquí: Uppercut

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top