language-agnostic build

language agnostic - Sistema de gestión de compilación agnóstico de idiomas



language-agnostic build (6)

Varias veces en mi carrera, trabajé en un grupo de software que determinó que

a) Necesitábamos un sistema de construcción / prueba
b) Deberíamos escribir nuestro propio
c) Podemos hacer que un desarrollador pase una semana, hacerlo y no deberían tener que volver a tocarlo

Cada vez, esto ha resultado en un sistema que solo parece funcionar para la persona que lo escribió y requiere su atención constante. He pasado tiempo en varias ocasiones buscando una herramienta que pueda tomar que sirva a nuestras necesidades, pero que venga con las manos vacías. Generalmente, las herramientas como este servidor son un mercado muy estrecho. Estoy en el punto nuevamente de necesitar algo como esto. ¿Hay algo por ahí, o lo escribimos de nuevo?

Estos son mis requisitos en orden de prioridad (los últimos son simplemente agradables de tener):

  1. Capacidad de manejar una construcción multiproyecto. Tenemos varios componentes que proporcionan cosas que otros componentes usan y usan cosas de otros componentes. Un desarrollador debería poder verificar 1 componente y hacer cambios sin tener que construir el mundo. Las dependencias fuera del proyecto se deben extraer automáticamente. Entonces, una forma de poder empujar y tirar los objetos construidos a un servidor es fundamental para esto. Otro aspecto de esto es la capacidad de poder desplegar todas las dependencias a un directorio local para el desarrollo en el camino.

  2. No te preocupes por exactamente cómo se construyen las cosas. Esto puede sonar extraño, pero no quiero que el sistema de compilación se preocupe por compilar mi código. Ya hay excelentes herramientas que hacen esto para cada idioma: Ant, CMake, etc. Solo quiero decirles cómo llamar para que las cosas se desarrollen y de qué producto debería preocuparse. De esta forma, el Proyecto A puede estar en Java, el Proyecto B puede estar en C ++, se entiende la idea.

  3. Tiene alguna forma de ejecutar pruebas en la salida

  4. Mostrar los resultados actuales de compilación / prueba en una página web

  5. Envía los resultados por correo electrónico

  6. Integración con RCS (utilizamos svn)


Apache''s Continuum y Atlassian''s Bamboo se encontrarán con # 2-6.

Hacer el # 1 de una manera independiente del idioma es un poco más difícil.

Maven e Ivy trabajan para las dependencias de Java.



Investigué, pero nunca usé, AntHill. Hay una versión de código abierto y una versión comercial . Creo que hará lo que usted desee, pero sería útil si usted diera más requisitos, como si necesita hacer compilaciones automáticas durante la noche, qué utiliza para el control de fuente, etc.

En mi compañía actual, escribí la mía. La forma en que funciona la mía es exactamente lo que dices; no tiene idea de cómo construir el software. Le da un montón de líneas de comando para ejecutar (almacenado en una base de datos), captura el valor de salida y stdout y stderr, y si el valor de salida no es cero, marca la construcción como roto. Tenemos alrededor de 8 proyectos que pueden construir y ejecutar pruebas unitarias. Todos comienzan borrando el directorio y actualizando la fuente de subversión.


Utilicé Visual Build , que encontré como una forma muy útil de unir a todos estos compiladores dispares, corredores de prueba y otras cosas en un sistema flexible. Piensa en el Programador de Windows en los principales problemas. Básicamente es un gran motor de ejecución de tareas, con tareas listas incluidas para todos los principales sistemas de control de fuente comercial, compiladores, etc. Puede crear carpetas, enviar correos electrónicos y un montón de otras cosas, todo con una interfaz de usuario bastante simple.


Yo recomendaría que si va a escribir un sistema de prueba que considere utilizar el Protocolo de prueba cualquier cosa . TAP ha estado en uso por más de 20 años, y es ampliamente utilizado, especialmente para los módulos de CPAN.

El formato general de TAP es:

1..N ok 1 Description # Directive # Diagnostic .... ok 47 Description ok 48 Description more tests....

Por ejemplo, el resultado de un archivo de prueba puede ser similar a:

1..4 ok 1 - Input file opened not ok 2 - First line of the input valid ok 3 - Read the rest of the file not ok 4 - Summarized correctly # TODO Not written yet

Visite testanything.org para obtener más información.

Los ejemplos se copian de http://en.wikipedia.org/wiki/Test_Anything_Protocol


Adán,

Noté la respuesta de Anthill, y como un Anthiller, tengo que decir que tenía razón. Una de las cosas que Anthill hace muy bien es dejarle definir dependencias entre proyectos. La versión de código abierto está enfocada en Java, mientras que la herramienta comercial es independiente del idioma a pesar del nombre.

Le permitiría definir dependencias entre proyectos (o partes de proyectos) en función de criterios como el estado (la última versión exitosa o la última versión aprobada por QA o ...) y / o el número de versión o rama. Es algo de lo que estamos muy orgullosos. En el momento de la compilación, los artefactos de compilación se transportan entre los servidores, se guardan los cachés para la ayuda de rendimiento y todas esas cosas buenas.

En cuanto a los otros criterios:
2) Anthill (como la mayoría de las herramientas de automatización de compilación) ejecutará las secuencias de comandos de compilación existentes, generalmente sin modificaciones.
3) Las pruebas (una vez más sus tecnologías existentes) se pueden ejecutar en tiempo de compilación o contra una compilación existente.
4) Los resultados se muestran en la web (una vez más típica de las herramientas de automatización de compilación)
5) El correo electrónico es fácil
6) Tenemos más de una docena de integraciones SCM, y usamos SVN internamente para que la integración sea naturalmente una de nuestras mejores.

aclamaciones,

eric