Creación de tuberías (pipelines) con Azure DevOps


Introducción

DevOps en Azure abarca un amplio rango de servicios que cubren el ciclo completo de desarrollo de un producto. Los módulos que componen este software como servicio (SaaS) son los siguientes (Microsoft Docs, s.f.-b):

    Azure Boards: este módulo permite realizar planeación de sprints y backlogs, rastreo de elementos de trabajo y herramientas de reporteo.

  • Azure Pipelines: una plataforma de integración continua (CI) y despliegue continuo (CD) con soporte para contenedores y/o kubernetes.
  • Azure Repos: este módulo provee repositorios de Git hospedados en una nube privada.
  • Azure Artifacts: provee un método integrado de manejo de paquetes con soporte para Python, npm, Maven y NuGet provenientes de fuentes privadas y públicas, simplificando su administración y seguimiento.

Azure DevOps es un conjunto de servicios y herramientas para lograr una buena administración en todo el ciclo de vida del desarrollo de software, ya que soporta la mayoría de las plataformas de desarrollo, así como lenguajes de programación.


Explicación

Construcción (build) de aplicaciones

Azure Devops no se centra en organizaciones que son de un extremo a otro de Microsoft o Windows. Azure DevOps proporciona una plataforma que es:

  • Flexible: no tienes que hacer todo lo posible en Azure DevOps. Es posible adoptar cada uno de los servicios de forma independiente e integrarlos con su cadena de herramientas existente; las herramientas más populares son compatibles.
  • Independiente de la plataforma: diseñado para funcionar con cualquier plataforma (Linux, MacOS y Windows) o lenguaje (incluidas las aplicaciones Node.js, Python, Java, PHP, Ruby, C/C ++, .Net, Android e iOS). Azure DevOps no solo está dirigido a organizaciones que construyen y envían código .Net.
  • Independiente de la nube: la entrega continua es compatible con AWS y GCP, así como con Azure.

La automatización de construcción/compilación (build) es el proceso de automatizar la recuperación de código fuente, compilarlo en código binario, ejecutar pruebas automatizadas y publicarlo en un repositorio centralizado compartido. La automatización de la construcción es fundamental para el éxito de los procesos de DevOps.

La automatización de la construcción permite la integración continua (CI). Por lo tanto, el papel de CI en el proceso de compilación automatizado es que CI utiliza la automatización de compilación para verificar los registros y permitir que los equipos detecten problemas con anticipación.

Hay cinco beneficios principales de la automatización de la construcción:

  1. Aumenta la productividad. La automatización de la construcción garantiza una respuesta rápida. Esto significa que como desarrollador aumentas tu productividad. Pasarás menos tiempo tratando con herramientas y procesos, y más tiempo entregando valor.
  2. Acelera la entrega. La automatización de la construcción ayuda a acelerar la entrega. Esto se debe a que elimina las tareas redundantes y garantiza que encuentre los problemas más rápido, para que puedas publicar más rápido.
  3. Mejora la calidad. La automatización de la construcción ayuda a tu equipo a moverse más rápido. Eso significa que podrás encontrar problemas más rápido y resolverlos para mejorar la calidad general de tu producto y evitar malas compilaciones.
  4. Mantiene un historial completo. La automatización de compilación mantiene un historial completo de archivos y cambios. Eso significa que podrás realizar un seguimiento de los problemas hasta su origen.
  5. Ahorra tiempo y dinero. La automatización de la construcción ahorra tiempo y dinero. Esto se debe a que la automatización de la compilación lo prepara para CI/CD, aumenta la productividad, acelera la entrega y mejora la calidad.

Cuando se logra automatizar la construcción, las pruebas y, por último, la liberación del código, los equipos tanto de desarrollo como de tecnologías de información podrán realizar múltiples tareas como los cambios y resolución de errores en corto tiempo y también tomarán decisiones con más rapidez.

Despliegue (deploy) de aplicaciones

En las versiones anteriores de Azure DevOps, si la aplicación necesitaba implementarse en varios servidores, la comunicación remota de Windows PowerShell debía habilitarse manualmente. Los puertos necesarios se abrían y el agente de implementación se instalaba en cada uno de los servidores. Las canalizaciones se administraban manualmente si se requería realizar múltiples implementaciones.

Todos los desafíos anteriores se han manejado sin problemas con la introducción de los grupos de implementación.
El grupo de implementación instala un agente de implementación en cada uno de los servidores de destino del grupo configurado e indica al canal de lanzamiento que implemente gradualmente la aplicación en todos estos servidores que pertenecen al grupo de implementación. Se pueden crear múltiples tuberías (pipelines) para las implementaciones, de modo que la última versión de la aplicación se pueda proporcionar de manera escalonada a los múltiples grupos de usuarios para validar las características recién introducidas.

Los grupos de implementación son un conjunto de servidores que tienen instalados agentes y representan los entornos de desarrollo, prueba y producción; estos grupos solo se utilizan en las canalizaciones típicas y son diferentes a los trabajos de implementación, ya que estos son un conjunto de tareas de implementación que se definen en un archivo YAML para realizar una tarea en específico.

Con los grupos de implementación puedes realizar los siguiente:

  • Etiquetar los servidores para tener un conjunto específico de destinos.
  • Monitorear las bitácoras en tiempo real de cada servidor al momento de lanzar las entregas y descargar los reportes de los servidores para identificar las implementaciones de manera individual.
  • Otorgar permisos a los usuarios para administrar y monitorear el o los grupos en cuestiones de seguridad al momento de crear los grupos.

Los grupos de implementación son muy útiles en las organizaciones con múltiples proyectos y una de las ventajas de estos grupos es que cuando se crea uno nuevo, este se provisiona automáticamente en los grupos que corresponden a cada proyecto.

Automatización de despliegues

El despliegue continuo (CD) es el proceso de crear, configurar, probar e implementar desde un entorno de construcción hasta uno de producción. Varios entornos de pruebas crean una canalización de lanzamiento para la automatización de nueva infraestructura y la implementación de nuevas compilaciones. Los siguientes entornos tienen tareas de integración, carga y pruebas de validación de los usuarios finales que se ejecutan e iteran progresivamente. La integración continua (CI) es la que inicia el proceso de despliegue continuo hasta el final de las pruebas de validación de la aplicación.

El despliegue continuo (DC) en sí mismo es un conjunto de procesos, herramientas y técnicas que permiten la entrega rápida, confiable y continua de software. Entonces, CD no se trata solo de configurar una tubería, aunque esa parte es importante. El CD trata sobre la creación de un entorno de trabajo que tiene las siguientes características (Microsoft Docs, s.f.-a):

  • Cuenta con un proceso confiable y repetible para lanzar e implementar software.
  • Automatiza todo lo posible.
  • No deje de hacer algo que es difícil o doloroso. En cambio, se hace con más frecuencia para descubrir cómo convertirlo en una rutina.
  • Mantiene todo bajo el control de código fuente.
  • Están de acuerdo los desarrolladores en que terminado significa liberado.
  • Incorpora calidad en el proceso. La calidad nunca es una ocurrencia tardía.
  • Son responsables todos los que intervengan en el proceso de publicación. Ya no se trabaja en silos.
  • Busca la mejora continua siempre.

CD es una práctica esbelta y su meta es mantener la producción actualizada utilizando la ruta más corta desde la disponibilidad hasta el control de las versiones, así como nuevos paquetes de implementación. Gracias a la automatización se minimizan los tiempos de mitigación o resolución de incidentes, así como los tiempos de implementación.

Crear una tubería de construcción con Azure Pipelines

Aprenderás cómo crear una tubería (pipeline) básica de DevOps utilizando la plataforma como servicio de Microsoft. Lo primero que tienes que hacer es crear una cuenta en Azure DevOps Services.





Esta pantalla se obtuvo directamente del software que se está explicando en la computadora, para fines educativos.

Cuando se te presente la opción, usa la de “Empezar gratis.” Esto hará que se cree una organización a la cual tu cuenta será asociada para la creación de proyectos.


Esta pantalla se obtuvo directamente del software que se está explicando en la computadora, para fines educativos.

Después de un par de minutos te llevará a la consola de administración para la organización creada. La consola te pedirá crear un proyecto para empezar los servicios asociados.


Esta pantalla se obtuvo directamente del software que se está explicando en la computadora, para fines educativos.

Para este ejercicio crea un proyecto privado. Con él aprenderás los pasos necesarios para habilitar una tubería (pipeline) desde la plataforma. En este ejemplo se creó un proyecto llamado “TecMilenio”.


Esta pantalla se obtuvo directamente del software que se está explicando en la computadora, para fines educativos.

Una vez creado el proyecto se habilitarán todos los módulos de Azure Devops. En la sección de Overview podrás ver los tableros de control y métricas asociadas al proyecto. En la sección de tableros podrás llevar la administración del proyecto usando tableros de tareas tipo Kanban y otras herramientas de administración de proyectos.

Tu tablero Kanban convierte tu trabajo pendiente en un letrero interactivo que proporciona un flujo visual de trabajo. A medida que el trabajo avanza, desde la idea hasta su finalización, actualiza los elementos del tablero. Cada columna representa una etapa de trabajo. Cada tarjeta representa un elemento de la lista de trabajos pendientes, una historia de usuario o un error en esa etapa del trabajo.

En la sección de repositorios encontrarás la información necesaria para subir un repositorio a una nube administrada por Microsoft. Si tu repositorio ya existe en otro servicio, como GIthub, puedes generar las llaves privadas para clonarlo y darle seguimiento desde esta plataforma.


Esta pantalla se obtuvo directamente del software que se está explicando en la computadora, para fines educativos.

Cuando todo esto esté definido, podrás crear tu primera tubería (pipeline). Al hacer clic en esa pestaña, se presenta la opción para crearla. Hay que hacer clic en el botón de “Create Pipeline.”


Esta pantalla se obtuvo directamente del software que se está explicando en la computadora, para fines educativos.

Al presionar el botón se detona una interfaz de tipo “wizard”. En el primer paso te va a preguntar dónde almacenas tu código, aunque Azure DevOps tiene la posibilidad de interconectarse con múltiples plataformas de resguardo de código (Perforce, SourceSafe, Github, etc.). En este ejemplo usarás la cuenta de Github que utilizaste para tu práctica de GitOps en la sección anterior.


Esta pantalla se obtuvo directamente del software que se está explicando en la computadora, para fines educativos.

Para poder realizar la conexión, Azure DevOps Pipelines te pedirá que autentifiques tus credenciales con Github utilizando la interfaz OAuth provista por Git. Hay que teclear el usuario y contraseña que usas para acceder al repositorio donde se almacenó el código fuente que creaste.


Esta pantalla se obtuvo directamente del software que se está explicando en la computadora, para fines educativos.

Como Github usa autenticación de dos factores se enviará un código de verificación al correo que tienes registrado en tu cuenta de Github. Hay que teclear el código en la ventana provista para ese efecto.


Esta pantalla se obtuvo directamente del software que se está explicando en la computadora, para fines educativos.

Después de realizar la verificación, hay que seleccionar los repositorios a los cuales se les otorgará acceso de administración a Azure DevOps Pipeline. Es recomendable que otorgues solo los permisos al repositorio de ejemplo para efectos de esta práctica y después añadas otros repositorios, según sea necesario.


Esta pantalla se obtuvo directamente del software que se está explicando en la computadora, para fines educativos.

Concluyendo este paso, habilita el paso de “Selección” en el wizard. En este paso hay que determinar el repositorio que se utilizará como detonador de las acciones de la tubería (pipeline).


Esta pantalla se obtuvo directamente del software que se está explicando en la computadora, para fines educativos.

Al hacer esto, aparece un diálogo para seleccionar los repositorios a los cuales se les habilitarán las acciones de la tubería. En este ejemplo tienes que escoger la opción de “Repositorios selectos” y pulsar el selector para marcar solamente el repositorio creado para esta práctica.


Esta pantalla se obtuvo directamente del software que se está explicando en la computadora, para fines educativos.

En el siguiente paso hay que escoger la cuenta de Microsoft a la cual se asociarán los cargos y otras acciones administrativas del Pipeline. Utiliza la que asociaste al principio con la Organización Devops.

Al culminar esta acción, se habilitará la sección de “Configurar” dentro del “wizard” de la tubería. Aquí se te presentan las opciones de crear un pipeline sencillo y modificarlo manualmente o la de usar un machote de YAML provisto por Microsoft para los escenarios más comunes. En este ejemplo, seleccionarás la configuración inicial o “starter”.


Esta pantalla se obtuvo directamente del software que se está explicando en la computadora, para fines educativos.

Azure DevOps se encargará de leer el repositorio y crear un YAML sugerido para el proyecto en cuestión. Como el repositorio a usarse en este ejemplo son scripts sencillos en Python, se genera un YAML sencillo que puedes modificar manualmente para complementarlo.


Esta pantalla se obtuvo directamente del software que se está explicando en la computadora, para fines educativos.


Esta pantalla se obtuvo directamente del software que se está explicando en la computadora, para fines educativos.

Una vez definido el YAML, este se compilará y será asignado a una tarea en Azure DevOps para validar que los pasos sean correctos. El job de esta configuración inicial fallará y el motivo es que no has activado una cuenta gratuita de Azure DevOps. Para eso hay que llenar el formulario en el cual se solicita el acceso a los servidores de procesamiento paralelo gratuitos.


Esta pantalla se obtuvo directamente del software que se está explicando en la computadora, para fines educativos.


Esta pantalla se obtuvo directamente del software que se está explicando en la computadora, para fines educativos.

Al finalizar el formulario solo queda esperar la respuesta de Microsoft para construir y probar nuevos pipelines usando Azure DevOps.

Tuberías multietapas

Antes, Azure DevOps solo ofrecía vistas de compilación y versiones de manera separada para los usuarios. Esto era un poco diferente a comparación de otras plataformas como Jenkins, con lo cual ya se podían crear canalizaciones unificadas. Ahora, Azure DevOps puede crear canalizaciones multietapas con el archivo YAML y configurar las canalizaciones para hacer integraciones continuas (CI), despliegues continuos (CD) o ambas (Goyal, 2019).

Puedes organizar los trabajos (jobs) en las tuberías por etapas. Las etapas son las divisiones principales en una tubería: "construir esta aplicación", "ejecutar estas pruebas" e "implementar en preproducción" son buenos ejemplos de etapas. Son límites lógicos en su canalización donde puedes pausar la canalización y realizar varias comprobaciones.

Cada canal tiene al menos una etapa, incluso si no la define explícitamente. También puede organizar las etapas en un gráfico de dependencia para que una etapa se ejecute antes que otra. Hay un límite de 256 trabajos por etapa.

Cuando Azure DevOps define varias etapas en una canalización, de forma predeterminada, se ejecutan secuencialmente en el orden en que las define en el archivo YAML. La excepción a esto es cuando agrega dependencias. Con las dependencias, las etapas se ejecutan en el orden de los requisitos marcados con la etiqueta dependsOn. Las tuberías deben contener al menos una etapa sin dependencias.

Las tuberías por etapas brindan mejoras y facilidad al usuario en el portal de canalizaciones (tuberías) para administrarlas correctamente. La canalización por medio de YAML reemplaza lo que logran las compilaciones como las versiones. Algunas de las ventajas que se tiene sobre las versiones es que el código YAML está con el código de la aplicación, por lo que cuando el código se tiene que ramificar, también se ramifica la canalización del archivo YAML y gracias a esto se puede modificar la compilación en su rama sin modificar las demás.


Cierre

Azure DevOps es un servicio para desarrolladores de software como servicio (SaaS), especialmente para grupos de soporte que desean diseñar trabajos, colaborar con otros equipos en el desarrollo de código, compilar y enviar aplicaciones y software. También incorpora algunas de las herramientas más avanzadas disponibles en el mercado y además es una opción extraordinaria para organizar una cadena de herramientas DevOps. Es una mezcla de las tecnologías más simples y, por lo tanto, los equipos de desarrollo pueden crear aplicaciones con las mejores prácticas. Azure DevOps funciona con configuraciones de nube pública y privada.


Checkpoint

Asegúrate de:

  • Reforzar los módulos que componen el SAAS de Azure Devops para que se realicen las actividades en cada uno de ellos.
  • Aplicar el proceso de creación de un Pipeline en DevOps para la automatización de procesos.
  • Aplicar el esquema de los archivos YAML para el despliegue continuo de un repositorio.

Bibliografía

  • Goyal, M. (2019). Create Multi Stage Pipelines with YAML in Azure DevOps. Recuperado de https://mohitgoyal.co/2019/07/30/create-multi-stage-pipelines-with-yaml-in-azure-devops/
  • Microsoft Docs. (s.f.-a). Introduction - Learn. Recuperado de https://docs.microsoft.com/en-us/learn/modules/create-release-pipeline/1-introduction
  • Microsoft Docs. (s.f.-b). Get started documentation. Recuperado de https://docs.microsoft.com/en-us/azure/devops/get-started/?view=azure-devops

La obra presentada es propiedad de ENSEÑANZA E INVESTIGACIÓN SUPERIOR A.C. (UNIVERSIDAD TECMILENIO), protegida por la Ley Federal de Derecho de Autor; la alteración o deformación de una obra, así como su reproducción, exhibición o ejecución pública sin el consentimiento de su autor y titular de los derechos correspondientes es constitutivo de un delito tipificado en la Ley Federal de Derechos de Autor, así como en las Leyes Internacionales de Derecho de Autor.

El uso de imágenes, fragmentos de videos, fragmentos de eventos culturales, programas y demás material que sea objeto de protección de los derechos de autor, es exclusivamente para fines educativos e informativos, y cualquier uso distinto como el lucro, reproducción, edición o modificación, será perseguido y sancionado por UNIVERSIDAD TECMILENIO.

Queda prohibido copiar, reproducir, distribuir, publicar, transmitir, difundir, o en cualquier modo explotar cualquier parte de esta obra sin la autorización previa por escrito de UNIVERSIDAD TECMILENIO. Sin embargo, usted podrá bajar material a su computadora personal para uso exclusivamente personal o educacional y no comercial limitado a una copia por página. No se podrá remover o alterar de la copia ninguna leyenda de Derechos de Autor o la que manifieste la autoría del material.