Curso Profesional de DevOps

Toma las primeras clases gratis

⏱ Tiempo estimado: 20 minutos 🎯 Rama / Perfil: CI/CD en la nube, para desarrolladores que no quieren mantener un servidor Jenkins. 🧠 Conocimiento previo necesario: Clases 7, 9 y 10 del curso (qué hace CI, correr pruebas con Docker y publicar imágenes en Docker Hub). 💡 ¿Qué vas a lograr? Un workflow que prueba tu código en cada push y publica la imagen Docker en GitHub Container Registry.

🛠 Lo que necesitas antes de empezar

📋 Pasos

Paso 1: Crea un proyecto mínimo con pruebas

Crea un repositorio nuevo en GitHub (por ejemplo mi-pipeline) y clónalo. Dentro ejecuta:

bash

npm init -y
npm install --save-dev mocha

Crea sum.js:

js

module.exports = (a, b) => a + b;

Crea test/sum.test.js:

js

const assert = require('assert');
const sum = require('../sum');
describe('sum', () => {
  it('suma dos números', () => assert.strictEqual(sum(2, 3), 5));
});

En package.json, cambia el script de prueba a "test": "mocha" y verifica con npm test.

Paso 2: Agrega un Dockerfile

Crea Dockerfile:

dockerfile

FROM node:20-alpine
WORKDIR /app
COPY package*.json ./
RUN npm ci --omit=dev
COPY . .
CMD ["node", "-e", "console.log('Hola desde mi imagen:', require('./sum')(2,3))"]

Paso 3: Crea el workflow

Crea el archivo .github/workflows/ci.yml:

yaml

name: ci
on:
  push:
    branches: [main]
  pull_request:

permissions:
  contents: read
  packages: write

jobs:
  test:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - uses: actions/setup-node@v4
        with:
          node-version: 20
          cache: npm
      - run: npm ci
      - run: npm test

  publish:
    needs: test
    if: github.ref == 'refs/heads/main'
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - uses: docker/setup-buildx-action@v3
      - uses: docker/login-action@v3
        with:
          registry: ghcr.io
          username: ${{ github.actor }}
          password: ${{ secrets.GITHUB_TOKEN }}
      - id: meta
        uses: docker/metadata-action@v5
        with:
          images: ghcr.io/${{ github.repository }}
          tags: |
            type=sha
            type=raw,value=latest
      - uses: docker/build-push-action@v6
        with:
          context: .
          push: true
          tags: ${{ steps.meta.outputs.tags }}
          cache-from: type=gha
          cache-to: type=gha,mode=max

Esto replica lo que hacías en Jenkins: el job test corre primero, y publish solo corre si las pruebas pasan (needs: test). La caché de npm y la de capas Docker (type=gha) hacen los siguientes builds mucho más rápidos. Las versiones de las acciones pueden haber avanzado, así que verifica las más recientes en 🔗 https://github.com/marketplace?type=actions

Paso 4: Haz push y observa

bash

git add . && git commit -m "ci: pipeline con GitHub Actions" && git push origin main

Ve a la pestaña Actions de tu repo y mira correr los dos jobs. Si falla algo, el log te dice en qué paso.

Paso 5: Descarga y ejecuta tu imagen

En tu repo, abre Packages para ver la imagen publicada. Luego:

bash

docker run --rm ghcr.io/TU_USUARIO/mi-pipeline:latest

Si el paquete es privado, primero haz docker login ghcr.io con un token personal con permiso read:packages. 🔗 Documentación oficial: https://docs.github.com/en/packages/working-with-a-github-packages-registry/working-with-the-container-registry

✅ Resultado esperado

Un repositorio con CI completo: cada push a main ejecuta las pruebas, construye la imagen y la publica en GHCR con dos tags (latest y el SHA del commit). En un pull request solo corren las pruebas.

🔥 Tu reto (siguiente acción)

Rompe una prueba a propósito en una rama nueva, abre un pull request y comprueba que el pipeline lo bloquea. Luego activa la protección de rama en Settings → Branches para que sea obligatorio pasar el check test antes de hacer merge.

📚 Recursos para ir más lejos

Curso Profesional de DevOps

Toma las primeras clases gratis

0 Comentarios

para escribir tu comentario

Artículos relacionados