Ce module prépare votre poste pour l’ensemble du parcours : Git, conteneurs, IaC, configuration et outils cloud. L’objectif est d’obtenir un environnement reproductible (Linux, macOS ou Windows via WSL2) et un dépôt de formation partagé.
Table of Contents
Objectifs
- Installer et configurer la toolchain DevOps (Git, Docker, Terraform, Ansible, kubectl, Helm, Packer, CLIs cloud).
- Créer un dépôt Git privé contenant scripts, manifestes et notes de formation.
- Mettre en place des scripts de provisionning et de reset pour travailler en environnement propre.
1. Préparer l’OS et les dépendances système
Sur Linux/Debian :
sudo apt update
sudo apt install -y build-essential curl unzip jq python3 python3-pip python3-venv
Sur macOS, exécutez xcode-select --install puis brew bundle (voir fichier ci-dessous).
2. Installer la toolchain DevOps
Fichier d’installation (Linux)
cat <<'SCRIPT' > bootstrap-devops.sh
#!/usr/bin/env bash
set -euo pipefail
apt_packages=(git docker.io docker-compose-plugin gnupg lsb-release software-properties-common)
sudo apt install -y "${apt_packages[@]}"
# Terraform
if ! command -v terraform >/dev/null; then
curl -fsSL https://apt.releases.hashicorp.com/gpg | sudo gpg --dearmor -o /usr/share/keyrings/hashicorp-archive-keyring.gpg
echo "deb [signed-by=/usr/share/keyrings/hashicorp-archive-keyring.gpg] https://apt.releases.hashicorp.com $(lsb_release -cs) main" | sudo tee /etc/apt/sources.list.d/hashicorp.list
sudo apt update && sudo apt install -y terraform
fi
# Terragrunt
TG_VERSION="v0.56.7"
if ! command -v terragrunt >/dev/null; then
curl -Lo terragrunt https://github.com/gruntwork-io/terragrunt/releases/download/${TG_VERSION}/terragrunt_linux_amd64
chmod +x terragrunt && sudo mv terragrunt /usr/local/bin/
fi
# Ansible
pip install --upgrade ansible ansible-lint
# kubectl & helm
curl -LO "https://dl.k8s.io/release/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/linux/amd64/kubectl"
sudo install -o root -g root -m 0755 kubectl /usr/local/bin/kubectl
curl https://raw.githubusercontent.com/helm/helm/master/scripts/get-helm-3 | bash
# Packer
if ! command -v packer >/dev/null; then
sudo apt install -y packer
fi
# AWS & Azure CLI
curl -sSL https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip -o awscliv2.zip && unzip -q awscliv2.zip
sudo ./aws/install --update
curl -sL https://aka.ms/InstallAzureCLIDeb | sudo bash
SCRIPT
chmod +x bootstrap-devops.sh
./bootstrap-devops.sh
Fichier Brewfile (macOS)
cat <<'BREW' > Brewfile
tap "hashicorp/tap"
brew "git"
brew "hashicorp/tap/terraform"
brew "terragrunt"
brew "ansible"
brew "kubectl"
brew "helm"
brew "packer"
brew "awscli"
brew "azure-cli"
brew "snyk"
cask "docker"
BREW
brew bundle
3. Configurer Docker et les permissions
sudo usermod -aG docker "$USER"
newgrp docker
docker run --rm hello-world
Installez aussi docker buildx (docker buildx install) pour les modules containers.
4. Créer le dépôt de formation
mkdir -p ~/devops-training/{docs,infra,playbooks,apps}
cd ~/devops-training
git init
cat <<'EOF' > README.md
# DevOps Training Repo
- `infra/` : Terraform/Terragrunt
- `playbooks/` : Ansible + Packer
- `apps/` : applications de démonstration
- `docs/` : journal de bord et procédures
EOF
cat <<'EOF' > .gitignore
# Terraform
*.tfstate
*.tfstate.*
.terraform/
# Ansible
*.retry
# Docker
**/dist/**
EOF
git add .
git commit -m "chore: bootstrap devops training repo"
Publiez le dépôt sur GitHub/GitLab (privé). Activez les règles : protected branches, approvals, secret scanning.
5. Scripts utilitaires
scripts/reset-dev.sh: supprime containers, kube clusters, fichiers temporaires.scripts/check-tooling.sh: vérifie versions.
cat <<'EOF' > scripts/check-tooling.sh
#!/usr/bin/env bash
set -euo pipefail
commands=(git docker terraform terragrunt ansible kubectl helm packer aws az)
for cmd in "${commands[@]}"; do
printf "%-12s => %s
" "$cmd" "$(command -v $cmd >/dev/null && $cmd --version 2>&1 | head -n1 || echo 'MANQUANT')"
done
EOF
chmod +x scripts/check-tooling.sh
./scripts/check-tooling.sh
6. Lab guidé
- Exécuter
bootstrap-devops.shoubrew bundleselon l’OS. - Créer le dépôt Git, pousser la première version (
mainbranch). - Configurer les CLI cloud :
aws configure --profile training az login --use-device-codeStockez les profils dans
~/.aws/configet~/.azure. - Lancer
scripts/check-tooling.shet ajouter la sortie dansdocs/journal.md. - Configurer un runner local (GitHub Actions
./config.shou GitLab Runner) pour la suite des labs.
Challenge optionnel
- Créer un container Docker personnalisé (
ghcr.io/<org>/devops-toolbox) contenant tous les outils. - Mettre en place un Makefile (
make install,make check,make reset). - Automatiser l’installation via Ansible local (
ansible-playbook bootstrap.yml -K).
Solution détaillée
- Vérifications versions :
scripts/check-tooling.shdoit afficher chaque binaire avec sa version. Les commandes manquantes doivent être traitées avant la suite. - Docker :
docker run hello-worldimprime le message “Hello from Docker!”. Si permission denied, relancez la session après ajout au groupe. - Terraform/Terragrunt :
terraform -version≥ 1.6.x,terragrunt -version≥ 0.56. - kubectl/helm :
kubectl version --client --shortethelm versiondoivent répondre. Exécutezkubectl completion bashpuissource ~/.bashrcpour valider l’autocomplétion. - Dépôt Git :
git remote -vaffiche l’URL du repository privé. Vérifiez que la première pipeline CI passe (lint basique). - Journal :
docs/journal.mdcontient la date, les commandes exécutées et les éventuels problèmes rencontrés.
Une fois ces points validés, vous pouvez attaquer le module 1 sans risque de manquer un outil critique.
Pièges fréquents
- Oublier d’exécuter
newgrp dockeraprès ajout au groupe : les commandes Docker échouent avec 13 permission denied7. - Utiliser
sudodans tout le dépôt : préférez exécuter les scripts en tant qu’utilisateur (sauf installation initiale). - Installer HashiCorp via
snap: versions obsolètes. Utilisez les repo officiels.
Ressources complémentaires
- HashiCorp Learn
- Documentation Ansible
- ShellCheck (lint Bash)
Checklist
- ✅ Toolchain installée et vérifiée (
scripts/check-tooling.sh). - ✅ Dépôt Git privé initialisé et synchronisé.
- ✅ Scripts
bootstrapetresetopérationnels. - ✅ Journal de bord commencé dans
docs/journal.md.


