Les GitLab environnements
Estimated time to read: 5 minutes
Pré-requis
Avant de démarrer cette partie, il est nécessaire de forker le projet car vous aurez besoin d'être Owner du projet pour faire les manipulations. Pour cela, il suffit de forker le projet.
Pas besoin de forker 2 fois
Si vous avez fait la partie flux avant celle-ci et que vous avez déjà forké le projet, pas besoin de faire un nouveau fork. Vous pouvez réutiliser le 1er.
Gitpod
Si vous utilisez Gitpod n'oubliez pas de télécharger votre kubeconfig
alias cluster-ovh-${TF_VAR_OVH_CLOUD_PROJECT_KUBE_NAME}.yml
. Avec le fork vous allez démarrer avec un nouveau pod et par conséquence vos fichiers locaux ne seront plus accessibles.
Installation
Pour installer l'agent, il faut suivre la doc GitLab qui consiste à :
- ajouter le repo Helm pour GitLab
- Et installer l'agent
Un exemple mais à récupérer depuis l'IHM GitLab à cause du token
- 🔢 La version peut être différente
- 🔑 Ce token est généré par GitLab au moment d'enregistrer l'agent.
L'agent est installé correctement
On vérifie que tout est ok
1. Namespace can be differentLes pods gitlab-agent sont démarrés
Utilisation
Grâce à l'agent on va pouvoir intéragir depuis GitLab-CI sans avoir besoin d'un kubeconfig
Par exemple, on peut déployer le helm custom disponible dans le répertoire demo-gitlab
On crée un job dans le fichier .gitlab-ci.yml
à la racine du projet.
Supprimer le job existant
Vous devez supprimer le contenu du .gitlab-ci.yml
existant avant d'ajouter les éléments
stages:
- 🏗️ # (1)
🚧_deploy_env:
stage: 🏗️
image:
name: dtzar/helm-kubectl
script:
- kubectl config use-context yodamad-workshops/2024/devoxx/kube-workshop:demo-gitlab-env # (2)
- helm upgrade ${CI_COMMIT_REF_SLUG}-env ./demo-gitlab/ --set labName=${CI_PROJECT_NAME}-${CI_COMMIT_REF_SLUG} --install --create-namespace -n ${CI_PROJECT_NAME}-${CI_COMMIT_REF_SLUG}
environment:
name: ${CI_COMMIT_REF_SLUG}
url : https://${CI_PROJECT_NAME}-${CI_COMMIT_REF_SLUG}.<votre_trigramme>.grunty.uk # (3)
needs: []
Comprendre l'exemple
Dans cet exemple, on a plusieurs choses:
kubectl config use-context
pour connecter la CI au clusteryodamad-workshops/2024/devoxx/kube-workshop
correspond au path vers votre projet forké sur gitlab.com. A adapter en fonction de vos donnéesdemo-gitlab-env
correspond au nom du projet. A adapter en fonction de vos donnéesenvironment
: décrit l'environnement déployé en lien avec ce joburl
: une URL dynamique qui est construit en fonction du nom du projet et de la brancheon_stop
: l'action à déclencher quand l'environnement est arrêté, par exemple quand la branche associée est supprimée
Quel context utiliser
Si vous peinez à trouver quel est le bon nom du context à utiliser pour la partie kubectl config use-context
, vous pouvez ajouter dans le job l'instruction suivante : kubectl config get-contexts
qui vous listera les contextes disponibles.
Grâce à ce que l'on a mis en place précédemment, on pourra simplement avoir un nouvel environnement avec une URL reconnnue (merci external-dns
), sécurisée (merci cert-manager
) pour que les devs et les testeurs du projet puissent accéder à la version souhaitée.
Mettre votre trigramme dans l'ingress
Dans le fichier demo-gitlab/values.yaml
, il faut changer <votre_trigramme>
par votre trigramme et commiter
On peut commiter le fichier .gitlab-ci.yml
, et une fois que le pipeline est terminé (avec succès), on peut voir que tout est bien créé
Tout est déployé
NAME READY STATUS RESTARTS AGE
pod/demo-gitlab-env-gitlab-agent-v1-8b8bc9c85-2tq2b 1/1 Running 0 11h
pod/demo-gitlab-env-gitlab-agent-v1-8b8bc9c85-w8wm7 1/1 Running 0 11h
NAME READY UP-TO-DATE AVAILABLE AGE
deployment.apps/demo-gitlab-env-gitlab-agent-v1 2/2 2 2 11h
NAME DESIRED CURRENT READY AGE
replicaset.apps/demo-gitlab-env-gitlab-agent-v1-8b8bc9c85 2 2 2 11h
Pour continuer, créer une nouvelle branche et changer l'image par défaut dans demo-gitlab/values.yml
:
Avant:
Après:
Commiter sur la nouvelle branche et attendre que le pipeline se termine.
Dans le menu Operate > Environments
, il y a 2 environnements disponibles:
En ouvrant les 2 environnements (via Open
), on a bien :
- une IHM simple sur
main
- un cinema ascii sur la nouvelle branche
Nettoyage
Il ne faut pas oublier de nettoyer ses environements lorsqu'ils ne sont plus nécessaires (🌱 la planète vous dira merci).
Pour cela, on implémente le job qui est référencé dans le on_stop
stages:
[...]
- 🏗️
- 🧹 # (1)
🧼_clean:
stage: 🧹
image:
name: dtzar/helm-kubectl
script:
- kubectl config use-context yodamad-workshops/kub-workshop:demo-gitlab-env
- helm uninstall ${CI_COMMIT_REF_SLUG}-env -n ${CI_PROJECT_NAME}-${CI_COMMIT_REF_SLUG}
- kubectl delete ns ${CI_PROJECT_NAME}-${CI_COMMIT_REF_SLUG}
when: manual
environment:
name: ${CI_COMMIT_REF_SLUG}
action: stop
Il faut également ajouter l'instruction on_stop
au job de déploiement :
- ☢️ Ne pas oublier d'ajouter le stage du job dans la liste des stages
Arrêter l'environnement depuis l'IHM GitLab (via le menu Operate > Environments
)
L'environnement est bien supprimé
- Le job
on_stop
est bien déclenché
- Dans
Operate > Environments
, il n'y a plus qu'un environnement - Dans le cluster, les élements ont bien été suppriméss
Un premier usage plutôt pratique !
Retournons à la recette pour encore plus de découvertes ➡️