Introducción
Siguiendo con nuestros tutoriales, vamos a conectar Argo CD con Azure Devops, pero antes debemos preparar nuestro pipeline.
Para que se tenga una idea más clara he creado este diagrama:
Este es el video de la guía para que lo veas y vayas siguiendo paso a paso conmigo:
Necesitamos un par de requisitos:
- Crear un nuevo repositorio para nuestros manifest.
- Dar permisos a los repositorios
- Programación de pipeline
- Agregar repositorio Deploy al pipeline
- Crear nuevo Stage de Deploy en el pipeline
Crear un nuevo repositorio para nuestros manifest.
Crear otro repositorio para nuestros manifests de kubernetes, aunque se puede usar el mismo repositorio creando una carpeta y dentro de ella meter los manifests, en este ejemplo vamos a usar otro repositorio, así aprendemos a llamar otro repositorio dentro del pipeline.
Vamos a la pestaña donde está la ruta completa de nuestro repositorio, damos click en New repository y creamos uno nuevo que se llamará Deploy, en dicho repositorio vamos a subir nuestros manifest. Creamos una carpeta llamada k8s y dentro vamos a poner los archivos manifest, ahora vamos a abrir el archivo 02-deployment.yaml y buscamos la línea:
image: ahioros/rdicidr:latest
Y la cambiamos por:
image: ahioros/rdicidr:12
Nota :Puede ser cualquier número entero positivo esto será cambiado por nuestro pipeline mas adelante.
Ahora si subimos (commit, push) los archivos yaml al repositorio Deploy quedando de la siguiente manera:
Dar permisos a los repositorios
Estos permisos son necesarios para poder realizar el push desde el pipeline hacia el repositorio Deploy.
Entramos a nuestros proyecto en Azure Devops -> Proyect Settings -> Repos -> Repositories.
veremos un listado con nuestros repositorios del proyecto, damos click en la pestaña que dice Security, buscamos el usuario de servicio del proyecto y por último hay que dar permisos de Contribute, Create tag, Read. Quedando como se muestra en la siguiente imagen:
Programación de pipeline
Es la hora de escribir,abrimos el pipeline que hemos estado haciendo desde los post anteriores es decir el que se encuentra en el repositorio de nuestra aplicación (azure-pipelines.yml):
Agregar repositorio Deploy al pipeline
A nuestro pipeline debemos agregarle como recurso el repositorio Deploy que acabamos de crear.
- master
...
...
resources:
repositories:
- repository: DeployRepo
type: git
name: DockerHub Test/Deploy
trigger: none
...
...
pool:
Donde:
DeployRepo es el nombre que he usado para idenficarlo (más adelante lo usaremos).
DockerHub Test/Deploy es el lugar donde se encuentra nuestro repositorio que queremos usar.
trigger: none es importante porque de lo contrario entraríamos en un loop infinito ya que cuando hacemos un update en el Repositorio se actualizan los manifest y esto a su vez actualiza el repo y este a su vez actualiza los manifest... creo que ya entendiste a lo que me refiero.
Crear nuevo Stage de Deploy en el pipeline
Ahora que tenemos el repositorio Deploy, podemos crear un nuevo stage de deploy en nuestro pipeline. Después de nuestro stage Containerized vamos a crear un stage nuevo llamado Deploy.
- stage: Deploy
dependsOn: Containerized
jobs:
- job: Deployment
steps:
- checkout: DeployRepo
clean: true
persistCredentials: true
fetchDepth: 0
- bash: |
TAG=$(Build.BuildId)
EXP="image: ahioros/rdicidr:[0-9]+"
REP="image: ahioros/rdicidr:$TAG"
sed -E -i "s|$EXP|$REP|g" k8s/02-deployment.yaml
git config user.name "Argo CD"
git config user.email "ArgoCD@example.com"
git checkout master --
git add --all
git commit -m "Deployment ID: $(Build.BuildId)"
git push origin master
displayName: 'Deploy'
Lo que realiza este stage es que descarga los manifest del repositorio Deploy, hacemos un reemplazo de la versión con la nueva docker image tag en nuestro manifest y volvemos a subir los cambios que realizamos al su repositorio.
Nota : El reemplazo se puede hacer usando la herramienta replaceTokens que se encuentra en el market de Azure Devops, que realiza lo mismo que hacemos con el comando sed.
¿Por qué defino otro usuario llamado Argo CD para git? Resulta que muchas veces se quiere llevar un control de los deploys y ver quien hizo los cambios si el pipeline o tuvo que ir alguien a hacerlo a "mano".
Listo
Hasta aquí dejamos los pipelines listos para ser ejecutados. En el siguiente post iremos a configurar Argo CD.
Top comments (0)