# Automatiza tus compilaciones con GitHub Actions


## Prerrequisitos

Completa todas las secciones anteriores de esta guía, comenzando con [Contenerizar una aplicación de Ruby on Rails](/guides/ruby/configure-github-actions/containerize/). Debes tener una cuenta de [GitHub](https://github.com/signup) y una cuenta verificada de [Docker](https://hub.docker.com/signup) para completar esta sección.

Si aún no has creado un [repositorio de GitHub](https://github.com/new) para tu proyecto, es el momento de hacerlo. Después de crear el repositorio, no olvides [agregar un origen remoto](https://docs.github.com/en/get-started/getting-started-with-git/managing-remote-repositories) y asegurarte de que puedes confirmar (commit) y [subir tu código](https://docs.github.com/en/get-started/using-git/pushing-commits-to-a-remote-repository#about-git-push) a GitHub.

1. In el repositorio de GitHub de tu proyecto, abre **Settings** (Configuración) y ve a **Secrets and variables** (Secretos y variables) > **Actions**.

2. En la pestaña **Variables**, crea una nueva **Repository variable** (Variable de repositorio) llamada `DOCKER_USERNAME` con tu ID de Docker como valor.

3. Crea un nuevo [Token de Acceso Personal (PAT)](/security/access-tokens/#create-an-access-token) en Docker Hub. Puedes nombrar este token `docker-tutorial`. Asegúrate de que los permisos de acceso incluyan Read (Lectura) y Write (Escritura).

4. Agrega el PAT como un **Repository secret** (Secreto de repositorio) en tu repositorio de GitHub, con el nombre `DOCKERHUB_TOKEN`.

---

## Resumen

GitHub Actions es una herramienta de automatización de CI/CD (Integración Continua y Despliegue Continuo) integrada en GitHub. Te permite definir flujos de trabajo personalizados para compilar, probar y desplegar tu código cuando ocurren eventos específicos (por ejemplo, subir código, crear una solicitud de extracción, etc.). Un flujo de trabajo es un script de automatización basado en YAML que define una secuencia de pasos a ejecutar cuando se activa. Los flujos de trabajo se almacenan en el directorio `.github/workflows/` de un repositorio.

En esta sección, aprenderás cómo configurar y utilizar GitHub Actions para compilar tu imagen de Docker, así como subirla a Docker Hub. Completarás los siguientes pasos:

1. Definir el flujo de trabajo de GitHub Actions.
2. Ejecutar el flujo de trabajo.

---

## 1. Define el flujo de trabajo de GitHub Actions

Puedes crear un flujo de trabajo de GitHub Actions creando un archivo YAML en el directorio `.github/workflows/` de tu repositorio. Para hacer esto, utiliza tu editor de texto favorito o la interfaz web de GitHub. Los siguientes pasos te muestran cómo crear un archivo de flujo de trabajo utilizando la interfaz web de GitHub.

Si prefieres utilizar la interfaz web de GitHub, sigue estos pasos:

1. Ve a tu repositorio en GitHub y luego selecciona la pestaña **Actions**.

2. Selecciona **set up a workflow yourself** (configurar un flujo de trabajo tú mismo).

   Esto te llevará a una página para crear un nuevo archivo de flujo de trabajo de GitHub Actions en tu repositorio. De forma predeterminada, el archivo se crea bajo `.github/workflows/main.yml`, cambiemos su nombre a `build.yml`.

Si prefieres usar tu editor de texto, crea un nuevo archivo llamado `build.yml` en el directorio `.github/workflows/` de tu repositorio.

Agrega el siguiente contenido al archivo:

```yaml
name: Build and push Docker image

on:
  push:
    branches:
      - main

jobs:
  build_and_push:
    runs-on: ubuntu-latest
    steps:
      - name: Login to Docker Hub
        uses: docker/login-action@v4
        with:
          username: ${{ vars.DOCKER_USERNAME }}
          password: ${{ secrets.DOCKERHUB_TOKEN }}

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

      - name: Build and push
        uses: docker/build-push-action@v7
        with:
          push: true
          tags: ${{ vars.DOCKER_USERNAME }}/${{ github.event.repository.name }}:latest
```

Cada flujo de trabajo de GitHub Actions incluye uno o varios trabajos (jobs). Cada trabajo consta de pasos (steps). Cada paso puede ejecutar un conjunto de comandos o utilizar acciones ya [existentes](https://github.com/marketplace?type=actions). La acción anterior tiene tres pasos:

1. [**Login to Docker Hub**](https://github.com/docker/login-action): Esta acción inicia sesión en Docker Hub utilizando el ID de Docker y el Token de Acceso Personal (PAT) que creaste anteriormente.

2. [**Set up Docker Buildx**](https://github.com/docker/setup-buildx-action): Esta acción configura Docker [Buildx](https://github.com/docker/buildx), un complemento de CLI que amplía las capacidades de la CLI de Docker.

3. [**Build and push**](https://github.com/docker/build-push-action): Esta acción compila y sube la imagen de Docker a Docker Hub. El parámetro `tags` especifica el nombre y la etiqueta de la imagen. La etiqueta `latest` se utiliza en este ejemplo.

---

## 2. Ejecuta el flujo de trabajo

Confirma los cambios (commit) y súbelos a la rama `main`. Este flujo de trabajo se ejecuta cada vez que subes cambios a la rama `main`. Puedes encontrar más información sobre los activadores de flujo de trabajo [en la documentación de GitHub](https://docs.github.com/en/actions/writing-workflows/choosing-when-your-workflow-runs/events-that-trigger-workflows).

Ve a la pestaña **Actions** de tu repositorio de GitHub. Allí se muestra el flujo de trabajo. Al seleccionar el flujo de trabajo, se muestra el desglose de todos los pasos.

Cuando el flujo de trabajo se haya completado, ve a tus [repositorios en Docker Hub](https://hub.docker.com/repositories). Si ves el nuevo repositorio en esa lista, significa que el flujo de trabajo de GitHub Actions subió la imagen con éxito a Docker Hub.

---

## Resumen

En esta sección, aprendiste cómo configurar un flujo de trabajo de GitHub Actions para tu aplicación de Ruby on Rails.

Información relacionada:

- [Introducción a GitHub Actions](/guides/gha/)
- [GitHub Actions de Docker Build](/build/ci/github-actions/)
- [Sintaxis de flujo de trabajo para GitHub Actions](https://docs.github.com/en/actions/using-workflows/workflow-syntax-for-github-actions)

## Próximos pasos

En la siguiente sección, aprenderás cómo puedes desarrollar tu aplicación utilizando contenedores.

