Debido a una serie de circunstancias que condujeron a un mal ciclo de desarrollo de la última implementación, hice campaña en nuestra oficina para realizar todas las implementaciones futuras con una máquina de construcción dedicada, y mi jefe aceptó esta propuesta.
Sin embargo, en lugar de usar una máquina real en nuestra oficina, tenemos que compartir una sola máquina con varios otros grupos, y la molestia de tener que salir de mi oficina con toda la información necesaria y luego bajar las escaleras. a otra oficina solo para realizar una construcción simple me hace preguntarme por qué alguna vez propuse esto en primer lugar.
La idea de tener una máquina de compilación separada era, originalmente, separar mi propio código escrito localmente del código de varios otros desarrolladores, y separar los archivos secuestrados que tenía en mi máquina de la implementación. También fue para resolver una preocupación creciente que tuve con nuestro sistema de administración de archivos ClearCase, que a menudo se niega a permitirme implementar ciertas actividades de compilación a menos que también haya incluido otra actividad para la cual 'tiene dependencias'.
Ahora que en realidad sigo adelante con este proceso, me pregunto si entendí mal el propósito completo de usar una máquina de compilación, y dado que solo estamos usando esta máquina para la implementación de código en nuestros entornos de Prueba, Puesta en Escena y Producción, y no para nuestras implementaciones de prueba de Desarrollador personal, no estoy seguro de que sirva para ningún propósito.
Entonces, ¿cuál es la razón real para usar una máquina de compilación, e incluso he estado cerca de usarla correctamente?
fuente
Respuestas:
Normalmente no solo tendría una máquina de compilación dedicada, sino que también ejecutaría un servidor de compilación en esa máquina dedicada. Una máquina de construcción dedicada simplemente ofrece la ventaja de nunca bloquear el trabajo de un desarrollador e implementarla desde una máquina centralizada.
Un servidor de compilación ofrece mucho más. Un servidor de compilación permite CI (integración continua), lo que significa que se compilará automáticamente en cada impulso a su VCS (como git), incluso podría ejecutar pruebas unitarias si las tiene y permite la "implementación de un clic". Los servidores de compilación pueden notificarle por correo si las compilaciones o las pruebas fallan. Ofrecen datos históricos y tendencias sobre lo que sucedió.
Los servidores de compilación generalmente pueden ser accedidos por múltiples usuarios o equipos a la vez, utilizando una interfaz gráfica de usuario web que se ejecuta en un navegador.
En el mundo de Java, uno de los servidores de compilación más utilizados es Jenkins. Jenkins también funciona perfectamente con las compilaciones de C ++ (ya que parece que usa esos dos lenguajes). Jenkins se llama a sí mismo servidor de automatización, ya que puede ejecutar todo tipo de tareas que no tienen que estar relacionadas con la programación y la construcción.
fuente
Además de la respuesta de Traubenfuchs, has insinuado otra razón para una máquina de construcción en tu pregunta.
El hecho de que el software se base en su máquina, no significa que se basará en la de otra persona. Es posible que confíe en algunos archivos aleatorios que se encuentran en su máquina (y es posible que ni siquiera estén bajo el control de la versión). Puede estar confiando en alguna aplicación o biblioteca olvidada que se llama desde un script de compilación oscuro.
Si tiene una máquina de compilación dedicada, debe saber qué está instalado en ella. Esto debería estar bien documentado. Si alguna vez es necesario reconstruir el software, quizás años después, solo debería ser necesario crear una nueva máquina de compilación con los elementos documentados instalados.
fuente
La razón principal para tener una máquina de compilación dedicada es obtener compilaciones consistentes independientemente de quién esté haciendo la compilación. Las estaciones de trabajo para desarrolladores rara vez son (léase: nunca) idénticas. Es difícil saber que cada compilación está utilizando las mismas versiones exactas de dependencias y compiladores, etc. Uno de los peores problemas con las compilaciones de estaciones de trabajo de desarrollo es que los desarrolladores pueden compilar a partir de código que no está registrado en el control de versiones.
No está claro qué plataforma / idioma está utilizando, pero idealmente debería tener un servidor de compilación que se extraiga directamente del control de origen. Es decir, cuando se requiere una compilación, recuperará la fuente de una versión determinada del repositorio y la compilará automáticamente. Esto requiere el uso de herramientas de compilación automatizadas para guiar la compilación. Si no tiene esto, ese debería ser el paso 1.
Tenga en cuenta que no hay nada de malo en construir localmente para el desarrollo. Definitivamente deberías estar trabajando localmente para ejecutar pruebas unitarias, análisis de calidad de código y para perfeccionar scripts de compilación. De lo contrario, perderás mucho tiempo. El resultado del servidor de compilación es para cualquier cosa que desee mover potencialmente a producción. Todas las actividades de control de calidad, como las pruebas de integración y aceptación, deben realizarse solo con las compilaciones del servidor de compilaciones.
fuente
Las otras respuestas señalaron correctamente que debe automatizar la compilación, lo que significa que no es necesario caminar a otra oficina. Sin embargo, permítame proponer una cierta cantidad de pasos que podría seguir para mejorar su proceso de compilación:
Consideraría una máquina compartida mucho mejor que las compilaciones manuales. Mi proyecto actual usa una máquina virtual ahora, pero debido a la necesidad de pruebas de rendimiento de integración a nivel de sistema, nos estamos moviendo a un servidor dedicado con 40 núcleos de CPU virtuales, de los cuales las pruebas de rendimiento requieren 17.
fuente
Dices eso como si fuera algo malo.
Ahora tiene un servidor de compilación común a través del cual se construyen todas sus compilaciones, la suya y la de los otros equipos. La consistencia de la construcción? Cheque.
Todavía está realizando la compilación manualmente y eso no es bueno.
Necesita un proceso de servidor al que envíe / ponga en cola las solicitudes para que las compilaciones se realicen en su nombre y que ese proceso le envíe los resultados.
fuente
Además de otras respuestas relevantes, también parece que está ejecutando sus compilaciones directamente en la máquina en cuestión.
Para un sistema de compilación confiable, especialmente cuando se comparte la máquina de compilación con otros usuarios, es normal ejecutar sus compilaciones dentro de una máquina virtual. Esto garantiza que otros usuarios no puedan cambiar el comportamiento de sus compilaciones instalando sus propias versiones de aplicaciones o bibliotecas de las que depende su código. Una gran ventaja de esto es que la VM se puede respaldar fácilmente, y también se puede clonar fácilmente en cualquier otra PC (incluida su propia máquina de desarrollo).
fuente
Proporciona una ubicación centralizada y neutral para realizar compilaciones, independiente del IDE, el SO y las configuraciones de biblioteca de desarrolladores individuales.
Con una máquina de compilación dedicada, puede hacer que se reconstruya cada vez que hay una inserción de código en el repositorio. Cuando alguien interrumpe la compilación, el proceso puede enviar inmediatamente una alerta para que el problema se pueda corregir de inmediato.
Además de hacer que todo sea más repetible y confiable y garantizar que el repositorio no esté lleno de basura rota con problemas de dependencia al acecho, facilita la vida de los desarrolladores porque todo lo que tienen que hacer para que la compilación funcione en su máquina es copiar lo que sea se está haciendo en la máquina de compilación.
fuente