La segunda parte del ciclo CI será la de compilación, en específico, la de montar los diferentes servicios a contenedores Docker.

CI: Build

Usaremos el archivo .github/workflows/ci-build.yml, este contendrá algunas jobs para las diferentes builds que haremos con Docker.

Este workflow se llamará Flujo CI-Build y tendrá el mismo run-name, se activará con 2 triggers: un workflow_dispatch manual en el cual determinaremos cuál será el proveedor Cloud al que haremos deploy (AWS, GCP o Azure) donde AWS será el valor por defecto, además, también se creará si ejecutará bajo un issue comment con la etiqueta created.

name: "Flujo CI-Build"
run-name: "Flujo CI - Build"
on:
  workflow_dispatch:
    inputs:
      cloud:
        description: "Proveedor Cloud"
        required: true
        default: "AWS"
        options: ["AWS", "GCP", "Azure"]
  issue_comment:
    types: [created]

Tendremos 3 jobs principales: uno para cada proveedor elegido donde la primer parte será la configuración del Docker y la segunda cambiará según la cloud elegida.

Jobs: docker-aws

El primer job será el de subir la imagen de Docker a AWS, para esto, llevaremos a cabo 2 tipos de steps: los de configuración de docker y los de deploy a Cloud. Es necesario usar el condicional dado para activar el job si ha sido llamado desde un PR y contiene en el cuerpo de comentario “Build-AWS” o si sencillamente el input del workflow dispatch es AWS.

Haremos checkout del repo, luego configuraremos el QEMU (Requerido para el deploy de Docker), haremos lo mismo con el Docker Buildx y finalmente configuraremos los tags y etiquetas para la rama en la que estamos trabajando. Con esto hemos configurado el Docker correctamente y ahora solo hace falta pushearlo a AWS.

La segunda parte constará en configurar el cloud AWS, para esto gestionaremos las credenciales ECR, finalmente haremos push de la imagen al contenedor.