Despliegue de software
# Despliegue de software

El despliegue de software son todas las actividades que hacen que un sistema de software esté disponible para su uso.

El proceso de implantación general consiste en varias actividades interrelacionadas con posibles transiciones entre ellas. Estas actividades pueden ocurrir en el lado del desarrollador de software o en el lado del consumidor o en ambos. Debido a que cada sistema de software es único, los procesos o procedimientos precisos dentro de cada actividad difícilmente pueden definirse. Por lo tanto, la "implementación" debe interpretarse como un proceso general que debe personalizarse de acuerdo con los requisitos o características específicos.

## Historia

Cuando las computadoras eran extremadamente grandes, caras y voluminosas (mainframes y minicomputadoras), los fabricantes a menudo combinaban el software con el hardware. Si fuera necesario instalar software empresarial en una computadora existente, esto podría requerir una visita costosa por parte de un arquitecto de sistemas o un consultor. Para una instalación compleja y local de software empresarial hoy en día, este puede ser el caso.

Sin embargo, con el desarrollo del software de mercado masivo para la nueva era de los microcomputadores en la década de 1980, surgieron nuevas formas de distribución de software: primero los cartuchos, luego las cintas de casete, luego los disquetes, luego (en los años 90 y posteriores) los medios ópticos, internet y unidades flash. Esto significaba que la implementación del software podía dejarse al cliente. Sin embargo, con el tiempo también se reconoció cada vez más que la capacidad de configuración del software por parte del cliente era importante, y que esto debería tener una interfaz fácil de usar (en lugar de, por ejemplo, requerir que el cliente edite las entradas del registro en Windows).

En las implementaciones de software previas a Internet, las implementaciones (y su primo estrechamente relacionado, las nuevas versiones de software) eran necesariamente costosas, poco frecuentes y voluminosas. Por lo tanto, es razonable considerar que la difusión de Internet hizo posible el desarrollo ágil de extremo a extremo del software. De hecho, el advenimiento de la computación en la nube y el software como servicio significó que el software podría implementarse en un gran número de clientes en cuestión de minutos, a través de Internet. Esto también significaba que, por lo general, los programas de implementación ahora eran determinados por el proveedor de software, no por los clientes. Dicha flexibilidad llevó al aumento del desarrollo continuo como una opción viable, especialmente para aplicaciones web de menor riesgo.

## Actividades de despliegue

### Lanzamiento

    La actividad de publicación se deriva del proceso de desarrollo completado y, a veces, se clasifica como parte del proceso de desarrollo en lugar del proceso de implementación. Incluye todas las operaciones para preparar un sistema para el compilado y la transferencia a los sistemas informáticos en los que se ejecutará en producción. Por lo tanto, a veces implica la determinación de los recursos necesarios para que el sistema funcione con un rendimiento y planificación tolerables y / o documente las actividades posteriores del proceso de implementación.

### Instalación y activación

    Instalación y acción Para sistemas simples, la instalación implica establecer algún tipo de comando, acceso directo, script o servicio para ejecutar el software (manual o automáticamente). Para sistemas complejos puede implicar la configuración del sistema, posiblemente haciendo preguntas al usuario final sobre su uso previsto, o preguntándoles directamente cómo les gustaría que se configuren, y / o haciendo que todos los subsistemas necesarios estén listos para usar. La activación es la actividad de iniciar el componente ejecutable de software por primera vez (no debe confundirse con el uso común del término activación en relación con una licencia de software, que es una función de los sistemas de gestión de derechos digitales).
    En implementaciones de software más grandes en servidores, la copia principal del software que deben usar los usuarios, "producción", se puede instalar en un servidor de producción en un entorno de producción. Otras versiones del software implementado pueden instalarse en un entorno de prueba, un entorno de desarrollo y un entorno de recuperación de desastres.
    En entornos complejos de entrega continua y / o software como sistemas de servicio, es posible que existan simultáneamente versiones configuradas de manera diferente del sistema en el entorno de producción para diferentes clientes internos o externos (esto se conoce como una arquitectura de múltiples inquilinos), o incluso se implementará gradualmente en paralelo a diferentes grupos de clientes, con la posibilidad de cancelar uno o más de los despliegues paralelos. Por ejemplo, se sabe que Twitter utiliza este último enfoque para la prueba A / B de nuevas características y cambios en la interfaz de usuario. También se puede crear un grupo "oculto en vivo" dentro de un entorno de producción, que consiste en servidores que aún no están conectados al equilibrador de carga de producción, para los fines de la implementación azul-verde.

### Desactivación

    La desactivación es la inversa de la activación y se refiere al cierre de cualquier componente que ya se esté ejecutando de un sistema. A menudo se requiere la desactivación para realizar otras actividades de implementación, por ejemplo, es posible que un sistema de software deba desactivarse antes de que se pueda realizar una actualización. La práctica de eliminar los sistemas poco usados u obsoletos del servicio a menudo se denomina retiro de la aplicación o desmantelamiento de la aplicación.

### Desinstalación

    La desinstalación es el inverso de la instalación. Es la eliminación de un sistema que ya no es necesario. También puede implicar alguna reconfiguración de otros sistemas de software para eliminar las dependencias del sistema desinstalado.

### Actualización

    El proceso de actualización reemplaza una versión anterior de todo o parte de un sistema de software con una versión más reciente. Comúnmente consiste en la desactivación seguida de la instalación. En algunos sistemas, como en Linux cuando se usa el administrador de paquetes del sistema, la versión anterior de una aplicación de software generalmente también se desinstala como parte automática del proceso. (Esto se debe a que los administradores de paquetes de Linux generalmente no admiten la instalación de varias versiones de una aplicación de software al mismo tiempo, a menos que el paquete de software haya sido diseñado específicamente para evitar esta limitación).

### Actualización incorporada

    Los mecanismos para instalar actualizaciones están integrados en algunos sistemas de software (o, en el caso de algunos sistemas operativos, como Linux, Android e iOS, en el propio sistema operativo). La automatización de estos procesos de actualización va desde totalmente automática hasta iniciada y controlada por el usuario. Norton Internet Security es un ejemplo de un sistema con un método semiautomático para recuperar e instalar actualizaciones para las definiciones de antivirus y otros componentes del sistema. Otros productos de software proporcionan mecanismos de consulta para determinar cuándo hay actualizaciones disponibles.

### Seguimiento de versiones

    Los sistemas de seguimiento de la versión ayudan al usuario a encontrar e instalar actualizaciones a los sistemas de software. Por ejemplo: Software Catalog almacena la versión y otra información para cada paquete de software instalado en un sistema local. Con solo hacer clic en un botón, se abre una ventana del navegador a la página web de actualización de la aplicación, incluido el llenado automático del nombre de usuario y la contraseña de los sitios que requieren un inicio de sesión. En Linux, Android e iOS, este proceso es incluso más sencillo porque el sistema operativo incorpora un proceso estandarizado para el seguimiento de versiones (para paquetes de software instalados de manera oficial), por lo que no se requieren pasos separados de inicio de sesión, descarga y ejecución, por lo que El proceso puede configurarse para ser completamente automatizado. Algunos software de terceros también admiten el seguimiento y la actualización automatizados de versiones para ciertos paquetes de software de Windows.

### Adaptación

    La actividad de adaptación también es un proceso para modificar un sistema de software que se ha instalado anteriormente. Se diferencia de la actualización en que las adaptaciones son iniciadas por eventos locales, como cambiar el entorno del sitio del cliente, mientras que la actualización es una consecuencia de la disponibilidad de una nueva versión. La adaptación puede requerir habilidades técnicas especializadas, como la programación de computadoras, en ciertos casos complejos.

## Roles de implementación

La complejidad y variabilidad de los productos de software ha fomentado la aparición de roles especializados para coordinar e diseñar el proceso de implementación. Para los sistemas de escritorio, los usuarios finales con frecuencia también se convierten en los "implementadores de software" cuando instalan un paquete de software en su máquina. La implementación del software empresarial implica muchos más roles, y esos roles generalmente cambian a medida que la aplicación avanza de la prueba (preproducción) a los entornos de producción. Los roles típicos involucrados en las implementaciones de software para aplicaciones empresariales pueden incluir:

* En entornos de preproducción:
   * Desarrolladores de aplicaciones: ver proceso de desarrollo del Software
   * Gerentes de lanzamiento: ve administración de Liberación
   * Coordinadores de despliegue: ve DevOps
* En entornos de producción:
   * Administrador de sistema
   * Administrador de base de datos
   * Coordinadores de liberación: ve DevOps
   * Directores de proyecto de las operaciones: ve ITIL

## Ve también

* Liberación de software
* Readme
* Administración de liberación

### Herramientas de despliegue

* Ansible
* OSGi
* JNLP
* RPM
* Apto
