CI/CD para APIs .NET con GitHub Actions y Azure App Service
Introducción
En el desarrollo moderno de software, una de las principales necesidades es automatizar las tareas relacionadas con la compilación, validación y despliegue de aplicaciones.
Tradicionalmente, cada vez que un desarrollador realizaba cambios en una aplicación era necesario compilar el proyecto manualmente, ejecutar pruebas y publicar una nueva versión en el servidor. Este proceso consume tiempo, aumenta la probabilidad de errores humanos y dificulta mantener un flujo de trabajo eficiente.
Para resolver este problema surgen las prácticas de Integración Continua (CI) y Despliegue Continuo (CD), que permiten automatizar todo el ciclo de vida de una aplicación.
En este tutorial se muestra cómo crear una API REST con ASP.NET Core, configurar un pipeline de CI/CD mediante GitHub Actions y desplegar automáticamente la aplicación en Azure App Service.
El objetivo es conseguir que, cada vez que se realice un cambio en el código y se suba al repositorio, el proyecto se compile automáticamente, ejecute sus pruebas y se despliegue en la nube sin intervención manual.
¿Qué es CI/CD?
Integración Continua (CI)
La Integración Continua consiste en automatizar la validación del código cada vez que se realiza un cambio en el repositorio.
Entre las tareas más habituales encontramos:
- Restauración de dependencias.
- Compilación del proyecto.
- Ejecución de pruebas automáticas.
- Generación de artefactos.
Gracias a ello es posible detectar errores rápidamente y garantizar que el código sigue funcionando correctamente.
Despliegue Continuo (CD)
El Despliegue Continuo amplía el proceso anterior permitiendo publicar automáticamente una nueva versión de la aplicación cuando todas las validaciones han finalizado correctamente.
Sus principales beneficios son:
- Menor riesgo de errores.
- Despliegues más rápidos.
- Mayor calidad del software.
- Automatización de tareas repetitivas.
- Mayor productividad para los equipos de desarrollo.
¿Por qué las empresas utilizan CI/CD?
Actualmente, la mayoría de equipos de desarrollo trabajan sobre aplicaciones que evolucionan constantemente. En proyectos donde colaboran varios desarrolladores, realizar despliegues manuales puede provocar errores, retrasos e incluso interrupciones del servicio.
Por este motivo, las empresas adoptan metodologías DevOps y pipelines CI/CD que permiten automatizar gran parte del proceso de desarrollo.
Entre las ventajas más importantes destacan:
- Reducción de errores humanos.
- Detección temprana de fallos.
- Entregas más rápidas.
- Mayor calidad del software.
- Despliegues repetibles y consistentes.
- Mejor colaboración entre equipos.
Gracias a estas prácticas, los desarrolladores pueden centrarse en aportar valor al producto en lugar de dedicar tiempo a tareas repetitivas de compilación y despliegue.
Tecnologías utilizadas
Para la realización de este proyecto se han utilizado las siguientes tecnologías:
- ASP.NET Core 8
- C#
- Git
- GitHub
- GitHub Actions
- Azure App Service
- Swagger
- xUnit
Cada una de estas herramientas cumple una función específica dentro de la solución, permitiendo automatizar el proceso completo desde el desarrollo hasta la publicación final.
Objetivo del proyecto
El objetivo consiste en desarrollar una API REST sencilla para consultar productos y automatizar completamente su proceso de compilación, validación y despliegue.
La arquitectura implementada es la siguiente:
Desarrollador
↓
Git
↓
GitHub
↓
GitHub Actions
↓
Build + Tests
↓
Deploy
↓
Azure App Service
↓
API Pública
De esta forma, cualquier cambio realizado en el código puede llegar automáticamente a producción pasando previamente por todas las validaciones necesarias.
Creación de la API
Creación del proyecto
Para comenzar se crea una solución llamada ProductApiDemo.
Dentro de esta solución se crean dos proyectos:
- ProductApi
- ProductApi.Tests
El primero contiene la API REST y el segundo contiene las pruebas automáticas.
Los comandos utilizados fueron:
dotnet new sln -n ProductApiDemo
dotnet new webapi -n ProductApi
dotnet new xunit -n ProductApi.Tests
Posteriormente se agregan ambos proyectos a la solución y se establece la referencia necesaria entre ellos.
Modelo de datos
La API utiliza un modelo llamado Product.
Este modelo representa un producto mediante tres propiedades:
- Id
- Name
- Price
Su finalidad es disponer de datos de ejemplo para demostrar el funcionamiento de la API y del pipeline CI/CD.
Creación del controlador
Se implementa un controlador llamado ProductsController.
Este controlador expone dos endpoints:
Obtener todos los productos
GET /api/products
Obtener un producto por identificador
GET /api/products/{id}
Para simplificar la demostración se utiliza una colección de productos almacenada en memoria.
Gracias a ello podemos centrarnos en el proceso de automatización sin necesidad de incorporar una base de datos.
Documentación automática con Swagger
Swagger permite generar documentación interactiva para las APIs REST.
Gracias a esta herramienta es posible:
- Consultar los endpoints disponibles.
- Ejecutar peticiones desde el navegador.
- Visualizar las respuestas de la API.
- Probar cambios de forma rápida.
Para habilitar Swagger se configura el archivo Program.cs y, una vez ejecutada la aplicación, la documentación queda accesible desde el navegador.
Esto facilita enormemente la validación de la API durante el desarrollo.
Pruebas automáticas
Uno de los pilares fundamentales de CI/CD es la ejecución automática de pruebas.
Para ello se creó un proyecto de pruebas utilizando xUnit.
Las pruebas implementadas verifican aspectos básicos del modelo Product, como:
- Que el nombre del producto sea correcto.
- Que el precio sea mayor que cero.
Aunque se trata de pruebas sencillas, permiten demostrar cómo GitHub Actions puede validar automáticamente el código antes de realizar el despliegue.
Configuración de GitHub
Una vez finalizada la API, se crea un repositorio en GitHub y se sube el código fuente mediante Git.
Los pasos básicos consisten en:
git init
git add .
git commit -m "Versión inicial"
git push
A partir de ese momento GitHub almacena el código y permite utilizar GitHub Actions para automatizar procesos.
Automatización mediante GitHub Actions
GitHub Actions permite ejecutar tareas automáticamente cuando se producen determinados eventos dentro del repositorio.
Para ello se crea un workflow dentro de la carpeta:
.github/workflows
Este workflow se ejecuta automáticamente cada vez que se realiza un push a la rama principal.
Las tareas automatizadas son:
- Descargar el código fuente.
- Instalar .NET 8.
- Restaurar dependencias.
- Compilar el proyecto.
- Ejecutar pruebas automáticas.
- Publicar la aplicación.
- Desplegar en Azure.
Gracias a este proceso, el desarrollador no necesita ejecutar manualmente ninguna de estas tareas.
Azure App Service
Para alojar la aplicación se utilizó Azure App Service.
Azure App Service es una plataforma PaaS (Platform as a Service) que permite desplegar aplicaciones web y APIs sin necesidad de administrar servidores.
Entre sus ventajas destacan:
- Escalabilidad.
- Alta disponibilidad.
- Integración con GitHub.
- Despliegues rápidos.
- Administración simplificada.
Una vez desplegada, la aplicación queda accesible públicamente mediante una URL proporcionada por Azure.
Configuración del despliegue automático
Para conectar GitHub Actions con Azure se utilizó un Publish Profile.
Este perfil contiene la configuración necesaria para publicar la aplicación en Azure App Service.
Por motivos de seguridad, el perfil de publicación se almacena como secreto dentro del repositorio mediante GitHub Secrets.
De esta forma las credenciales no quedan expuestas en el código fuente y el despliegue puede realizarse de forma segura.
Pipeline CI/CD completo
El pipeline final se divide en dos fases principales.
Build and Test
Durante esta fase se realizan las siguientes tareas:
- Restauración de dependencias.
- Compilación del proyecto.
- Ejecución de pruebas automáticas.
- Publicación de la aplicación.
Si cualquiera de estas tareas falla, el proceso se detiene automáticamente.
Deploy
Si la fase anterior finaliza correctamente, se inicia el despliegue automático.
Durante esta etapa GitHub Actions publica la nueva versión de la aplicación en Azure App Service.
Gracias a esta automatización, cualquier cambio validado puede llegar a producción en cuestión de minutos.
Resultado final
Una vez completado el pipeline, GitHub Actions muestra todas las tareas ejecutadas correctamente.
La aplicación queda publicada en Azure y accesible desde Internet.
Para comprobar el funcionamiento se realizó una modificación en uno de los productos de ejemplo. Tras realizar un commit y ejecutar un push al repositorio, GitHub Actions lanzó automáticamente el pipeline y desplegó la nueva versión en Azure.
Esto demuestra que el flujo CI/CD funciona correctamente y que los cambios realizados localmente llegan automáticamente a la aplicación publicada.
Problemas encontrados
Durante la implementación surgieron algunos inconvenientes relacionados con la configuración inicial de Azure App Service y GitHub Actions.
La principal dificultad fue establecer correctamente la comunicación entre GitHub y Azure para automatizar el despliegue.
Una vez configurado el perfil de publicación y almacenado como secreto en GitHub, el pipeline funcionó correctamente.
También fue importante asegurar la compatibilidad entre las versiones de .NET utilizadas localmente y las utilizadas durante la ejecución del workflow.
Estos problemas permitieron comprender mejor el funcionamiento interno de las herramientas y reforzar la configuración final del proyecto.
Beneficios obtenidos con la solución implementada
Tras completar la implementación del pipeline CI/CD se han obtenido varios beneficios prácticos.
En primer lugar, cualquier cambio realizado en el código puede validarse automáticamente antes de llegar al entorno de producción.
Además, el proceso de despliegue se realiza de forma completamente automática, reduciendo significativamente el tiempo necesario para publicar nuevas versiones.
Entre los beneficios más relevantes destacan:
- Automatización completa del ciclo de despliegue.
- Reducción del riesgo de errores manuales.
- Validación automática mediante pruebas.
- Mayor rapidez en la entrega de nuevas funcionalidades.
- Mejor trazabilidad de los cambios realizados.
- Facilidad para escalar el proyecto en el futuro.
Este tipo de automatización constituye una práctica habitual en entornos profesionales y representa uno de los pilares fundamentales de la cultura DevOps.
Recomendaciones
Para proyectos reales recomiendo:
- Implementar pruebas automáticas más completas.
- Separar los entornos de desarrollo, pruebas y producción.
- Utilizar ramas de trabajo y pull requests.
- Almacenar credenciales mediante secretos.
- Revisar periódicamente los resultados de los pipelines.
- Automatizar también los procesos de monitorización y alertas.
Estas prácticas ayudan a mejorar la calidad y estabilidad de las aplicaciones.
Posibles mejoras
A partir de esta solución podrían incorporarse nuevas funcionalidades como:
- Base de datos SQL Server.
- Autenticación de usuarios.
- Contenedores Docker.
- Azure Container Apps.
- Kubernetes.
- Monitorización con Application Insights.
- Análisis de calidad mediante SonarQube.
Todas estas mejoras permitirían acercar la solución a escenarios empresariales más complejos.
Conclusiones
La automatización de procesos se ha convertido en una necesidad dentro del desarrollo moderno de software.
En este proyecto se ha demostrado cómo crear una API con ASP.NET Core y automatizar completamente su ciclo de vida mediante GitHub Actions y Azure App Service.
Gracias a la implementación del pipeline CI/CD, cada cambio realizado en el código pasa automáticamente por una fase de validación, pruebas y despliegue antes de estar disponible para los usuarios.
Además de simplificar el trabajo del desarrollador, esta metodología mejora la calidad del software, reduce errores y acelera la entrega de nuevas versiones.
Por todo ello, CI/CD se ha convertido en una de las prácticas más utilizadas dentro de los equipos de desarrollo actuales y constituye una habilidad fundamental para cualquier profesional del ámbito DevOps y Cloud.
Datos del autor
Autor: Sergio Navas
Máster: Desarrollo Full Stack + Arquitecturas Cloud
Centro: Tajamar Tech
Año académico: 2025-2026
Recursos:
Deploy by Using GitHub Actions – Azure App Service | Microsoft Learn
Deploying .NET to Azure App Service – GitHub Docs
Código fuente:
https://github.com/Navas99/ProductApiDemo
Vídeo demostrativo:
CI CD para APIs NET con GitHub Actions y Azure App Service.mp4