2008-08-18 14 views
26

O, de hecho, establece un proceso de compilación cuando no hay mucho de uno en el lugar para comenzar.Mejorando su proceso de compilación

la actualidad, que es más o menos la situación se enfrenta a mi grupo. Hacemos desarrollo de aplicaciones web principalmente (pero no desarrollo de escritorio en este momento). Las implementaciones de software son feas e inmanejables incluso con nuestras modestas aplicaciones, y hemos tenido demasiados problemas en los dos años en 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 Joel Test de un tiro (construcciones diarias y construcciones de un solo paso, ninguno de los cuales existe en forma alguna).

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

herramientas pertinentes: La estructura visual Source Safe 6.0 (lo sé, pero no puedo hacer nada acerca de si o no utilizamos Fuente Segura en este momento que podría ser la próxima batalla peleo..)

Tentativamente, tengo un proyecto de estructura visual que hace esto:

  1. Get fuente y el lugar en el directorio local, incluyendo archivos DLL necesarios para el proyecto.
  2. obtener los archivos de configuración y cambiar el nombre cuando sea necesario (los estamos almacenando en un subdirectorio especial que no es parte de la aplicación real, y que se denominan según el uso).
  3. Construir utilizando Visual Studio
  4. Precompile usando la línea de comandos, copiando en lo que será un directorio de "construir"
  5. Copiar al destino.
  6. Obtenga los recursos adicionales necesarios, en su mayoría cosas como documentos, imágenes e informes que están asociados con el proyecto (y los coloca en el directorio desde el paso 5). Hay muchas de estas cosas, y no quería incluirlas previamente. Sin embargo, solo copiaré los artículos cambiados, así que tal vez sea irrelevante. No estaba seguro de si realmente quería incluir esto en los pasos anteriores.

todavía tengo que convencer a algunos tala de construcción visual de todo esto, pero no estoy en un punto en que necesito hacer eso todavía.

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

Respuesta

18

Al tomar en un proyecto que nunca ha tenido un proceso de construcción automatizado, es más fácil de tomar que en los pasos. No trates de tragar demasiado a la vez, de lo contrario, puede ser abrumador.

  1. Primero obtenga su código compilando con un solo paso usando un programa de construcción automatizado (es decir, nant/msbuild). No voy a debatir cuál es mejor. Encuentre uno que se sienta cómodo para usted y úselo. Haga que los scripts de construcción vivan con el proyecto en control de fuente.
  2. Averiguar cómo quiere que su construcción automatizado que se active. Ya sea que se conecte a CruiseControl o ejecute una tarea de compilación nocturna usando Tareas programadas. CruiseControl o TeamCity es probablemente la mejor opción para esto, ya que incluyen muchas herramientas que puede utilizar para facilitar este paso. CruiseControl es libre y TeamCity es libre de un punto, donde es posible que tenga que pagar por ello dependiendo de cuán grande es el proyecto.
  3. Ok, en este punto va a ser bastante cómodo con las herramientas. Ahora está listo para agregar más tareas en función de lo que desea hacer para probar, implementar, etc. ...

Espero que esto ayude.

9

que tienen un conjunto de scripts de PowerShell que hacen todo esto para mí.

Guión 1: Construir - éste es simple, que es manejado principalmente por una llamada a msbuild, y también crea mis scripts de base.

Guión 2: Package - este se lleva varios argumentos para empaquetar una liberación para diversos entornos, tales como prueba, y subconjuntos del entorno de producción, que consiste en muchas máquinas.

Script 3: Implementar - Este se ejecuta en cada máquina desde el interior de la carpeta creada por el script del paquete (la secuencia de comandos de despliegue se copia en la que una parte de los envases)

Desde el script deploy, hago la cordura comprueba cosas como el nombre de la máquina para que las cosas no se desplieguen accidentalmente en el lugar equivocado.

Para los archivos web.config, Puedo utilizar la función

<appSettings file="Local.config"> 

tener anularán los que ya están en las máquinas de producción, y que son de sólo lectura para que no obtiene accidentalmente escribir sobre ellos. Los archivos Local.config no están registrados, y no tengo que hacer ningún cambio de archivo en tiempo de compilación.

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

1

sólo he trabajado en un par de proyectos .Net (lo he hecho sobre todo de Java), pero Una cosa que recomendaría es usar una herramienta como NAnt. Tengo un problema real con el acoplamiento de mi compilación al IDE, termina haciendo un gran esfuerzo configurar los servidores de compilación en el camino, ya que tienes que hacer una instalación completa de VS en cualquier caja que quieras construir en el futuro.

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

5

Pasamos de utilizar una secuencia de comandos de perl a MSBuild hace dos años y no hemos vuelto la vista atrás. La construcción de soluciones visuales de estudio se puede hacer simplemente especificándolas en el archivo xml principal.

Para algo más complicado (para obtener su código fuente, ejecutar pruebas unitarias, la construcción de instalar los paquetes, la implementación de sitios web), puede simplemente crear una nueva clase de derivados de .NET de tareas que anula la función Ejecutar, y luego referencia esto desde tu archivo xml de compilación.

Hay una muy buena introducción aquí: introduction

1

Nuestro proceso de construcción es un montón de scripts de Perl de cosecha propia que han evolucionado durante una década o así, nada lujoso, pero hace el trabajo. Una secuencia de comandos obtiene el último código fuente, otro lo construye, un tercero lo ubica en una ubicación de red. Hacemos el desarrollo de aplicaciones de escritorio, por lo que nuestro proceso de preparación también crea paquetes de instalación para probar y finalmente enviar a los clientes.

Te sugiero que lo desgloses en pasos individuales porque habrá momentos en los que querrás reconstruir pero no recibirás lo último, o tal vez solo necesites volver a la etapa. Nuestros scripts también pueden manejar construcciones de diferentes ramas, así que considere eso también con cualquier solución que desarrolle.

Finalmente tenemos una máquina de creación dedicada que reconstruye las ramas de troncal y mantenimiento cada noche y envía un correo electrónico con cualquier problema o si se completó con éxito.

0

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

Si ese pensamiento no asustar al lector, a continuación, (ya sea que están locos o) se puede conseguir probablemente hacer + "su trituradora favorita cadena" a trabajar para ellos.

1

Una cosa que sugeriría a asegurar que su escritura de la estructura (y el proyecto de instalación, en su caso, en su caso) está en control de código fuente. Tiendo a tener un script muy simple que simplemente verifica \ gets latest the "main" script y luego lo lanza.

Digo esto b/c Veo que los equipos simplemente ejecutan la última versión del script de compilación en el servidor, pero nunca lo ponen en control de código fuente o cuando lo hacen solo lo registran de forma aleatoria. Si haces que el proceso de compilación para "obtener" desde el control de la fuente te obligará a mantener la última y mejor secuencia de comandos de compilación allí.

Cuestiones relacionadas