Hito 5º: Despliegue desde 0 de una aplicación en la nube.

Descripción

Finalizar el proyecto individual con despliegue automático a las plataformas de producción.

Prerrequisitos

Haber alcanzado el 50% de los objetivos de los temas de gestión de infraestructuras y uso de sistemas. Sin este requisito este hito del proyecto estará suspenso. Evidentamente, tendrán que estar aprobados todos los hitos anteriores.

Explicación

En la asignatura se ha visto como crear usar máquinas virtuales completas y como provisionar las aplicaciones y servicios necesarios y hacerlo de forma ágil y reproducible.

El ciclo de desarrollo de un DevOps es el siguiente

  1. Provisionamiento para desarrollo.
  2. Creación de tests unitarios, de cobertura y de integración y configuración de la integración continua.
  3. Provisionamiento de las máquinas de prueba (staging) y de producción. Estas máquinas pueden ser tanto PaaS como IaaS. Esto se ha hecho en los dos hitos anteriores.
  4. Configuración del despliegue de las desarrollo a las máquinas de staging y eventualmente a las de producción. Este despliegue tiene que ser automático.

Lo que se pretende con este ciclo es que el tiempo que pasa desde la incorporación de un nuevo desarrollador a un equipo hasta que es capaz de pasar a producción el desarrollo sea lo menor posible, de forma que el uso de recursos y el despliegue de los mismos sea un proceso ágil. Previo a tal proceso estará la elección de tales entornos de desarrollo y producción y el test de los mismos, pero en el momento que se comience el desarrollo, o paralelamente al mismo, las decisiones deben estar tomadas y las máquinas virtuales testeadas y provisionadas, con todas las configuraciones preparadas y almacenadas en un repositorio.

Este hito es el que concluye la asignatura. La documentación para que cualquier usuario pueda llevar a cabo el despliegue del mismo debe estar en un solo documento, el README.md del proyecto.

Si se usa cualquier otro formato (como RST o .org) también es válido, siempre que GitHub lo presente automáticamente en la raíz del directorio principal del proyecto.

La licencia debe estar en el directorio principal. Los tests y los despliegues deben hacerse automáticamente con una sola orden tal como make install, python setup.py o grunt deploy y deben usarse herramientas estándar para el mismo. De debe configurar el despliegue automático desde GitHub e indicarse claramente en la documentación.

Si el proyecto está coordinado con otros, también debe indicarse claramente y la documentación deberá aclarar dónde se configuran los endpoints o puntos de entrada al API de esos otros proyectos, así como si hay un script que despliegue todos los proyectos en una sola aplicación y donde está desplegada. Esto se valorará adicionalmente.

El despliegue de la aplicación deberá hacerse en una máquina virtual o máquinas virtuales que se haya configurado automáticamente y a la que se haya hecho también el despliegue automáticamente. Esta máquina virtual debe ser una infraestructura como servicio, tal como Azure o cualquier otra que se proporcione de forma gratuita.

Entrega de la práctica

Aunque los proyectos se realizan y entregan de forma individual, en este hito se permitirá que haya commits de otros miembros del equipo (si lo hubiera), siempre que se hayan hecho mediante pull requests y además quede claro, en una tarea, qué es lo que han hecho.

Lo esencial de esta práctica es

  1. Que el README.md describa el proyecto para una persona que se acerque al mismo por primera vez; evidentemente, esto no quita que haya que añadir enlaces a la documentación adicional necesaria para corregir y por supuesto las líneas con información para que se pueda testear automáticamente.
  2. Que se encuentre efectivamente desplegada en una máquina (o máquinas) virtual(es) del tipo IaaS remota, de las proporcionadas por el profesor o alguna otra.
  3. Que esa máquina virtual sea un IaaS y se haya configurado desde 0 usando un script de provisionamiento de Ansile, Chef o lo que se haya elegido. Es decir, que no se haya usado una imagen ya configurada de la disponible en los repositorios de las mismas.

    Esta se podrá usar, sin embargo, para pruebas de los scripts de despliegue siempre que quede claro en la documentación que es así. Ese script se podrá hacer en cualquier lenguaje de los vistos en la asignatura o alguno que no se haya visto (Puppet, Rex o Salt).

  4. El despliegue tiene que hacerse automáticamente a dos niveles: usando una herramienta de despliegue automático como Vagrant o Puppet para crear las máquinas virtuales y desplegar una configuración en ella, configuración hecha con Ansible, Chef o algún otro sistema, y el despliegue y ejecución de la aplicación tendrá que hacerse automáticamente con alguna herramienta de despliegue tipo Capistrano, Fabric o Flightplan.

El objetivo, en todo caso, es que el provisionamiento sea escalable y reproducible, de forma que partiendo desde 0 (una cuenta en algún proveedor de IaaS) se pueda echar una aplicación a funcionar ejecutando solamente scripts y sin ningún input por parte del usuario.

Si hay que configurar claves SSH o de bases de datos tendrá que hacerse en un fichero de configuración o en un directorio previamente. Tanto Vagrant como las otras herramientas trabajan con variables de entorno o ficheros de configuración.

Aunque sea evidente, conviene recordar dos cosas

Por otro lado, la entrega se hará de la forma habitual, modificando el documento y haciendo un pull request de la forma habitual.

Los elementos de la práctica se tendrán que hacer constar en el README.md de la forma siguiente.

Despliegue final: IP_o_nombre

Una vez hecha la entrega, en la fecha que se haya discutido en clase y puesto en la sesión correspondiente se podrá hacer una presentación oral del proyecto. Esa presentación será optativa, pero se valorará para la nota de la asignatura. La fecha y lugar de esta presentación oral coincidirá con la del examen de la asignatura que se haya marcado en el calendario, si bien se podrá establecer alguna fecha adicional para quien no pueda hacerlo en la misma.

Valoración

La puntuación de esta práctica tiene un peso superior al resto, contando como se indicó al principio más que los otros hitos.

Se recuerda que todo lo anterior se califica de forma individual. Si hay alguna copia a estas alturas del curso, la práctica estará suspensa y sin posibilidad de reenvío.