CI/CD para proyectos C#: GitHub Actions de la A a la Z

Entrenador de Python en Línea para Principiantes

Aprende Python fácilmente sin sobrecargarte de teoría. Resuelve tareas prácticas con verificación automática, recibe pistas y escribe código directamente en el navegador, sin instalar nada.

Start Course

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 normal

Este 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 test

El 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 restore

Ahora, 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

Blogs

Book Recommendations