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:
- Construirá tu aplicación Spring Boot
- Creará la imagen Docker
- La subirá a Docker Hub
- 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?¶
- Checkout código: Descarga el código del repositorio
- Configurar Java: Instala Java 17
- Compilar con Maven: Genera el archivo JAR
- Login a Docker Hub: Se autentica en Docker Hub
- Construir y subir imagen: Crea la imagen Docker y la sube
- Configurar kubectl: Instala kubectl en el runner
- Configurar acceso a Kubernetes: Configura las credenciales del clúster
- 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):
Consejo
Puedes ver el progreso del workflow en la pestaña Actions de tu repositorio en GitHub.