asdf le maxi choco du Devops !
Publié le : 11 février 2022 | Mis à jour le : 1 septembre 2023J’avais qualifié arkade
de choco du Devops, et bien pour les gourmands, il
y a le maxi-choco qui se nomme asdf
. Arkade ne permet d’installer
qu’une seule version de la plupart des outils Devops, alors qu'asdf
reprend le fonctionnement des outils de type
pyenv, gvm, nvm, rbenv.
C’est-à-dire qu’il permet d’installer différentes versions d’un même outil, et
de définir quelle version sera utilisé dans un répertoire précis.
Installation
ASDF ne demande que deux dépendances et si vous êtes développeur, elles sont
forcément déjà installées sur votre poste. Il s’agit de curl
et git
, donc il
suffit juste de l’installer. Pour cela, il suffit de cloner le projet dans votre
home directory :
pip install lastversion --user
git clone https://github.com/asdf-vm/asdf.git ~/.asdf --branch v$(lastversion asdf-vm/asdf)
Il faut ensuite ajouter cette ligne dans votre fichier .bashrc
ou .zshrc
:
. $HOME/.asdf/asdf.sh
Si vous utilisez zsh
, vous pouvez aussi ajouter ses lignes pour activer
l'auto-completion :
# append completions to fpath
fpath=(${ASDF_DIR}/completions $fpath)
# initialise completions with ZSH's compinit
autoload -Uz compinit && compinit
Utilisation d’asdf
Pour démarrer bien sûr, il suffit de taper la commande asdf --help
, mais je
vais vous expliquer le fonctionnement avant.
Lorsque vous installez asdf, en fait, vous ne pouvez pas installer d’outils.
Il faut dans un premier temps ajouter des plugins. Pour obtenir la liste des
plugins disponibles, il suffit de taper la commande asdf plugin list all |more
Pourquoi ai-je mis un |more
? Tout simplement parce que la liste retournée
donne juste le vertige. Difficile ne pas trouver votre bonheur.
Je tiens tout de même à préciser que cette liste n’est pas exhaustive et que parfois certains plugins ne fonctionnent pas correctement. Mais attention certains plugins nécessitent la présence de certaines dépendances, donc en cas de problème le mieux est de se rendre sur la page du projet de ce plugin et de lire sa documentation.
Heureusement, il existe plusieurs versions du même plugin (il faut fouiller sur github), et on peut aussi développer ses propres plugins.
Installation de plugins
Maintenant que nous avons la liste des plugins voyons comment en installer. La
commande pour installer un plugin est : asdf plugin add <nom de votre choix> <repository du plugin>
.
Par exemple pour installer direnv
:
asdf plugin-list-all| grep -i direnv
direnv https://github.com/asdf-community/asdf-direnv.git
asdf plugin add direnv https://github.com/asdf-community/asdf-direnv.git
Pourquoi je conseille d’ajouter le lien, alors qu’on pourrait simplement utiliser le nom. Tout simplement parce que vous pourrez installer d’autres versions d’un plugin si celui par défaut ne vous donne pas satisfaction.
Que s’est-il passé ? En fait dans le répertoire $HOME/.asdf
asdf à cloner
le projet dans le répertoire plugins. Et l’outil n’est toujours pas installé
!
direnv
zsh: command not found: direnv
Installation de différentes versions des outils
Bon, nous allons pouvoir installer notre outil direnv
. Je vous rappelle qu’il
est possible d’installer plusieurs versions d’un même outil et de configurer la
version par répertoire. Voyons cela en détail. Pour afficher la liste des
versions disponibles, il suffit d’utiliser la commande asdf list all <nom du plugin>
. Pour notre exemple cela donne :
asdf list all direnv
...
2.26.0
2.27.0
2.28.0
2.29.0
2.30.0
2.30.1
2.30.2
2.30.3
Pour installer la dernière version, si le plugin est bien écrit, il suffit
d’utiliser la commande asdf install <nom du plugin> latest
.
asdf install direnv latest
∗ Downloading and installing direnv...
The installation was successful!
Voyons si nous pouvons utiliser notre outil :
direnv
No version is set for command direnv
Consider adding one of the following versions in your config file at /home/vagrant/.asdf/.tool-versions
direnv 2.30.3
Toujours pas. Il faut comme indiqué ajouter une ligne au fichier de
configuration se trouvant dans le répertoire $HOME/.asdf
ou dans directement
dans la home directory. Cela peut aussi se faire avec la commande asdf global <nom du plugin> <version|latest>
:
asdf global direnv latest
cat ~/.tool-versions
direnv 2.30.3
Maintenant on peut utiliser direnv
:
direnv
direnv version
2.30.3
Maintenant, vous voulez pouvoir installer votre outil avec une version précise
dans un répertoire. Nous allons utiliser cette fois la commande asdf local <nom du plugin> <version|latest>
. Il faut au préalable installer la version ! :
mkdir test
asdf install direnv 2.26.0
asdf local direnv 2.26.0
direnv version
2.26.0
ls -alrt
total 12
-rw-r--r--. 1 vagrant vagrant 14 Feb 11 09:45 .tool-versions
drwxr-xr-x. 2 vagrant vagrant 28 Feb 11 09:45 .
drwx------. 51 vagrant vagrant 4096 Feb 11 09:45 ..
cat .tool-versions
direnv 2.26.0
Pour revenir à une version standard :
asdf local <nom du plugin> system
cat .tool-versions
direnv system
Mise à jour d’asdf
Pour la mise à jour vers la dernière release stable, asdf intègre son propre mécanisme d’update :
asdf update
Gestion des plugins
Pour lister les plugins :
asdf plugin list --urls
direnv https://github.com/asdf-community/asdf-direnv.git
Mettre à jour tous les plugins :
asdf plugin update --all
Mettre à jour d’un plugin :
asdf plugin update <nom du plugin>
Vérifier les dernières versions disponibles de vos outils :
asdf latest --all
awscli 2.8.0 missing
bat 0.22.1 installed
direnv 2.32.1 installed
docker-compose-v1 docs-v1.8.0-2016-08-03 missing
exa 0.10.1 installed
gohugo 0.104.3 missing
hadolint 2.10.0 installed
helm 3.10.0 missing
jq 1.6 installed
k9s 0.26.6 missing
kind 0.16.0 installed
krew 0.4.3 installed
kubectl 1.25.2 installed
kubectx 0.9.4 installed
kustomize 4.5.7 installed
minikube 1.27.0 installed
mkcert 1.4.4 installed
nomad 1.3.5 installed
packer 1.8.3 installed
polaris 7.1.5 installed
popeye v0.10.1 installed
rclone 1.59.2 installed
tekton-cli 0.26.0 installed
terraform 1.3.1 missing
tflint 0.41.0 missing
tfsec 1.28.0 installed
trivy 0.32.1 missing
vault 1.11.4+ent missing
yq 4.27.5 installed
Désinstaller une version d’un outil :
asdf uninstall <nom du plugin> <version>
Désinstaller un plugin :
asdf plugin remove <nom du plugin>
Pourquoi je vous déconseille d’utiliser asdf dans vos pipelines CI/CD ?
En parcourant cet outil, je me suis fait cette réflexion : pourquoi pas l’utiliser lors de la construction d’image Docker. Très mauvaises idées ! Vous devez garantir la sécurité de votre supply chain. Les scripts des plugins sont à la main de personnes que vous ne connaissez pas. Il est donc très facile d’introduire du code malveillant dans des scripts d’installation
Développement de plugins
asdf
est un superbe outil et il existe des outils qui ne sont pas encore
gérés. Donc pourquoi pas contribuer ?
A venir …
Conclusion
asdf
est très bel outil, qui va vous permettre de rendre même vos projets
idempotent. C’est-à-dire qu’à tout moment, vous êtes sûr de construire vos
projets avec des versions précises des outils utilisés.
Je l’ai intégré dans ma configuration devops 2022.