Devops - Comment gérer plusieurs versions des CLI avec direnv et asdf !
Publié le : 24 décembre 2022 | Mis à jour le : 22 janvier 2023Nous travaillons tous sur de nombreux projets, chacun utilisant des versions
différentes des CLI Devops. Par exemple, vous travaillez pour un client qui
utilise Kubernetes
1.23 et Terraform
1.1.4. Ensuite, on vous met sur un nouveau
projet client qui lui utilise Kubernetes
1.25 et Terraform
1.3.6. Si vous ne
gérez pas vos versions correctement cela peut vite tourner au drame avec des
incompatibilités ou du code non pris en charge au moment de la livraison de
celui-ci.
Dans un précédent billet, je vous avais présenté asdf, que j’appelle le
maxi-choco du Devops. Voyons comment l’utiliser
conjointement avec direnv
pour définir finement chaque version des outils
Devops de chacun de vos projets.
Utilisation de direnv avec asdf
Pour rappel, asdf
permet d’installer et d’utiliser différentes versions d’un
même outil dans différents répertoires. direnv
permet de charger et de décharger
des variables d’environnements en fonction du dossier dans lequel vous vous
trouvez.
En combinant asdf
à direnv
on peut ainsi définir automatiquement les
variables d’environnement et les versions des outils d’un projet.
Installation d’asdf et de direnv
Je ne vais pas à nouveau documenter l’installation d'asdf
, je vous renvoie à mon
précédent billet.
Pour installer direnv
, nous allons utiliser asdf
bien sur.
asdf install direnv 2.32.1
asdf global direnv 2.32.1
Maintenant, ajoutez la ligne à votre fichier .bashrc
ou .zshrc
.
# Pour bashrc
eval "$(asdf exec direnv hook bash)"
# Pour zshrc
eval "$(asdf exec direnv hook zsh)"
Rechargez votre shell.
Définir les versions de vos CLI pour votre projet
Ajoutons quelques plugins asdf
pour installer vos CLI :
asdf plugin add terraform
asdf plugin add helmfile
asdf plugin add kubectl
asdf plugin add helm
Allez dans le dossier de votre projet et tapez ces commandes :
asdf direnv setup --shell zsh --version 2.32.1
cat <<EOF> .envrc
use asdf
export AWS_DEFAULT_REGION=eu-west-1
EOF
Définissons les versions des outils de ce répertoire en éditant un fichier .tool-versions
:
terraform 1.1.4
kubernetes 1.23.0
Rechargez votre shell et lançons l’installation :
asdf install
awscli 2.7.34 is already installed
bat 0.22.1 is already installed
direnv 2.32.1 is already installed
docker-compose-v1 v2.9.0 is already installed
exa 0.10.1 is already installed
github-cli 2.16.1 is already installed
gohugo 0.103.1 is already installed
hadolint 2.10.0 is already installed
helm 3.9.4 is already installed
jq 1.6 is already installed
k9s 0.26.5 is already installed
kind 0.16.0 is already installed
krew 0.4.3 is already installed
Downloading kubectl from https://dl.k8s.io/release/v1.23.0/bin/linux/amd64/kubectl
kubectx 0.9.4 is already installed
kustomize 4.5.7 is already installed
minikube 1.27.0 is already installed
mkcert 1.4.4 is already installed
nomad 1.3.5 is already installed
packer 1.8.3 is already installed
polaris 7.1.4 is already installed
popeye v0.10.1 is already installed
rclone 1.59.2 is already installed
tekton-cli 0.26.0 is already installed
terraform 1.3.6 is already installed
tflint 0.40.1 is already installed
tfsec 1.28.0 is already installed
trivy 0.32.0 is already installed
vault 1.11.3 is already installed
yq 4.27.5 is already installed
asdf exec direnv allow
Vous remarquez qu’il se charge de télécharger la version de kubectl
qui n’était
pas encore installé localement. Vérifions que notre variable d’environnement est
bien défini avec la valeur attendue :
echo $AWS_DEFAULT_REGION
eu-west-1
cd ..
direnv: unloading
echo $AWS_DEFAULT_REGION
Vous remarquez en changeant de dossier direnv
à décharger les variables
d’environnement et affichant celle définie, elle n’a plus de valeur.
Conclusion
J’espère que ce billet, vous aurez compris l’intérêt de coupler ces deux outils
que sont asdf
et direnv
!
Fini de recharger sans cesse vos variables et désinstaller et d’installer sans cesse les versions de vos outils.