jueves, 15 de agosto de 2024

Deploy Github Actions y Argo CD


Ya tengo un post explicando [cómo instalar Argo CD](https://www.ahioros.info/2024/06/como-instalar-argo-cd.html). Si no sabes cómo hacerlo ve a leerlo y regresas.

En este post vamos a configurar Argo CD para que utilice el repositorio Github.

El video está acá para que vayas haciéndolo conmigo:

## Configurando Argo CD

Necesitamos un pre-requisito:

- Crear un Personal Access Token (PAT) para conectar el proyecto con Argo CD, por motivos de practicicidad lo he llamado argocd. Si no sabes cómo hacerlo puedes leer los prerequisitos en este [post](https://www.ahioros.info/2024/08/github-actions-y-dockerfile-multi-stage.html).

Ahora entramos a Argo CD con nuestras credenciales.

## Creando el Proyecto

Vamos a Settings -> Projects y damos click en el botón que dice: "+ NEW PROJECT", llenamos los campos con la información que nos pide.

**Nota**: Para este caso que es un ejemplo no voy a explicar a detalle el apartado de seguridad todavía, haremos algo básico e "inseguro".

SOURCE REPOSITORIES: *
DESTINATIONS -  Server: *, Name: *, Namespace: *
CLUSTER RESOURCE ALLOW LIST - Kind: *, Group: *
## Creando la conexión hacia nuestro Repositorio Github

Vamos a crear la conexión hacia el repositorio:
Settings -> Repositories y damos click en el botón que dice "+ CONNECT REPO"

- En **Choose your connection methods**
  seleccionamos: VIA HTTPS.

- En **Project**, seleccionamos el proyecto que creamos previamente.
- En **Repository URL** copiamos la URL en HTTPS del proyecto donde están nuestros manifests.
  ejemplo: https://github.com/ahioros/deploy-workflow-react-example

- Username: argocd (esto es opcional por que lo que nos importa es el password).
- Password: el PAT que generamos al inicio.
## Configurando la aplicación.

Ahora vamos a Applications -> "+ NEW APP" o en el botón de en medio que dice "CREATE APPLLICATION" (suponiendo que no tengas ninguna aplicación).

**GENERAL**
Application Name: rdicidr
Project Name: Aquí seleccionamos el proyecto que creamos en el paso anterior.

SYNC POLICY podemos dejarlo en manual y después lo cambiamos a automatic para que vean la diferencia.

**SOURCE**
Repository URL: Al darle click al campo seleccionamos la URL del repositorio que creamos previamente.
Revision: HEAD y  Branches
Path: ./k8s
*Nota:* Nótese que en el campo Path hay un punto antes del /

**DESTINATION**
Cluster URL: https://kubernetes.default.svc
Namespace: *

Algo como la siguiente imagen:
Damos click en el botón CREATE, que se encuentra en la parte superior y listo.

## Sincronizando la aplicación
Ahora vemos nuestra aplicación (en amarillo) pero todavía no está desplegada en nuestro cluster, debemos dar click en el botón **SYNC** para que se sincronice.

Esto abrira ventana a la derecha y damos click en el botón **SYNCHRONIZE**.


## Deploy Manual

Para ver que todo funciona correctamente, volvemos a **Github Actions** y ejecutamos el pipeline para que cambie el TAG de nuestra imagen y volvemos a Argo CD para ver que está en color amarillo esperando que demos en el botón **SYNC**.
## Deploy Automático

Volvemos a Argo CD, en el panel izquierdo Applications -> "nuestra app", ahora en la parte superior damos click en el botón **DETAILS** bajamos hasta la sección **SYNC POLICY** y damos click en el botón **ENABLE AUTO-SYNC**, nos aparecerá una ventana de confirmación (sobre decir que damos click en OK).

Ejecuta el pipeline nuevamente  y Argo CD automáticamente hará el SYNC y desplegará la nueva version de nuestra app en el cluster.

Una vez hayamos realizado el Deploy de nuestra aplicación podremos verla más o menos así:
Y cuando le damos click veremos la aplicación, y si lees arriba donde dice Synced y Sync OK, puedes ver el detalle del despliegue el autor y los comentarios de cuando se realizó el push a los manifest desde nuestro pipeline en el Stage Deploy. Mira la siguiente imagen:
**Nota:** en este ejemplo solo muestro una versión muy por encima de cómo configurar Argo CD, dale una leída a las [best practices](https://argo-cd.readthedocs.io/en/stable/user-guide/best_practices/), estos post son solo un vistazo para mostrar el poder de estas herramientas.

No hay comentarios.: