En un artículo anterior te conté que puedes publicar tus imágenes de Docker en GitHub Packages, para que esta formara parte de tu repositorio en GitHub. Sin embargo, mostré cuales eran los pasos de forma manual, cuando lo ideal sería que fuera un proceso automatizado. Hoy quiero contarte cómo llevarlo a cabo con GitHub Actions.
El flujo
Utilizando el mismo repositorio que te mostré ayer, hello-devops, he añadido el siguiente flujo para automatizar la creación y la publicación de la imagen:
name: CI
# Controls when the action will run.
on:
# Triggers the workflow on push events but only for the main branch
push:
branches: [main]
# Allows you to run this workflow manually from the Actions tab
workflow_dispatch:
#Enviroment variables that you can use in the steps
env:
IMAGE_NAME: hello-devops
# A workflow run is made up of one or more jobs that can run sequentially or in parallel
jobs:
build_and_push_to_registry:
name: Build and push Docker image to GitHub Packages
runs-on: ubuntu-latest
steps:
- name: Check out the repo
uses: actions/checkout@v2
- name: Login to GitHub Packages
uses: docker/login-action@v1
with:
registry: docker.pkg.github.com
username: ${{ github.repository_owner }}
password: ${{ secrets.GITHUB_TOKEN }}
- name: Lowercase repository name
run: |
echo "REPO=${GITHUB_REPOSITORY,,}" >> $GITHUB_ENV
- name: Short the sha to 7 characters only
id: vars
run: echo ::set-output name=tag::$(echo ${GITHUB_SHA::7})
- name: Build and push to GitHub Packages
uses: docker/build-push-action@v2
with:
context: .
file: ./Dockerfile
push: true
tags: docker.pkg.github.com/${{ env.REPO }}/${{ env.IMAGE_NAME }}:${{ steps.vars.outputs.tag }}
Este flujo hace básicamente lo siguiente:
- Hace checkout del código fuente del repositorio donde se lanza el flujo.
- Inicia sesión en docker.pkg.github.com como hice en el artículo anterior. Sin embargo, en este caso no es necesario generar un Personal Access Token sino que podemos utilizar el que viene en GITHUB_TOKEN. Si quisiéramos publicar en GitHub Container Registry en lugar de GitHub Packages deberías de habilitar la preview, cambiar el inicio de sesión a ghcr.io y en este caso si sería necesario utilizar un PAT como se comenta en el artículo.
- Pone en minúsculas el nombre del repositorio. Esto es necesario porque si hay alguna mayúscula en el nombre, al intentar hacer el push, te dará error si no lo corriges antes.
- Como tag de mi imagen he elegido utilizar el SHA que proporciona GitHub con cada commit. Sin embargo, como esta cadena es muy larga me he quedado solo con los 7 primeros caracteres de la misma.
- Por último, en el último paso se creará la imagen y posteriormente se publicará con el tag que hemos definido, que en este ejemplo hace uso de la variable de entorno REPO, que está en minúsculas, y el output llamado tag del paso llamado vars, para que puedas ver dos formas de compartir información entre steps 🙂
¡Saludos!

Bootcamp DevOps
Si tienes ganas de meterte en el área de DevOps, formo parte del
equipo de docentes del Bootcamp DevOps Lemoncode, ¿Te animas a
aprender con nosotros?