La Integración Continua (CI) y el Despliegue Continuo (CD) son prácticas fundamentales en el desarrollo de software moderno (DevOps). Docker se integra de forma natural en este flujo, ya que las imágenes de contenedor son el artefacto perfecto para pasar de una etapa a otra del pipeline.
Un pipeline de CI/CD automatiza los pasos para llevar el código desde el repositorio hasta producción. Un flujo típico que involucra Docker se ve así:
La imagen Docker es el artefacto inmutable que se mueve a través del pipeline. Esto garantiza que lo que se probó en CI es exactamente lo mismo que se desplegará en producción.
GitHub Actions es una potente herramienta de CI/CD integrada en GitHub. Vamos a crear un "workflow" que construya una imagen Docker y la suba a GitHub Container Registry (GHCR) cada vez que se haga un push a la rama `main`.
Paso 1: Crear el workflow
En tu repositorio, crea el directorio .github/workflows/
y dentro un archivo, por ejemplo, docker-publish.yml
.
name: Docker Image CI
on:
push:
branches: [ "main" ]
jobs:
build_and_push:
runs-on: ubuntu-latest
permissions:
contents: read
packages: write
steps:
- name: Checkout repository
uses: actions/checkout@v3
- name: Log in to the Container registry
uses: docker/login-action@v2
with:
registry: ghcr.io
username: ${{ github.actor }}
password: ${{ secrets.GITHUB_TOKEN }}
- name: Build and push Docker image
uses: docker/build-push-action@v4
with:
context: . # Directorio del Dockerfile
push: true
tags: ghcr.io/${{ github.repository }}:${{ github.sha }}
# Ejemplo de tag: ghcr.io/mi-usuario/mi-repo:a1b2c3d4
Con este archivo en tu repositorio, cada vez que fusiones código a `main`, GitHub Actions automáticamente construirá tu aplicación, la empaquetará en una imagen Docker y la publicará en el registro de tu proyecto, lista para ser desplegada.