Skip to content

lautaro-rojas/Test-RamasAmbientes

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

6 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Práctica de Pipeline CI/CD con GitHub Actions y .NET

Este repositorio es un ejercicio práctico para demostrar la configuración de un flujo de trabajo completo de Integración Continua y Despliegue Continuo (CI/CD). El proyecto utiliza GitHub Actions para automatizar el proceso de compilación, pruebas y despliegue de una aplicación de consola .NET a través de múltiples ambientes.

El objetivo es simular un entorno de desarrollo profesional, aplicando una estrategia de ramificación Git Flow simplificada y utilizando las funcionalidades de GitHub para garantizar la calidad y seguridad del código antes de que llegue a producción.


🚀 Habilidades y Conceptos Demostrados

Este proyecto pone en práctica los siguientes conceptos clave del mundo DevOps:

  • Control de Versiones con Git: Creación y gestión de un flujo de trabajo con múltiples ramas (develop, test, preprod, main).
  • Estrategia de Ramificación: Implementación de un flujo de promoción de código secuencial, asegurando que los cambios pasen por todas las etapas de validación.
  • CI/CD con GitHub Actions: Creación de un pipeline de automatización desde cero utilizando archivos de flujo de trabajo en formato YAML.
  • Gestión de Ambientes en GitHub: Configuración de ambientes (Test, Pre-produccion, Produccion) para asociar reglas de protección específicas a cada etapa del despliegue.
  • Reglas de Protección de Ramas: Implementación de restricciones como:
    • Despliegues condicionales basados en la rama.
    • Revisores obligatorios para aprobar despliegues a producción, simulando un control de calidad final.
  • Automatización de Pruebas: Integración del comando dotnet test en el pipeline para asegurar que ningún cambio que rompa el código existente sea promocionado.

workflow-diagram Flujo de Trabajo del Pipeline

El pipeline está diseñado para seguir un flujo estricto de promoción entre ambientes:

develop ➡️ test ➡️ preprod ➡️ main

  1. Desarrollo (develop): Todo el código nuevo se integra en esta rama. Un push a develop solo dispara el job de pruebas.
  2. Pruebas (test): El código se fusiona en test. Un push a esta rama ejecuta las pruebas y, si pasan, despliega al ambiente de Test.
  3. Pre-producción (preprod): Una vez validado en Test, el código se fusiona en preprod. Un push aquí ejecuta pruebas y despliega al ambiente de Pre-producción.
  4. Producción (main): Finalmente, el código se fusiona en main. Un push aquí ejecuta pruebas y lanza el despliegue a Producción, el cual queda en pausa hasta que un revisor autorizado lo apruebe manualmente.

Haga clic aquí para ver el ejercicio completo paso a paso

Paso 1: Configuración Inicial del Repositorio y Ramas

  1. Crear el Repositorio: Se creó un repositorio público en GitHub con un archivo README inicial.
  2. Clonar y Crear Ramas: Se clonó el repositorio y se crearon las ramas develop, test y preprod localmente.
    git branch develop
    git branch test
    git branch preprod
  3. Subir Ramas: Se subieron todas las ramas al repositorio remoto.
    git push --all

Paso 2: Configurar Ambientes y Restricciones

Se configuraron los siguientes ambientes en Settings > Environments:

  • Test: Protegido para aceptar despliegues solo desde la rama test.
  • Pre-produccion: Protegido para aceptar despliegues solo desde la rama preprod.
  • Produccion: Protegido para aceptar despliegues solo desde main y con la regla Required reviewers activada.

Paso 3: Crear una Aplicación Simple en C#

  1. Crear Proyecto .NET: En la rama develop, se creó una solución con una aplicación de consola y un proyecto de pruebas MSTest.
    dotnet new sln -n MiAppSolucion
    dotnet new console -n MiApp.App -o MiApp.App
    dotnet new mstest -n MiApp.Tests -o MiApp.Tests
    dotnet sln add MiApp.App/MiApp.App.csproj MiApp.Tests/MiApp.Tests.csproj
    dotnet add MiApp.Tests/MiApp.Tests.csproj reference MiApp.App/MiApp.App.csproj
  2. Escribir Código y Pruebas: Se implementó una función simple de suma y una prueba unitaria para validarla.

Paso 4: Automatizar con GitHub Actions

Se creó el archivo .github/workflows/despliegue-completo.yml con el siguiente contenido para definir el pipeline:

name: Pipeline de Despliegue Completo CI/CD con .NET

on:
  push:
    branches: [ "main", "preprod", "test", "develop" ]

jobs:
  test-code:
    name: 1. Probar Código .NET
    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
      - name: Test
        run: dotnet test --no-build --verbosity normal

  deploy-test:
    name: 2. Desplegar a Test
    needs: test-code
    if: github.ref == 'refs/heads/test'
    runs-on: ubuntu-latest
    environment: Test
    steps:
      - run: echo "Desplegando a Test..."

  deploy-preprod:
    name: 3. Desplegar a Pre-producción
    needs: test-code
    if: github.ref == 'refs/heads/preprod'
    runs-on: ubuntu-latest
    environment: Pre-produccion
    steps:
      - run: echo "Desplegando a Pre-producción..."

  deploy-prod:
    name: 4. Desplegar a Producción
    needs: test-code
    if: github.ref == 'refs/heads/main'
    runs-on: ubuntu-latest
    environment: Produccion
    steps:
      - run: echo "Desplegando a Producción..."

Paso 5: Probar el Flujo Completo

Se simuló la promoción de un cambio fusionando las ramas en secuencia y subiendo los cambios a GitHub, verificando en la pestaña "Actions" que cada job se ejecutara correctamente y que el despliegue a producción esperara la aprobación manual.

# 1. Promocionar a Test
git checkout test
git merge develop
git push origin test

# 2. Promocionar a Pre-producción
git checkout preprod
git merge test
git push origin preprod

# 3. Promocionar a Producción
git checkout main
git merge preprod
git push origin main

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages