Diferencia entre revisiones de «MCC - Implementación CI/CD con Github Actions»

De MCC™ Wiki
Página creada con «== Pipeline para GitHub Actions: Build y Push de Imágenes Docker Multi-arch == Creación del pipeline para GitHub Actions, que realiza las pruebas de HTML, construye la imagen Docker usando ''docker buildx'' para plataformas AMD64 y ARM64, y la publica en Docker Hub. === 1. Pre-requisitos === Tener configuradas tus credenciales de Docker Hub en los Secrets de GitHub: * '''DOCKER_HUB_USERNAME''': Tu nombre de usuario de Docker Hub. * '''DOCKER_HUB_PASSWORD''': Tu co…»
 
Sin resumen de edición
Línea 13: Línea 13:
=== 2. Configuración de GitHub Actions (.github/workflows/docker_build.yml) ===
=== 2. Configuración de GitHub Actions (.github/workflows/docker_build.yml) ===


<code>
<pre>
name: Build and Push Docker Image
name: Build and Push Docker Image


Línea 79: Línea 79:
       - name: Pull the image to verify
       - name: Pull the image to verify
         run: docker pull ${{ secrets.DOCKER_HUB_REPO }}:latest
         run: docker pull ${{ secrets.DOCKER_HUB_REPO }}:latest
</code>
</pre>


=== Explicación ===
=== Explicación ===

Revisión del 01:45 10 sep 2024

Pipeline para GitHub Actions: Build y Push de Imágenes Docker Multi-arch

Creación del pipeline para GitHub Actions, que realiza las pruebas de HTML, construye la imagen Docker usando docker buildx para plataformas AMD64 y ARM64, y la publica en Docker Hub.

1. Pre-requisitos

Tener configuradas tus credenciales de Docker Hub en los Secrets de GitHub:

  • DOCKER_HUB_USERNAME: Tu nombre de usuario de Docker Hub.
  • DOCKER_HUB_PASSWORD: Tu contraseña o token de Docker Hub.
  • DOCKER_HUB_REPO: Nombre del repositorio en Docker Hub (por ejemplo: miusuario/mirepositorio).

Puedes agregar estos secrets desde tu repositorio en GitHub, navegando a Settings > Secrets and variables > Actions y añadiéndolos ahí.

2. Configuración de GitHub Actions (.github/workflows/docker_build.yml)

name: Build and Push Docker Image

on:
  push:
    branches:
      - main  # Ejecutar en la rama principal
  pull_request:
    branches:
      - main

jobs:
  # Job para validar el HTML
  html_validation:
    runs-on: ubuntu-latest
    steps:
      - name: Check out the code
        uses: actions/checkout@v3

      - name: Set up Node.js
        uses: actions/setup-node@v3
        with:
          node-version: '14'

      - name: Install htmlhint
        run: npm install -g htmlhint

      - name: Validate HTML
        run: htmlhint public-html/**/*.html  # Cambia según la estructura de tu proyecto

  # Job para construir la imagen Docker multi-arch
  docker_build:
    needs: html_validation
    runs-on: ubuntu-latest
    steps:
      - name: Check out the code
        uses: actions/checkout@v3

      - name: Set up Docker Buildx
        uses: docker/setup-buildx-action@v2

      - name: Log in to Docker Hub
        uses: docker/login-action@v2
        with:
          username: ${{ secrets.DOCKER_HUB_USERNAME }}
          password: ${{ secrets.DOCKER_HUB_PASSWORD }}

      - name: Build and push Docker image (AMD64, ARM64)
        run: |
          docker buildx create --use
          docker buildx inspect --bootstrap
          docker buildx build --platform linux/amd64,linux/arm64 -t ${{ secrets.DOCKER_HUB_REPO }}:latest --push .

  # (Opcional) Job para verificar que la imagen se ha subido correctamente
  docker_push:
    needs: docker_build
    runs-on: ubuntu-latest
    steps:
      - name: Log in to Docker Hub
        uses: docker/login-action@v2
        with:
          username: ${{ secrets.DOCKER_HUB_USERNAME }}
          password: ${{ secrets.DOCKER_HUB_PASSWORD }}

      - name: Pull the image to verify
        run: docker pull ${{ secrets.DOCKER_HUB_REPO }}:latest

Explicación

  • Trigger: El workflow se ejecuta cuando hay un push a la rama principal o cuando se abre un pull request a esa rama.
  • html_validation Job:
    • Usa Node.js para instalar htmlhint y validar los archivos HTML ubicados en la carpeta public-html.
    • Este job se ejecuta primero, y si falla, el pipeline se detiene.
  • docker_build Job:
    • Se ejecuta solo si el job de validación HTML pasa.
    • Usa docker buildx para construir la imagen Docker para ambas arquitecturas (AMD64 y ARM64).
    • Publica la imagen directamente en Docker Hub usando --push.
  • docker_push Job (opcional):
    • Este paso verifica que la imagen se haya subido correctamente a Docker Hub haciendo un docker pull de la imagen recién subida.

3. Ajustes Adicionales

  • Validación de HTML: Puedes ajustar el comando de htmlhint según la estructura de tu proyecto.
  • Tags en Docker: Puedes usar tags de versión o basados en commits en lugar de latest.

4. Configuración de Secrets en GitHub

Ve a Settings > Secrets and variables > Actions en tu repositorio y añade:

  • DOCKER_HUB_USERNAME: Tu usuario de Docker Hub.
  • DOCKER_HUB_PASSWORD: Tu token o contraseña de Docker Hub.
  • DOCKER_HUB_REPO: El nombre del repositorio en Docker Hub, como miusuario/mirepositorio.

Este pipeline te permite realizar pruebas en el HTML, construir imágenes Docker multi-arch y publicarlas en Docker Hub de manera automatizada con GitHub Actions.