# Configurar CI/CD para tu aplicación C++


## Requisitos previos

Completa todas las secciones anteriores de esta guía, empezando por [Containerizar una aplicación C++](/guides/cpp/configure-ci-cd/containerize/). Necesitas una cuenta de [GitHub](https://github.com/signup) y una cuenta verificada de [Docker](https://hub.docker.com/signup) para completar esta sección.

## Descripción general

En esta sección aprenderás a configurar y usar GitHub Actions para compilar y probar tu imagen Docker, así como enviarla a Docker Hub. Completarás los siguientes pasos:

1. Crear un repositorio en GitHub.
2. Definir el flujo de trabajo de GitHub Actions.
3. Ejecutar el flujo de trabajo.

## Paso uno: Crear el repositorio

Crea un repositorio en GitHub, configura las credenciales de Docker Hub y envía tu código fuente.

1. [Crea un repositorio](https://github.com/new) en GitHub.

2. Abre **Settings** del repositorio y ve a **Secrets and variables** >
   **Actions**.

3. Crea una **Repository variable** llamada `DOCKER_USERNAME` con tu ID de Docker como valor.

4. Crea un [token de acceso personal (PAT)](/security/access-tokens/#create-an-access-token) para Docker Hub. Puedes llamarlo `docker-tutorial`. Asegúrate de que los permisos incluyan Read y Write.

5. Añade el PAT como **Repository secret** en tu repositorio de GitHub, con el nombre
   `DOCKERHUB_TOKEN`.

6. En tu repositorio local, ejecuta el siguiente comando para cambiar
   el origin al repositorio que acabas de crear. Cambia
   `your-username` por tu nombre de usuario de GitHub y `your-repository` por el nombre del
   repositorio que creaste.

   ```console
   $ git remote set-url origin https://github.com/your-username/your-repository.git
   ```

7. Ejecuta los siguientes comandos para preparar, hacer commit y push de tu repositorio local a GitHub.

   ```console
   $ git add -A
   $ git commit -m "my commit"
   $ git push -u origin main
   ```

## Paso dos: Configurar el flujo de trabajo

Configura tu flujo de GitHub Actions para compilar, probar y enviar la imagen
a Docker Hub.

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

2. Selecciona **set up a workflow yourself**.

   Te llevará a una página para crear un archivo de flujo de GitHub Actions en
   tu repositorio, por defecto en `.github/workflows/main.yml`.

3. En el editor, copia y pega la siguiente configuración YAML y confirma los cambios.

   ```yaml
   name: ci

   on:
     push:
       branches:
         - main

   jobs:
     build:
       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:
             platforms: linux/amd64,linux/arm64
             push: true
             tags: ${{ vars.DOCKER_USERNAME }}/${{ github.event.repository.name }}:latest
   ```

   Para más información sobre la sintaxis YAML de `docker/build-push-action`,
   consulta el [README de la GitHub Action](https://github.com/docker/build-push-action/blob/master/README.md).

## Paso tres: Ejecutar el flujo de trabajo

Guarda el archivo de flujo de trabajo y ejecuta el job.

1. Selecciona **Commit changes...** y envía los cambios a la rama `main`.

   Tras el push, el flujo de trabajo se inicia automáticamente.

2. Ve a la pestaña **Actions**. Muestra el flujo de trabajo.

   Al seleccionarlo verás el desglose de todos los pasos.

3. Cuando el flujo termine, ve a tus
   [repositorios en Docker Hub](https://hub.docker.com/repositories).

   Si ves el repositorio nuevo en la lista, GitHub Actions
   envió la imagen correctamente a Docker Hub.

## Resumen

En esta sección aprendiste a configurar un flujo de GitHub Actions para tu aplicación C++.

Información relacionada:

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

## Próximos pasos

A continuación aprenderás a probar y depurar en local tus cargas de trabajo en Kubernetes antes de desplegar.

