Azure DevOps

Azure DevOps – Automatiza la firma de código y el despliegue continuo en la nube

Descripción del programa Azure DevOps

Azure DevOps es una plataforma integral de Microsoft que proporciona un conjunto de herramientas para gestionar el ciclo de vida completo del desarrollo de software. Ofrece servicios en la nube para la planificación de proyectos mediante Azure Boards, el control de versiones con Azure Repos, la integración y entrega continuas a través de Azure Pipelines, la gestión de artefactos con Azure Artifacts y la planificación de pruebas manuales y exploratorias mediante Azure Test Plans. Su función principal es orquestar y automatizar el flujo de trabajo de los equipos de desarrollo, desde la idea inicial hasta la puesta en producción del software.

La característica más destacada de Azure DevOps es su potente motor de pipelines de CI/CD (Integración Continua y Despliegue Continuo). Este servicio permite definir flujos de trabajo automatizados mediante código YAML o una interfaz visual clásica para compilar el código fuente, ejecutar pruebas unitarias y de integración, y desplegar la aplicación resultante en múltiples entornos y plataformas de nube. Por ello, se ha convertido en una pieza central para miles de equipos que buscan implementar prácticas de DevOps y aumentar la frecuencia y la calidad de sus entregas de software.

Cabe destacar que Azure DevOps tiene sus raíces en Team Foundation Server (TFS), lanzado por Microsoft en 2005 como una solución local para la gestión del ciclo de vida de las aplicaciones. En 2018, Microsoft renombró y evolucionó su oferta en la nube Visual Studio Team Services (VSTS) para dar paso a Azure DevOps, consolidando un conjunto de servicios modernos y escalables. En este sentido, la plataforma representa la madurez de más de una década de experiencia de Microsoft en herramientas para desarrolladores, ofreciendo ahora una experiencia unificada y conectada con el ecosistema de Azure.

¿Necesitas una plataforma unificada para planificar, desarrollar, firmar y desplegar tus aplicaciones de forma automatizada y colaborativa?

Características clave de Azure DevOps

1. Integración continua y entrega continua

El servicio Azure Pipelines permite automatizar la compilación y el despliegue de aplicaciones en cualquier nube o sistema local. Es compatible con una amplia gama de lenguajes de programación como .NET, Java, Python, Node.js, Go, C++ y muchos otros. Asimismo, proporciona agentes hospedados por Microsoft con distintas herramientas preinstaladas y la posibilidad de configurar agentes autohospedados en máquinas virtuales propias para tener un control total sobre el entorno de ejecución.

2. Firma de código integrada en pipelines

Una funcionalidad crítica para los desarrolladores de software de escritorio es la capacidad de firmar digitalmente los ejecutables como parte del proceso de compilación. Azure DevOps se integra perfectamente con SignTool.exe a través de sus agentes Windows, lo que permite aplicar firmas SHA256 con sellado de tiempo de manera automatizada. Por ello, elimina la necesidad de que un desarrollador firme manualmente cada build, garantizando que todas las versiones liberadas al público estén verificadas y sean de confianza para los sistemas operativos y los antivirus.

3. Gestión segura de secretos y certificados

Azure DevOps incluye una característica llamada Secure Files dentro de la sección Library de los Pipelines. Esta biblioteca permite subir archivos sensibles como certificados de firma de código en formato .PFX, claves SSH o perfiles de aprovisionamiento de Apple. Los archivos se almacenan cifrados en reposo y solo están disponibles para los agentes de compilación durante la ejecución de un pipeline autorizado, lo que garantiza que las credenciales y los certificados privados nunca queden expuestos en el código fuente ni en los artefactos públicos.

4. Planificación ágil y seguimiento de trabajo

Con Azure Boards, los equipos pueden planificar el trabajo mediante metodologías ágiles como Scrum o Kanban. Ofrece tableros personalizables, trabajo pendiente, consultas y una integración profunda con GitHub y el resto de servicios de Azure DevOps. Esta característica proporciona una visibilidad completa del estado del proyecto, desde las épicas y características hasta las tareas y los errores, conectando directamente el código y las compilaciones con los elementos de trabajo.

5. Control de versiones y gestión de artefactos

Azure DevOps proporciona Azure Repos, un servicio de repositorios Git privados e ilimitados en la nube. Adicionalmente, Azure Artifacts permite crear y compartir paquetes de NuGet, npm, Maven o Python con el equipo o la organización. Esta integración nativa facilita la gestión de dependencias y la publicación de componentes reutilizables, acelerando el desarrollo y mejorando la consistencia entre proyectos.

Explicación detallada de las funcionalidades

El núcleo de la automatización en Azure DevOps reside en los Pipelines, que se definen mediante archivos YAML versionados junto al código fuente, bajo el paradigma de Pipeline as Code. Un pipeline típico se divide en etapas, trabajos y pasos. Dentro de un paso en un agente Windows, los desarrolladores pueden invocar tareas predefinidas del marketplace o ejecutar directamente comandos de PowerShell o del Símbolo del sistema. Esto permite, por ejemplo, descargar un certificado de firma de código desde la biblioteca de archivos seguros mediante la tarea DownloadSecureFile@1 y, seguidamente, ejecutar SignTool.exe con los parámetros adecuados para firmar un archivo .EXE o .MSI generado en la compilación.

Un aspecto fundamental de la plataforma es la gestión de la identidad y los permisos. Azure DevOps se integra con Azure Active Directory (Azure AD) para la autenticación de usuarios y el control de acceso basado en roles. A nivel de pipeline, se pueden configurar entornos con aprobaciones y comprobaciones manuales antes de que un despliegue llegue a producción. Para la firma de código, esta granularidad es vital, ya que permite restringir qué pipelines o qué ramas del repositorio tienen permiso para consumir el certificado de firma almacenado como archivo seguro, evitando así usos indebidos o accidentales del valioso certificado de firma de código.

Por último, la integración con servicios externos amplía enormemente sus capacidades. Azure DevOps se conecta de forma nativa con GitHub, Docker Hub, SonarQube y cientos de herramientas más a través de un rico ecosistema de extensiones en Visual Studio Marketplace. Para el caso concreto de la firma de código, existen extensiones como la tarea Code Signing de la comunidad, que simplifica aún más el proceso al abstraer la llamada a SignTool.exe. Esta extensión permite seleccionar el archivo seguro que contiene el certificado .PFX, definir el servidor de sello de tiempo como el de DigiCert y especificar el algoritmo SHA256, todo desde una interfaz gráfica dentro del editor de pipelines.

Descarga e instalación de Azure DevOps

  • Página oficial: Azure DevOps Services
  • Versión actual: Servicio en la nube con actualización continua
  • Últimas versiones: Actualizaciones semanales y mensuales del servicio
  • Tamaño: No aplica, es un servicio en la nube
  • Sistemas operativos compatibles: Multiplataforma (Windows, Linux, macOS) para agentes
  • Requisitos mínimos: Navegador web para la interfaz, agente de compilación para pipelines
  • Licencia: Freemium, 5 usuarios básicos gratuitos, 1 trabajo paralelo de CI/CD gratuito
  • Idiomas: Múltiples, incluido el español
  • Soporte técnico: Documentación oficial de Microsoft Learn, foros de la comunidad, soporte técnico de Azure

Cómo usar Azure DevOps

Tras registrarte con una cuenta Microsoft en dev.azure.com, tu primer paso será crear una organización y un proyecto. Una vez dentro, elige el servicio que deseas utilizar primero, aunque lo más habitual es empezar por Repos para subir tu código fuente. Si tu código ya está en GitHub, puedes clonarlo fácilmente. A continuación, dirígete a Pipelines y utiliza el asistente de creación para conectar tu repositorio. El sistema analizará tu código y te sugerirá una plantilla de pipeline YAML según la tecnología que utilices, como ASP.NET Core, Node.js o Python.

El flujo de trabajo principal para la firma de código en un pipeline Windows comienza por subir tu certificado .PFX a la biblioteca de archivos seguros. Ve a Pipelines > Library > Secure files y sube el archivo. Luego, edita tu pipeline YAML e incluye la tarea DownloadSecureFile@1 para traer el certificado al agente. Seguidamente, añade un paso de PowerShell o de línea de comandos que invoque a SignTool.exe. La ruta típica de esta herramienta en un agente hospedado por Microsoft es C:\Program Files (x86)\Windows Kits\10\bin\10.0.22621.0\x64\signtool.exe.

El comando usará la variable de entorno $(Agent.TempDirectory) para localizar el certificado descargado y aplicará la firma con los parámetros /fd SHA256 y /tr con la URL de tu servidor de sello de tiempo.

Para un uso más avanzado, puedes explorar las extensiones del marketplace. Busca e instala la extensión Code Signing desde Visual Studio Marketplace para tu organización de Azure DevOps.

Esta extensión añade una nueva tarea gráfica a tus pipelines que simplifica la configuración. En lugar de escribir manualmente el comando de SignTool, solo tendrás que seleccionar el archivo seguro, introducir la contraseña en una variable secreta, definir el patrón de archivos a firmar, por ejemplo **/*.exe, y elegir el algoritmo SHA256. Un atajo útil es marcar la opción para que el pipeline falle si la firma no es exitosa, garantizando que ningún binario sin firmar llegue al entorno de producción.

Observaciones sobre el programa Azure DevOps

Azure DevOps se diferencia técnicamente de la competencia por su profunda integración vertical con todo el ecosistema de Microsoft, especialmente con Azure Active Directory y los servicios de la nube de Azure. Mientras que otras herramientas de CI/CD como Jenkins requieren una gestión independiente de la infraestructura y los plugins, Azure DevOps ofrece una experiencia SaaS cohesiva y lista para usar desde el primer minuto. Esta cohesión técnica otorga a las empresas una gran confianza y control, sabiendo que sus datos residen en una plataforma empresarial con certificaciones de cumplimiento como ISO 27001 y SOC, y que el tiempo de actividad está respaldado por un SLA del 99.9%.

Los beneficios prácticos para un equipo de desarrollo son inmediatos y medibles. En primer lugar, la velocidad de entrega, ya que la automatización de la compilación y la firma de código reduce el tiempo de lanzamiento de días a minutos. En segundo lugar, la seguridad, puesto que los secretos y certificados no circulan por los equipos locales de los desarrolladores, sino que se inyectan de forma segura en el momento de la compilación. En tercer lugar, la visibilidad, dado que el estado de cada cambio de código, prueba y despliegue es visible para todo el equipo en un panel centralizado, lo que facilita la detección temprana de problemas.

El desarrollador detrás de Azure DevOps es Microsoft Corporation, uno de los líderes mundiales en tecnología y plataformas de desarrollo de software. Con una trayectoria que abarca desde sistemas operativos como Windows hasta entornos de desarrollo integrado como Visual Studio, Microsoft ha consolidado en Azure DevOps su experiencia en herramientas para equipos de ingeniería. Su compromiso con la plataforma se refleja en las actualizaciones constantes y en la integración de características de vanguardia como el soporte para GitHub Actions o la firma de artefactos con Trusted Signing, su servicio de firma de código basado en la nube.

Respecto a las actualizaciones, al ser un servicio en la nube, Azure DevOps se actualiza de forma continua y transparente para el usuario. Cada pocas semanas, se publican nuevas funcionalidades y mejoras en el portal de Azure DevOps. Las release notes oficiales documentan estos cambios, que pueden incluir desde mejoras en la interfaz de usuario hasta nuevas capacidades en los pipelines, como la incorporación de nuevos sistemas operativos para los agentes hospedados o la actualización de las versiones de SignTool.exe disponibles.

En cuanto a versiones especiales, no existe una versión portable dado que es un servicio web. Sin embargo, para organizaciones con altos requisitos de privacidad o normativas que impiden el uso de la nube pública, existe Azure DevOps Server, anteriormente conocido como Team Foundation Server. Esta edición se instala y gestiona en servidores locales, ofreciendo una funcionalidad casi idéntica a la versión en la nube pero bajo el control total del departamento de TI de la empresa.

Como funcionalidad extra relevante, destaca la integración con Trusted Signing, el nuevo servicio de firma de código de Azure. Este servicio permite realizar firmas sin necesidad de gestionar certificados .PFX físicos ni tokens hardware, ya que la clave privada reside de forma segura en la nube de Azure. Azure DevOps se integra con Trusted Signing a través de la extensión dlib, ofreciendo un modelo de seguridad moderno que cumple con los más estrictos estándares de la industria y elimina los riesgos asociados al robo o pérdida de los certificados de firma tradicionales.

Limitaciones importantes

  • La capa gratuita de Azure DevOps está limitada a 5 usuarios básicos y un único trabajo de pipeline paralelo. Para equipos más grandes o que necesiten compilar varios proyectos simultáneamente, es necesario adquirir licencias adicionales o trabajos paralelos extra.
  • La firma de código con SignTool.exe en agentes hospedados por Microsoft requiere que el certificado se cargue como Secure File. Estos archivos tienen un límite de tamaño de 10 MB, lo cual es más que suficiente para un .PFX, pero puede ser una restricción para otros artefactos.
  • La configuración de agentes autohospedados para la firma de código con tokens hardware USB es compleja. Dado que los agentes de Microsoft son efímeros y virtualizados, si tu certificado reside en un dispositivo físico, deberás configurar y mantener tus propias máquinas virtuales como agentes, perdiendo parte de la ventaja de la gestión serverless.

Alternativa recomendada

Para aquellos equipos que ya tienen su código fuente en GitHub y buscan una solución de automatización más ligera y sin la sobrecarga de gestionar una plataforma completa de DevOps, GitHub Actions representa una alternativa sólida y profundamente integrada. Mientras que Azure DevOps brilla por su suite completa de planificación y seguimiento, GitHub Actions se centra exclusivamente en la automatización de flujos de trabajo de CI/CD directamente desde el repositorio. En este contexto, la firma de código con SignTool.exe se configura de manera muy similar, mediante un flujo de trabajo YAML y la carga de secretos.

La principal ventaja de GitHub Actions frente a Azure DevOps para proyectos pequeños y medianos es su simplicidad y el modelo de precios por minuto de ejecución. Para repositorios públicos, GitHub Actions es completamente gratuito, mientras que para los privados ofrece una cantidad sustancial de minutos al mes sin coste. Esto evita la gestión de usuarios y licencias de Azure DevOps. Si tu prioridad es tener el código y la automatización de construcción y firma en el mismo lugar, con la comunidad más grande de desarrolladores, la integración nativa con GitHub Actions es una opción muy atractiva. Si, por el contrario, necesitas un conjunto completo de herramientas de planificación ágil y seguimiento de proyectos, descarga Azure DevOps desde su página oficial.

Sección FAQ

¿Azure DevOps es gratis o de pago?

Azure DevOps funciona con un modelo Freemium. La capa gratuita incluye 5 usuarios con licencia Basic, acceso ilimitado a partes interesadas y 1 trabajo paralelo de CI/CD con 1.800 minutos al mes para agentes hospedados por Microsoft. Para equipos más grandes o con mayor demanda de compilaciones, se pueden adquirir licencias de usuario y trabajos paralelos adicionales de pago por uso.

¿Funciona en Linux, macOS, Windows 10 y Windows 11?

Azure DevOps es un servicio en la nube, por lo que su interfaz web funciona en cualquier sistema operativo con un navegador moderno, incluyendo Windows, macOS y Linux. En cuanto a los agentes de compilación, Azure Pipelines ofrece agentes hospedados por Microsoft para Windows, macOS y Linux, lo que permite ejecutar flujos de trabajo en la plataforma que mejor se adapte a tu pila tecnológica.

¿Qué diferencia a Azure DevOps de otras alternativas similares?

La diferencia fundamental radica en que Azure DevOps es una suite completa para la gestión del ciclo de vida del desarrollo, no solo una herramienta de CI/CD. Integra planificación ágil, control de versiones, automatización de despliegues, gestión de artefactos y pruebas manuales. Otras alternativas como GitHub Actions o GitLab CI son excelentes para automatización, pero Azure DevOps ofrece una solución vertical más amplia con una profunda integración en el ecosistema Azure.

¿Puedo firmar digitalmente un archivo con Azure DevOps si mi certificado está en un token USB?

Técnicamente sí, pero no en los agentes hospedados por Microsoft. Los agentes en la nube son máquinas virtuales efímeras a las que no se puede conectar un token USB físico. Para usar un certificado en token hardware, debes configurar tus propios agentes autohospedados en una máquina virtual o física bajo tu control. Una alternativa moderna es migrar a Trusted Signing, el servicio de firma en la nube de Azure, que elimina la necesidad de dispositivos físicos.

¿Cómo se configura la firma de código en un pipeline YAML de Azure DevOps?

Para configurarlo, primero sube tu certificado .PFX a Library > Secure files. Luego, en tu pipeline YAML, añade un paso que use la tarea DownloadSecureFile@1 para descargar el certificado al agente. A continuación, ejecuta SignTool.exe con un script de PowerShell o línea de comandos, referenciando el certificado descargado en la variable $(Agent.TempDirectory) y proporcionando los parámetros de firma como /fd SHA256 y /tr con la URL de sello de tiempo. La extensión Code Signing del marketplace simplifica este proceso con una interfaz gráfica.