Agregando el Stage Deploy
Tags: azure, cloud, devops, spanish
Published: 2024-06-27 15:08:04

---
title: Agregando el Stage Deploy
published: true
date: 2024-06-26 23:42:00 UTC
tags: Azure,Cloud,DevOps, spanish
canonical_url: https://www.ahioros.info/2024/06/agregando-el-stage-deploy.html
---

## 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:

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/yrck9wh5r3gpj7hi81q8.png)

Este es el video de la guía para que lo veas y vayas siguiendo paso a paso conmigo:

{% youtube JHtEBdPTkQ4 %}

<!-- <iframe allowfullscreen="" youtube-src-id="JHtEBdPTkQ4" width="480" height="270" src="https://www.youtube.com/embed/JHtEBdPTkQ4"></iframe> -->

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:

```yaml
	image: ahioros/rdicidr:latest
```

Y la cambiamos por:

```yaml
	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:

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/691lj69009rakgcfze8r.png)

## 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:

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/lfr7w1sqpvqvqry9zn31.png)

## 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):

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/pwf4fx5wqij7wdvlzdsr.png)

### Agregar repositorio Deploy al pipeline

A nuestro pipeline debemos agregarle como recurso el repositorio Deploy que acabamos de crear.

```yaml
- 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.

```yaml
  - 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.