Aller au contenu
Outils medium

asdf : un gestionnaire de versions universel pour DevOps

15 min de lecture

logo asdf

asdf remplace nvm, pyenv, rbenv et tous les gestionnaires de versions spécifiques par un seul outil. Avec une commande unique (asdf install), vous installez Node.js, Python, Go, Terraform, kubectl et plus de 700 outils. Le fichier .tool-versions à la racine de chaque projet garantit que toute l’équipe utilise exactement les mêmes versions. Fini les “ça marche sur ma machine”.

  • Comprendre le fonctionnement d’asdf (plugins, shims, résolution de versions)
  • Installer asdf sur Linux et macOS
  • Gérer vos outils : installer, définir des versions globales et locales
  • Synchroniser une équipe avec le fichier .tool-versions
  • Migrer depuis nvm, pyenv ou rbenv
  • Optimiser votre workflow avec les bonnes pratiques

Architecture asdf : CLI, plugins, shims et fichier .tool-versions

asdf repose sur trois concepts clés :

ConceptDescriptionExemple
PluginExtension pour gérer un outil spécifiqueasdf-nodejs, asdf-python
ShimWrapper qui redirige vers la bonne version~/.asdf/shims/node
VersionInstance installée d’un outilnodejs 22.13.1

Comment asdf choisit la version ? (ordre de priorité)

  1. Variable d’environnement ASDF_<TOOL>_VERSION
  2. Fichier .tool-versions dans le répertoire courant
  3. Fichier .tool-versions dans les répertoires parents (remontée)
  4. Fichier ~/.tool-versions (version globale)

Où sont stockés les outils ?

~/.asdf/
├── installs/ # Versions installées
│ ├── nodejs/
│ │ └── 22.13.1/
│ └── python/
│ └── 3.12.8/
├── plugins/ # Plugins installés
├── shims/ # Wrappers (à ajouter au PATH)
└── .tool-versions # Versions globales
  1. Télécharger le binaire

    Fenêtre de terminal
    wget https://github.com/asdf-vm/asdf/releases/download/v0.18.0/asdf-v0.18.0-linux-amd64.tar.gz
    tar -xvzf asdf-v0.18.0-linux-amd64.tar.gz -C ${HOME}/.local/bin
    chmod +x ${HOME}/.local/bin/asdf
  2. Configurer le shell (Bash)

    Fenêtre de terminal
    echo 'export PATH="${ASDF_DATA_DIR:-$HOME/.asdf}/shims:$PATH"' >> ~/.bashrc
    echo '. <(asdf completion bash)' >> ~/.bashrc
    source ~/.bashrc
  3. Configurer le shell (Zsh)

    Fenêtre de terminal
    echo 'export PATH="${ASDF_DATA_DIR:-$HOME/.asdf}/shims:$PATH"' >> ~/.zshrc
    mkdir -p "${ASDF_DATA_DIR:-$HOME/.asdf}/completions"
    asdf completion zsh > "${ASDF_DATA_DIR:-$HOME/.asdf}/completions/_asdf"

    Ajoutez cette ligne avant autoload -Uz compinit && compinit :

    Fenêtre de terminal
    fpath=(${ASDF_DATA_DIR:-$HOME/.asdf}/completions $fpath)
  4. Vérifier l’installation

    Fenêtre de terminal
    asdf --version

    Résultat attendu : asdf version v0.18.0

Fenêtre de terminal
# Lister les plugins disponibles (700+)
asdf plugin list all | head -20
# Ajouter un plugin
asdf plugin add nodejs
asdf plugin add python
asdf plugin add golang
asdf plugin add terraform
# Lister les plugins installés
asdf plugin list
# Mettre à jour un plugin
asdf plugin update nodejs
# Mettre à jour tous les plugins
asdf plugin update --all
# Supprimer un plugin
asdf plugin remove nodejs
Fenêtre de terminal
# Lister les versions disponibles
asdf list all nodejs | tail -10
# Installer une version spécifique
asdf install nodejs 22.13.1
asdf install python 3.12.8
# Installer la dernière version stable
asdf install nodejs latest
# Lister les versions installées
asdf list nodejs
Fenêtre de terminal
# Version globale (pour tout le système)
asdf set --home nodejs 22.13.1
# Version locale (pour le projet courant)
cd mon-projet
asdf set nodejs 20.18.0
# Vérifier la version active
asdf current nodejs
# Vérifier toutes les versions actives
asdf current
Fenêtre de terminal
# Désinstaller une version
asdf uninstall nodejs 20.18.0
# Supprimer un plugin (et toutes ses versions)
asdf plugin remove nodejs

Le fichier .tool-versions est la clé pour garantir des environnements identiques. Placez-le à la racine de votre projet et committez-le.

.tool-versions
nodejs 22.13.1
python 3.12.8
terraform 1.9.8
kubectl 1.31.4

Workflow équipe :

  1. Cloner le projet

    Fenêtre de terminal
    git clone https://github.com/mon-org/mon-projet.git
    cd mon-projet
  2. Installer les plugins nécessaires

    Fenêtre de terminal
    # Script d'installation automatique
    for plugin in $(cut -d' ' -f1 .tool-versions); do
    asdf plugin add "$plugin" 2>/dev/null || true
    done
  3. Installer toutes les versions

    Fenêtre de terminal
    asdf install

    Cette commande lit .tool-versions et installe toutes les versions manquantes.

  4. Vérifier

    Fenêtre de terminal
    asdf current
Fenêtre de terminal
for tool in $(asdf plugin list); do
latest=$(asdf latest "$tool" 2>/dev/null)
if [[ -n "$latest" ]]; then
asdf install "$tool" "$latest" \
&& asdf set --home "$tool" "$latest" \
&& echo "$tool$latest"
fi
done
Fenêtre de terminal
asdf latest --all

Résultat :

golang 1.23.5 installed
helm 3.17.1 missing
k9s 0.32.7 missing
nodejs 23.7.0 missing
python 3.13.2 missing

Ajoutez à votre .bashrc ou .zshrc :

Fenêtre de terminal
# Installer la dernière version d'un outil
alias asdf-latest='asdf install $1 latest && asdf set --home $1 latest'
# Nettoyer les anciennes versions
asdf-cleanup() {
for plugin in $(asdf plugin list); do
versions=$(asdf list "$plugin" 2>/dev/null | wc -l)
if [[ $versions -gt 1 ]]; then
echo "🧹 $plugin a $versions versions installées"
fi
done
}
Fenêtre de terminal
# Exporter vos versions globales
cp ~/.tool-versions ~/dotfiles/.tool-versions
# Sur une nouvelle machine
cp ~/dotfiles/.tool-versions ~/.tool-versions
for plugin in $(cut -d' ' -f1 ~/.tool-versions); do
asdf plugin add "$plugin"
done
asdf install
Fenêtre de terminal
# Voir quelle version est utilisée et pourquoi
asdf current nodejs
# → nodejs 22.13.1 /home/user/projet/.tool-versions
# Voir où est installé un outil
asdf where nodejs 22.13.1
# → /home/user/.asdf/installs/nodejs/22.13.1
# Vérifier le shim
which node
# → /home/user/.asdf/shims/node
Fenêtre de terminal
# 1. Exporter la version actuelle
node_version=$(node --version | sed 's/v//')
# 2. Installer le plugin asdf
asdf plugin add nodejs
# 3. Installer la même version
asdf install nodejs "$node_version"
asdf set --home nodejs "$node_version"
# 4. Désinstaller nvm
rm -rf ~/.nvm
# Supprimer les lignes nvm de ~/.bashrc ou ~/.zshrc
Fenêtre de terminal
# 1. Exporter la version actuelle
python_version=$(python --version | cut -d' ' -f2)
# 2. Installer le plugin asdf
asdf plugin add python
# 3. Installer la même version
asdf install python "$python_version"
asdf set --home python "$python_version"
# 4. Désinstaller pyenv
rm -rf ~/.pyenv
# Supprimer les lignes pyenv de ~/.bashrc ou ~/.zshrc
PluginCommande d’installationUsage
nodejsasdf plugin add nodejsRuntime JavaScript
pythonasdf plugin add pythonScripting, ML, automation
golangasdf plugin add golangCLI tools, microservices
terraformasdf plugin add terraformInfrastructure as Code
kubectlasdf plugin add kubectlGestion Kubernetes
helmasdf plugin add helmCharts Kubernetes
awscliasdf plugin add awscliCLI Amazon Web Services
gcloudasdf plugin add gcloudCLI Google Cloud
Fenêtre de terminal
# Régénérer les shims
asdf reshim
# Vérifier que les shims sont dans le PATH
echo $PATH | tr ':' '\n' | grep asdf
Fenêtre de terminal
# Définir une version globale par défaut
asdf set --home nodejs latest
Fenêtre de terminal
# Erreur courante avec nodejs
# /home/bob/.asdf/plugins/nodejs/bin/../lib/utils.sh: line 27: HOME: unbound variable
# Solution : mettre à jour le plugin manuellement
asdf plugin remove nodejs
asdf plugin add nodejs

Certains plugins nécessitent des dépendances système :

Fenêtre de terminal
# Pour Python (compilation)
sudo apt install build-essential libssl-dev zlib1g-dev \
libbz2-dev libreadline-dev libsqlite3-dev libffi-dev
# Pour Ruby
sudo apt install autoconf bison build-essential libssl-dev \
libyaml-dev libreadline-dev zlib1g-dev libncurses5-dev
ConceptCommande / Fichier
Ajouter un pluginasdf plugin add <nom>
Installer une versionasdf install <nom> <version>
Version globaleasdf set --home <nom> <version>
Version locale (projet)asdf set <nom> <version>
Fichier de config.tool-versions
Voir la version activeasdf current

Points clés :

  • Un seul outil pour gérer tous vos runtimes et outils CLI
  • Le fichier .tool-versions synchronise toute l’équipe
  • Priorité : local > parent > global
  • Ne pas utiliser en CI/CD pour des raisons de sécurité

Ce site vous est utile ?

Sachez que moins de 1% des lecteurs soutiennent ce site.

Je maintiens +700 guides gratuits, sans pub ni tracing. Aujourd'hui, ce site ne couvre même pas mes frais d'hébergement, d'électricité, de matériel, de logiciels, mais surtout de cafés.

Un soutien régulier, même symbolique, m'aide à garder ces ressources gratuites et à continuer de produire des guides de qualité. Merci pour votre appui.