Saltar a contenido

GitHub Actions

Despliegue Automatizado con GitHub Actions

Para automatizar el despliegue a Kubernetes cada vez que haces push a la rama principal, puedes usar GitHub Actions.

Estructura de Archivos

Crea la siguiente estructura en tu proyecto:

proyecto/
├── .github/
│   └── workflows/
│       └── deploy.yaml
├── k8s/
│   └──  deployment.yaml
├── src/
└── pom.xml

Paso a Paso

1. Crear el Archivo del Workflow

Crea el archivo .github/workflows/deploy.yaml en tu repositorio (ver ejemplo completo abajo).

2. Hacer Push al Repositorio

Cuando hagas push a la rama main, el workflow se ejecutará automáticamente y:

  1. Construirá tu aplicación Spring Boot
  2. Creará la imagen Docker
  3. La subirá a Docker Hub
  4. Desplegará en Kubernetes

Archivo de Ejemplo: deploy.yaml

Este workflow hace todo el proceso de forma automática:

name: Build and Deploy with MicroK8s

on:
  push:
    branches: [main]

jobs:
  build-and-publish:
    name: Build and Push Image to GHCR
    runs-on: ubuntu-latest

    permissions:
      contents: read
      packages: write

    steps:
    - name: Mostrar rama actual
      run: "echo 'Rama actual: ${{ github.ref }}'"

    - name: Checkout code
      uses: actions/checkout@v3

    - name: Set OWNER_LC
      run: echo "OWNER_LC=${GITHUB_REPOSITORY_OWNER,,}" >> $GITHUB_ENV

    - name: Log in to GHCR
      uses: docker/login-action@v3
      with:
        registry: ghcr.io
        username: ${{ github.actor }}
        password: ${{ secrets.GITHUB_TOKEN }}

    - name: Build Docker image
      run: docker build -t ghcr.io/${OWNER_LC}/<nombredelrepo>:latest .

    - name: Push Docker image
      run: docker push ghcr.io/${OWNER_LC}/<nombredelrepo>:latest

    - name: Print pushed image URL
      run: 'echo "Imagen publicada: ghcr.io/${OWNER_LC}/<nombredelrepo>:latest"'

  deploy-onpremise:
    name: Deploy on MicroK8s On-Premise
    runs-on: main
    needs: build-and-publish

    steps:
    - name: Checkout repo
      uses: actions/checkout@v3
    - name: Apply Kubernetes deployment
      run: sudo microk8s kubectl apply -f k8s/deployment.yaml
    - name: Restart Kubernetes deployment
      run: sudo microk8s kubectl rollout restart deployment/<nombredeplyment> -n <nombrenamespace>

¿Qué hace cada paso?

  1. Checkout código: Descarga el código del repositorio
  2. Configurar Java: Instala Java 17
  3. Compilar con Maven: Genera el archivo JAR
  4. Login a Docker Hub: Se autentica en Docker Hub
  5. Construir y subir imagen: Crea la imagen Docker y la sube
  6. Configurar kubectl: Instala kubectl en el runner
  7. Configurar acceso a Kubernetes: Configura las credenciales del clúster
  8. Desplegar a Kubernetes: Aplica los archivos YAML y reinicia el deployment

Verificar el Despliegue

Después de que el workflow termine, puedes verificar (Esto se hace con el profesor):

kubectl get pods
kubectl get deployments
kubectl logs <nombre-pod>

Consejo

Puedes ver el progreso del workflow en la pestaña Actions de tu repositorio en GitHub.