# Configura CI/CD para tu aplicación de Java


## Requisitos previos

Completa las secciones anteriores de esta guía, comenzando con [Contenedoriza tu aplicación](/guides/java/configure-ci-cd/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.

## Resumen

En esta sección, aprenderás cómo configurar y utilizar GitHub Actions para construir y empujar (push) tu imagen de Docker a Docker Hub. Completarás los siguientes pasos:

1. Crea un nuevo repositorio en GitHub.
2. Define el flujo de trabajo (workflow) de GitHub Actions.
3. Ejecuta el flujo de trabajo.

## Paso uno: Crea el repositorio

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

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

2. Abre la configuración (**Settings**) del repositorio y ve a **Secrets and variables** > **Actions**.

3. Crea una nueva variable de repositorio (**Repository variable**) llamada `DOCKER_USERNAME` y tu Docker ID como valor.

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

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

6. En tu repositorio local en tu máquina, ejecuta el siguiente comando para cambiar el origen al repositorio que acabas de crear. Asegúrate de cambiar `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 (stage), confirmar (commit) y enviar (push) tu repositorio local a GitHub.

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

## Paso dos: Configura el flujo de trabajo

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

1. Ve a tu repositorio en GitHub y luego selecciona la pestaña **Actions**.
   El proyecto ya tiene el flujo de trabajo `maven-build` para construir y probar tu aplicación de Java con Maven. Si lo deseas, puedes desactivar opcionalmente este flujo de trabajo porque no lo usarás en esta guía. Crearás un nuevo flujo de trabajo alternativo para construir, probar y enviar tu imagen.

2. Selecciona **New workflow** (Nuevo flujo de trabajo).

3. Selecciona **set up a workflow yourself** (configurar un flujo de trabajo por ti mismo).

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

4. En la ventana del editor, copia y pega la siguiente configuración YAML.

   ```yaml
   name: ci

   on:
     push:
       branches:
         - main

   jobs:
     build:
       runs-on: ubuntu-latest
       steps:
         - name: Iniciar sesión en Docker Hub
           uses: docker/login-action@v4
           with:
             username: ${{ vars.DOCKER_USERNAME }}
             password: ${{ secrets.DOCKERHUB_TOKEN }}

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

         - name: Construir y probar
           uses: docker/build-push-action@v7
           with:
             target: test
             load: true

         - name: Construir y empujar
           uses: docker/build-push-action@v7
           with:
             platforms: linux/amd64,linux/arm64
             push: true
             target: final
             tags: ${{ vars.DOCKER_USERNAME }}/${{ github.event.repository.name }}:latest
   ```

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

## Paso tres: Ejecuta el flujo de trabajo

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

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

   Después de enviar el commit, el flujo de trabajo se inicia automáticamente.

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

   Al seleccionar el flujo de trabajo, se te mostrará el desglose de todos los pasos.

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

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

## Resumen

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

Información relacionada:

- [Introducción a GitHub Actions](/guides/gha/)
- [Docker Build GitHub Actions](/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)

## Siguientes pasos

A continuación, aprende cómo puedes probar y depurar localmente tus cargas de trabajo en Kubernetes antes de desplegar.

