¿Es una buena práctica implementar un proyecto en el servidor archivo por archivo manualmente?

26

La compañía para la que trabajo ahora todavía no implementa la entrega continua. Todavía implementamos el proyecto manualmente en el servidor, archivo por archivo. ¿Cuál es la mejor práctica: implementar manualmente un artefacto de proyecto para cada implementación o seguir haciendo la implementación de archivo por archivo?

Jake Muller
fuente
12
Ni siquiera hay remotamente una "práctica única para todas las situaciones" para esta tarea.
whatsisname
26
Normalmente me vincularía a ¿Por qué es malo hacer una pregunta sobre "mejores prácticas"? Creo que todos podemos estar de acuerdo en que esta es la peor práctica. Se ubica ligeramente por encima de "prender fuego al servidor".
3
relevante: en.wikipedia.org/wiki/…
Jens Schauder
99
Sospecho que OP está haciendo esta pregunta porque ya sabe la respuesta, y su lugar de trabajo es Doing It Wrong (tm), y OP está tratando de obtener evidencia para justificar la forma en que hacen las cosas.
user1936
2
Lo hicimos de esta manera en el segundo milenio. ¡Debería estar bien! ;)
Don Branson

Respuestas:

103

¿Cuál es la mejor práctica? implementar manualmente un artefacto de proyecto en cada implementación o seguir haciendo la implementación de archivo por archivo?

Ninguno.

La mejor práctica es automatizar su implementación, completa y exclusivamente. Eso significa que nadie puede poner nada en un servidor manualmente.

"Para resumir el resumen del resumen: las personas son un problema". (Douglas Adams)

La gente comete errores. Si uno de los archivos que olvida copiar es una "biblioteca" compartida que se ha modificado ampliamente, puede hacer que se caiga todo el sitio de Producción.

Phill W.
fuente
17
@JohnHamilton Si automatizar la compilación es una tarea difícil, entonces eso es algo a resolver a largo plazo. No es necesario tener entornos de desarrollo, prueba y preproducción completos con una implementación completamente automatizada, pero la creación de un paquete de implementación estándar debería ser una práctica estándar.
Neil
20
Er, el tamaño de la empresa no es realmente el problema (hasta cierto punto). El costo estará relacionado en la medida en que la implementación esté automatizada y también relacionada con la complejidad del entorno de producción. Pero hay un gradiente de automatización y un gradiente de "costo" (tiempo / dinero) que comienza desde cosas simples como un script para copiar la producción en la producción (pequeña inversión con ahorros de costos tangibles inmediatos), y aumentando desde allí, y es más dependiente en la compra de la gestión que el tamaño de la empresa.
BurnsBA
39
@JohnHamilton: una empresa más pequeña que está mal administrada podría engañarse pensando que eso es seguro. Automatizar la copia de archivos no es exactamente una tarea difícil, y el costo de hacer que una persona empleada lo haga regularmente superará con creces el costo de escribir incluso el guión más trivial para hacerlo.
GManNickG
8
@JohnHamilton: El costo de la automatización debe sopesarse frente al riesgo de errores cometidos durante la implementación manual.
Robert Harvey
77
Ni siquiera necesitas necesariamente a Jenkins. Sería una mejora solo un script registrado con un montón de comandos scp (o lo que sea que use al cargar manualmente).
user253751
14

Los pasos manuales requieren mucho esfuerzo y son riesgosos: puede olvidar un archivo necesario. Tal vez no todos en su equipo sepan qué archivos deben copiarse. Todos estos problemas hacen que las implementaciones sean grandes, desalentadoras y raras, completamente innecesarias. La automatización aborda estos.

Incluso el paso de automatización más simple puede tener grandes beneficios, porque las implementaciones se vuelven triviales. Un script que copia los archivos o artefactos a través de (S) FTP o Rsync u otra tecnología es un gran primer paso. Más tarde, puede expandir esa secuencia de comandos para realizar automáticamente los pasos previos y posteriores a la implementación en el servidor, como reiniciar los servicios.

amon
fuente
Si el número total de servidores es 2 o menos, el manual es menos riesgoso que el automático. Automático requiere una amplia verificación de errores. Nunca he visto una solución automática trivial que permaneciera trivial.
Joshua
3
@ Joshua No estoy seguro de que la cantidad de servidores deba ser un factor aquí. La automatización también tiene valor cuando implementa en el mismo servidor varias veces. La pregunta es: ¿en quién confía más: en la computadora para ejecutar fielmente un script que funcionó una vez, o su capacidad para recordar todos los pasos necesarios cada vez? Como humano falible y olvidadizo, tengo una gran preferencia por no hacer cosas manualmente. A veces, incluso escribo tareas únicas para poder revisar los comandos antes de ejecutarlos. ¡Eso es mucho menos arriesgado que hacer cosas al azar manualmente hasta que funcione!
amon
Tengo una amplia experiencia en ambos sentidos. Lo que hago para la implementación manual es la instalación de xcopy, por lo que realmente no hay pasos para olvidar algunos.
Joshua
9

La mejor práctica sería implementar un proceso automatizado de algún tipo.

Tenga cuidado de verificar que no haya una razón especial para el enfoque 'archivo por archivo' que debería tener en cuenta.

Ewan
fuente
1
Hago esta pregunta porque solo quiero asegurarme de que no sea la mejor práctica del mundo. Me pregunto si todavía hay empresas / desarrolladores que aún implementen manualmente sus aplicaciones / proyectos, y lo que lo empeora es la implementación de archivo por archivo en cada iteración del desarrollo.
Jake Muller
44
La mejor pregunta es "¿por qué lo hacemos así?" No puedo pensar en una razón, pero sí sé que a algunas compañías les gusta tener una mano manual en el gatillo, por así
decirlo
8
@JakeMuller Lo que debe leer entre líneas de esta respuesta es que las decisiones deben tomarse razonando sobre la situación, no como una servil adhesión a lo que alguien sin conocimiento de ello había declarado siempre la respuesta correcta.
Blrfl
La razón del enfoque de archivo por archivo podría ser que son dependencias entre los archivos y, por lo tanto, las actualizaciones de los archivos se implementan antes de los cambios en otros archivos que dependen de esos archivos. Actualizar los archivos en el orden incorrecto podría frenar brevemente el sistema.
bdsl
6

Con la entrega continua (o implementación, en realidad) y moviendo cada archivo a mano, estás viendo los dos extremos. Es perfectamente comprensible que no pueda / no quiera crear una tubería completamente automatizada (todavía). Sin embargo, debe considerar automatizar partes del proceso.

Mover cada archivo a mano es bastante arriesgado, y podría mitigar ese riesgo, por ejemplo, etiquetando su repositorio de código, revisando esa etiqueta en su computadora, construyendo sus artefactos y cargándolos en su servidor. Cada uno de estos pasos se puede automatizar para que se ejecuten con unos pocos clics del mouse, y esto reducirá en gran medida el riesgo de olvidar un archivo o presionar accidentalmente para presionar algunos archivos adicionales.

Automatice lo que pueda, paso a paso. El hecho de que no pueda permitirse un canal de CD totalmente automatizado no debería desanimarlo a automatizar algunas partes.

Rio Azul
fuente
1

La mejor práctica sería hacer un análisis de costo / beneficio para su implementación particular para su compañía particular.

La respuesta general es "no hacer las cosas manualmente, automatizar". Esta es generalmente la respuesta correcta para tipos generales de empresas. La uniformidad de las respuestas que está recibiendo debe ser una indicación de cuán fuertemente la comunidad considera que esto son mejores prácticas. Si su empresa considera que la automatización no es la herramienta adecuada, debería tener alguna comprensión de lo que los hace únicos. Esa singularidad debe tenerse en cuenta en su proceso de toma de decisiones. No hay "mejores prácticas" cuando el conjunto de muestras es 1.

Preguntas importantes como "cuántos archivos" y "con qué frecuencia se actualizan las cosas" y "cuáles son las consecuencias de romper cosas" y "qué tan rápido puede revertir un mal cambio" son preguntas importantes para responder. Si automatiza, muchas de estas preguntas dejan de ser importantes, pero son esenciales para asignar adecuadamente los costos y beneficios para un proceso de actualización manual.

Cort Ammon - Restablece a Monica
fuente
1

Hay muchos tonos de gris entre la copia manual archivo por archivo y la entrega continua.

Comience por reducir la complejidad del proceso de implementación, por ejemplo, mediante el uso de un archivo zip, un paquete de estilo rpm, una infraestructura como herramienta de gestión de código (como títeres o chef) o incluso un simple script que copia los archivos para usted desde un área de preparación en el servidor ftp.

Los procesos de implementación con más pasos manuales tienen más probabilidades de tener errores (y, por lo tanto, fallar), como otros han dicho, eliminen el elemento humano.

No necesita implementar una entrega continua completa (que es costosa y requiere esfuerzo / inversión / innovación a lo largo del tiempo): comience de manera simple, haga que funcione, demuestre los beneficios y avance desde allí.

vikingsteve
fuente
0

Depende de la tecnología de software (o pila) que esté utilizando (lenguaje interpretado, lenguaje compilado, aplicación de escritorio, móvil, etc.), soft. dev. políticas del departamento, si tiene las herramientas para automatizarlo, cuán crítica es su aplicación, y una cosa importante a considerar es su arquitectura de software (cómo se diseñó su aplicación). Es por eso que tienes aquí diferentes respuestas. Como regla general, el mejor enfoque será reducir lo más posible la intervención humana en las tareas de implementación, para evitar errores. Una buena práctica será probar todo en un servidor de control de calidad (considere usar un servidor virtual si el presupuesto es un problema) antes de la implementación, y tener procedimientos inversos para restaurar a la versión anterior en caso de desastre ( SIEMPRE tenga una copia de seguridad).

Edu Garcia
fuente