info ci/cd
Some checks are pending
Primer flujo de trabajo CI/CD (Build, Test and Push Docker Image) / build-and-push (push) Waiting to run

This commit is contained in:
Isidoro Nevares Martín 2026-03-26 14:15:50 +01:00
parent 19af23c453
commit d97f98c4a0
2 changed files with 59 additions and 18 deletions

View File

@ -1,19 +1,30 @@
name: Primer flujo de trabajo CI/CD (Build, Test and Push Docker Image)
# ===== Disparadores del workflow =====
on:
push:
branches:
- '**' # Cualquier rama
# ===== Tareas del workflow =====
jobs: jobs:
build-and-push: build-and-push:
runs-on: ubuntu-latest runs-on: ubuntu-latest
steps: steps:
# Descarga código
- name: Checkout code - name: Checkout code
uses: actions/checkout@v3 uses: actions/checkout@v3
# Si necesitas JDK/Maven para tests previos # JDK/Maven para tests previos
- name: Set up JDK - name: Configución pasar TEST
uses: actions/setup-java@v3 uses: actions/setup-java@v3
with: with:
distribution: temurin distribution: temurin
java-version: 23 java-version: 23
- name: Build Maven project - name: Construir proyecto con Maven
run: mvn clean package run: mvn clean package
# Construir la imagen Docker usando el Dockerfile # Construir la imagen Docker usando el Dockerfile

View File

@ -173,31 +173,61 @@ Definir en el repositorio (**Settings → Secrets and variables → Actions**):
- **Secretos**: `DB_USER`, `DB_PASSWORD` → en la pestaña *Secrets*. - **Secretos**: `DB_USER`, `DB_PASSWORD` → en la pestaña *Secrets*.
```yaml ```yaml
name: Build & Deploy name: Build, Test and Push Docker Image
# ===== Triggers del workflow =====
on: on:
push: push:
branches: [ "main" ] branches:
- '**' # Se ejecuta en cualquier rama al hacer push
# paths: # opcional: limitar a ciertos archivos
# - 'src/**'
# - 'Dockerfile'
jobs: jobs:
build: build-and-push:
runs-on: ubuntu-latest runs-on: ubuntu-latest # Runner proporcionado por GitHub, con Docker y Linux listo
# ===== Pasos del job =====
steps: steps:
- uses: actions/checkout@v3 # ---- 1. Obtener el código del repositorio ----
- name: Checkout code
uses: actions/checkout@v3
# Descarga el código fuente del commit que disparó el workflow
# ---- 2. Preparar JDK y Maven ----
- name: Set up JDK
uses: actions/setup-java@v3
with:
distribution: temurin
java-version: 23
# Necesario si quieres compilar y testear tu proyecto Spring Boot
# ---- 3. Construir el proyecto con Maven ----
- name: Build Maven project
run: mvn clean package
# Ejecuta la construcción del jar y tests (si no usas -DskipTests)
# El resultado se genera en target/*.jar
# ---- 4. Construir la imagen Docker ----
- name: Build Docker image - name: Build Docker image
run: docker build -t mi-app . run: docker build -t ghcr.io/${{ github.repository }}:latest .
# Construye la imagen usando el Dockerfile del repositorio
# La etiqueta apunta a GitHub Container Registry (GHCR)
- name: Run container # ---- 5. Loguearse en GHCR ----
run: | - name: Push Docker image
docker run \ uses: docker/login-action@v2
-e DB_HOST=${{ vars.DB_HOST }} \ with:
-e DB_PORT=${{ vars.DB_PORT }} \ registry: ghcr.io
-e DB_NAME=${{ vars.DB_NAME }} \ username: ${{ github.actor }} # Usuario que disparó el workflow
-e DB_USER=${{ secrets.DB_USER }} \ password: ${{ secrets.GITHUB_TOKEN }} # Token temporal proporcionado por GitHub
-e DB_PASSWORD=${{ secrets.DB_PASSWORD }} \ # Necesario para poder subir la imagen a GHCR
mi-app
# ---- 6. Subir la imagen al registro ----
- name: Push image
run: docker push ghcr.io/${{ github.repository }}:latest
# Envía la imagen recién construida a GHCR con la etiqueta "latest"
``` ```
> Nunca uses `echo ${{ secrets.DB_PASSWORD }}` en logs. GitHub lo enmascara, pero sigue siendo mala práctica. > Nunca uses `echo ${{ secrets.DB_PASSWORD }}` en logs. GitHub lo enmascara, pero sigue siendo mala práctica.