Introducción: Por qué CI/CD es el estándar del desarrollo moderno en .NET
El desarrollo moderno en C# y la plataforma .NET es impensable sin automatización. La ejecución manual de compilaciones, pruebas y despliegues es un camino hacia errores, pérdida de tiempo y retrasos en los lanzamientos. CI/CD (Integración Continua / Despliegue Continuo) resuelve estos problemas, haciendo que el proceso de entrega de código sea predecible y rápido.
GitHub Actions es una herramienta de automatización integrada en GitHub que es perfecta para proyectos C#. Permite configurar un pipeline directamente en el repositorio utilizando archivos YAML. En este artículo, analizaremos el ciclo completo: desde la compilación básica hasta la publicación de un paquete NuGet y el despliegue de una aplicación web.
1. Fundamentos de GitHub Actions para .NET
¿Qué es un workflow y un job?
Un workflow es un proceso automatizado que se ejecuta en respuesta a un evento (push, pull request, programación). Un workflow consta de uno o varios jobs (tareas) que se ejecutan en runners (máquina virtual con Ubuntu, Windows o macOS).
Cada job consta de pasos (steps) que pueden ejecutar comandos de shell o utilizar actions predefinidas del marketplace.
Primer workflow: compilación de un proyecto .NET
Cree en la raíz del repositorio la carpeta .github/workflows y el archivo build.yml:
name: Build .NET Project
on: push: branches: [ main ] pull_request: branches: [ main ]
jobs: build: runs-on: ubuntu-latest
steps: - uses: actions/checkout@v4 - name: Setup .NET uses: actions/setup-dotnet@v4 with: dotnet-version: '8.0.x' - name: Restore dependencies run: dotnet restore - name: Build run: dotnet build --no-restore --configuration Release - name: Run tests run: dotnet test --no-build --configuration Release --verbosity normalEste workflow se ejecuta en cada push o pull request a main. Restaura las dependencias, compila el proyecto en modo Release y ejecuta las pruebas. Si algún paso falla, el workflow se detiene y verá un estado rojo en el PR.
2. Configuración avanzada: matriz de compilaciones y almacenamiento en caché
Matriz de versiones de .NET
Para verificar la compatibilidad con diferentes versiones de .NET, use una matriz (matrix):
jobs: build: strategy: matrix: dotnet-version: ['6.0.x', '7.0.x', '8.0.x'] os: [ubuntu-latest, windows-latest] runs-on: ${{ matrix.os }}
steps: - uses: actions/checkout@v4 - name: Setup .NET ${{ matrix.dotnet-version }} uses: actions/setup-dotnet@v4 with: dotnet-version: ${{ matrix.dotnet-version }} - run: dotnet build --configuration Release - run: dotnet testEl runner ejecutará la compilación para cada combinación de SO y versión de .NET en paralelo. Esto ahorra tiempo y garantiza la compatibilidad multiplataforma.
Almacenamiento en caché de dependencias
Restaurar los paquetes NuGet cada vez lleva tiempo. Active el almacenamiento en caché:
- name: Cache NuGet packages uses: actions/cache@v4 with: path: ~/.nuget/packages key: ${{ runner.os }}-nuget-${{ hashFiles('**/*.csproj') }} restore-keys: | ${{ runner.os }}-nuget-
- name: Restore dependencies run: dotnet restoreAhora, en ejecuciones posteriores, los paquetes se restaurarán desde la caché si los archivos .csproj no han cambiado.
3. Publicación de un paquete NuGet en GitHub Packages
Si está desarrollando una biblioteca en C#, puede publicarla automáticamente en GitHub Packages al crear un lanzamiento.
Workflow para publicación
name: Publish NuGet Package
on: release: types: [published]
jobs: publish: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - name: Setup .NET uses: actions/setup-dotnet@v4