Skip to content

Tema:

Actualizacion de pipeline de desarrollo para uso con argocd.


Introducción

Ahora que tenemos claros los conceptops de como realizar un pipeline para distintos ambientes, vamos a integrar argocd.

Objetivo

Objetivo General:

  • El objetivo de la practica es integrar argocd a uno de nuestros pipelines.

Laboratorio

Antes de comenzar

  • Contar con el acceso al ambiente del laboratorio

Inicio de laboratorio

Conexion a ambiente

Conexion a ambiente de kubernetes

  1. Ingresar al servidor de laboratorio con la llave proporcionada.

    export LAB=X
    ssh student@lab-${LAB}-aio 
    

  2. Cambiar al usuario root

    sudo -i
    

  3. Proporcione accesos administrativos al cluster de Kubernetes

    export KUBECONFIG=/etc/rancher/rke2/rke2.yaml
    
    export PATH=$PATH:/var/lib/rancher/rke2/bin
    
    export CONTAINERD_ADDRESS=/run/k3s/containerd/containerd.sock
    

Desarrollo de laboratorio

  1. Ingresar a gitlab y colocar 3 variables nuevas en nuestro proyecto.
Variable Tipo Valor Mask
ARGOCD_SERVER Variable La direccion de la instalacion de argocd sin http y con el puerto. ej argocd.34-83-59-151.nip.io:80
ARGOCD_USERNAME Variable admin
ARGOCD_PASSWORD Variable La clave de argocd que se obtuvo en la practica de instalacion
  1. Ingresar a la carpeta de angular-demo y cambiarnos a la rama dev

    git checkout dev
    

  2. Crear un nuevo archivo llamado argocd-app.yaml en la carpeta manifests

    apiVersion: argoproj.io/v1alpha1
    kind: Application
    labels:
    metadata:
      name: ${DEPLOYMENT_NAME}
    spec:
      destination:
        namespace: ${NAMESPACE}
        server: 'https://kubernetes.default.svc'
      source:
        path: manifests/dev
        repoURL: 'https://$CI_SERVER_HOST/$CI_PROJECT_PATH.git'
        targetRevision: dev
      project: ${DEPLOYMENT_NAME}
    

  3. Dentro de la carpeta manifests crear una nueva carpeta llamada dev.

    mkdir dev
    

  4. Dentro del archivo .dev en la carpeta ci-templates vamos a aregar la siguiente variable

    GIT_STRATEGY: fetch
    

  5. Vamos a agregar siempre dentro del archivo .dev en ci-templates

    commit-dev:
      stage: build
      image: theohbrothers/docker-kubectl:20250828.0.0-1.15.12-envsubst-git-jq-kustomize-sops-ssh-yq
      tags:
        - dev
      script:
        - |
          git config --global user.email "you@example.com"
          git config --global user.name "example"
          git remote set-url origin "https://gitlab-ci-token:${PROJECT_TOKEN}@$CI_SERVER_HOST/$CI_PROJECT_PATH.git"
          git checkout dev
          echo "[INFO] Reemplazando variables en archivo template"
          envsubst < manifests/k8s-template.yaml > manifests/dev/k8s-resources.yaml
          git add manifests/dev/k8s-resources.yaml
          git commit -m "Add ci [ci skip]"
          git push -u origin dev 
    

  6. Vamos a cambiar el job de apply-dev de la siguiente manera.

    apply-dev:
      stage: deploy
      image: quay.io/itmlabs/kubectl-tools:v0.0.3
      tags:
        - dev
      script:
        - |
          envsubst < ci-templates/argocd-app.yaml > argocd-app.yaml
          cat argocd-app.yaml
          echo $ARGOCD_SERVER
          argocd login $ARGOCD_SERVER --username=$ARGOCD_USERNAME --password=$ARGOCD_PASSWORD  --insecure --plaintext  --grpc-web
          echo "[INFO] Desplegando aplicación"
          if [[ "$(argocd app get ${DEPLOYMENT_NAME})" ]]; then
            argocd app create -f argocd-app.yaml --upsert --plaintext  --grpc-web
            argocd app sync ${DEPLOYMENT_NAME} --revision dev --insecure --force --plaintext --grpc-web
          else
            if [[ "$(argocd proj list | grep ${DEPLOYMENT_NAME})" ]]; then
              argocd app create -f argocd-app.yaml --upsert --plaintext --grpc-web
              argocd app sync ${DEPLOYMENT_NAME} --revision dev --insecure --force --plaintext --grpc-web
            else
              argocd repo add https://$CI_SERVER_HOST/$CI_PROJECT_PATH.git --username argo --password ${PROJECT_TOKEN} --insecure --upsert --plaintext --grpc-web
              argocd proj create ${DEPLOYMENT_NAME} --dest https://kubernetes.default.svc,${NAMESPACE} --src  https://$CI_SERVER_HOST/$CI_PROJECT_PATH.git --insecure --upsert --plaintext --grpc-web
              argocd app create -f argocd-app.yaml --upsert --plaintext --grpc-web
              argocd app sync ${DEPLOYMENT_NAME} --revision dev --insecure --force --plaintext --grpc-web
            fi
          fi
    

  7. Suba sus cambios y observe la ejecucion del pipeline.

  8. Cuando finalice revisar la consola de argocd.