Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
71 changes: 71 additions & 0 deletions 01-introduction-concepts.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,71 @@
# 01 - Introduction à Git et au versionnage

[🏠 Accueil](README.md) | [02 - Installation et Configuration →](02-installation-configuration.md)

---

## 1. Qu'est-ce que Git ?

**Git** est un système de contrôle de version distribué créé par Linus Torvalds en 2005.
C'est l'outil le plus utilisé au monde pour gérer les versions de code source et suivre l'historique des modifications d'un projet.

![Git Logo](https://git-scm.com/images/logos/downloads/Git-Logo-2Color.png)

### Pourquoi Git est essentiel en DevOps Azure ?

En DevOps Azure, tout est code : les infrastructures (Terraform, Bicep), les pipelines CI/CD, les configurations Kubernetes, les scripts Azure CLI. Git est le fil conducteur qui relie chaque modification à un contexte et une personne.

- **🏗️ Versionnage de l'Infrastructure as Code** : Suivez chaque modification de vos fichiers Terraform, Bicep ou ARM templates.
- **🤝 Collaboration d'équipe** : Plusieurs ingénieurs travaillent simultanément sur la même infrastructure sans écraser leurs modifications.
- **🔄 Reproductibilité** : Retournez à l'état exact de votre infrastructure à n'importe quel point dans le temps.
- **🚀 Intégration CI/CD** : Déclenchez automatiquement un `terraform apply` ou un déploiement AKS à chaque merge sur `main`.
- **🔍 Audit et conformité** : Identifiez qui a modifié une règle de sécurité, un RBAC ou un pare-feu Azure, quand et pourquoi.

---

## 2. Les concepts fondamentaux

| Concept | Description | Analogie DevOps |
|---|---|---|
| **Repository (Dépôt)** | Conteneur qui stocke tout l'historique du projet | Un dépôt Terraform avec tout son historique |
| **Commit** | Snapshot de vos fichiers à un instant T | Un état figé de votre infrastructure Azure |
| **Branch (Branche)** | Ligne de développement indépendante | Un environnement de staging isolé |
| **Merge (Fusion)** | Combinaison de deux branches | Promotion d'une feature en production |
| **Remote** | Version du dépôt hébergée sur un serveur | Votre repo GitHub ou Azure DevOps Repos |

---

## 3. Architecture Git : Distribué vs Centralisé

Contrairement aux systèmes centralisés (SVN, CVS), Git est **distribué**. Chaque ingénieur possède une copie complète de l'historique, permettant de travailler hors ligne et de créer des branches sans toucher au serveur central.

### Les trois états de Git

1. **Working Directory** : Vos fichiers actuels (`main.tf`, `deployment.yaml`, etc.).
2. **Staging Area (Index)** : Zone de préparation avant le commit.
3. **Repository (.git)** : Base de données contenant tout l'historique.

```text
Working Directory ─────► Staging Area ─────► Repository
(main.tf modifié) (Préparé) (Commité)
```

---

## 4. Git dans l'écosystème DevOps Azure

Git est la pierre angulaire de toute la chaîne DevOps :

```
Code / IaC CI/CD Cloud Azure
────────── ────── ───────────
git push → GitHub Actions → az deployment
→ terraform plan → Azure Resources
→ docker build → ACR / AKS
```

Les plateformes principales utilisées en entreprise pour héberger les dépôts Git sont **GitHub** (avec GitHub Actions pour le CI/CD) et **Azure DevOps Repos** (avec Azure Pipelines).

---

[🏠 Accueil](README.md) | [02 - Installation et Configuration →](02-installation-configuration.md)
134 changes: 134 additions & 0 deletions 02-installation-configuration.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,134 @@
# 02 - Installation et Configuration

[← 01 - Introduction](01-introduction-concepts.md) | [🏠 Accueil](README.md) | [03 - Premiers pas →](03-premiers-pas.md)

---

## 1. Installation de Git

### 🍎 macOS
```bash
# Avec Homebrew
brew install git
# Ou via Xcode
xcode-select --install
```

### 🐧 Linux (Debian/Ubuntu)
```bash
sudo apt-get update
sudo apt-get install git
```

### 🪟 Windows
Téléchargez Git depuis [git-scm.com](https://git-scm.com/download/win) ou installez [Git for Windows](https://gitforwindows.org/).

---

## 2. Configuration initiale (OBLIGATOIRE)

Avant votre premier commit, vous devez configurer votre identité :

```bash
# Identité (apparaîtra dans l'historique)
git config --global user.name "Votre Prénom Nom"
git config --global user.email "votre.email@example.com"

# Éditeur par défaut (ex: VS Code)
git config --global core.editor "code --wait"

# Branche par défaut
git config --global init.defaultBranch main
```

### Voir la configuration
```bash
git config --list
```

---

## 3. Les Alias : Gagner du temps
Créez des raccourcis pour les commandes fréquentes :

```bash
git config --global alias.st status
git config --global alias.co checkout
git config --global alias.br branch
git config --global alias.ci commit
git config --global alias.lg 'log --oneline --graph --all --decorate'
```

Usage : `git st` au lieu de `git status`.

---

## 4. Authentification SSH (Recommandé)

L'authentification par **clé SSH** est plus sécurisée et plus pratique que le mot de passe : vous n'avez plus à vous authentifier à chaque `push` ou `pull`.

### Étape 1 : Générer une paire de clés SSH

```bash
# Générer une clé ED25519 (algorithme moderne et recommandé)
ssh-keygen -t ed25519 -C "votre.email@example.com"

# Laisser le chemin par défaut (~/.ssh/id_ed25519)
# Définir une passphrase (optionnel mais conseillé)
```

### Étape 2 : Démarrer l'agent SSH et ajouter la clé

```bash
# Démarrer l'agent SSH en arrière-plan
eval "$(ssh-agent -s)"

# Ajouter votre clé privée à l'agent
ssh-add ~/.ssh/id_ed25519
```

### Étape 3 : Copier la clé publique

```bash
# Afficher la clé publique (à copier)
cat ~/.ssh/id_ed25519.pub
```

### Étape 4 : Ajouter la clé sur GitHub / GitLab

**GitHub** : `Settings` → `SSH and GPG keys` → `New SSH key` → Coller la clé publique.

**GitLab** : `Preferences` → `SSH Keys` → Coller la clé publique.

### Étape 5 : Tester la connexion

```bash
# GitHub
ssh -T git@github.com
# Réponse attendue : "Hi username! You've successfully authenticated..."

# GitLab
ssh -T git@gitlab.com
```

### Utiliser SSH au lieu de HTTPS

```bash
# Cloner avec SSH (au lieu de HTTPS)
git clone git@github.com:username/mon-projet.git

# Changer un remote existant de HTTPS vers SSH
git remote set-url origin git@github.com:username/mon-projet.git
```

> 💡 **Astuce** : Sur macOS, ajoutez ces lignes dans `~/.ssh/config` pour que la passphrase soit mémorisée dans le trousseau :
> ```
> Host github.com
> AddKeysToAgent yes
> UseKeychain yes
> IdentityFile ~/.ssh/id_ed25519
> ```

---

[← 01 - Introduction](01-introduction-concepts.md) | [🏠 Accueil](README.md) | [03 - Premiers pas →](03-premiers-pas.md)
110 changes: 110 additions & 0 deletions 03-premiers-pas.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,110 @@
# 03 - Premiers pas : Créer et gérer un dépôt

[← 02 - Configuration](02-installation-configuration.md) | [🏠 Accueil](README.md) | [04 - Maîtrise des branches →](04-maitrise-branches.md)

---

## 1. Initialiser ou Cloner un dépôt

### Nouveau projet local
```bash
mkdir infra-azure
cd infra-azure
git init
```

### Récupérer un projet existant
```bash
# Via HTTPS
git clone https://github.com/username/infra-azure.git

# Via SSH (recommandé, voir module 02)
git clone git@github.com:username/infra-azure.git
```

---

## 2. Le cycle de vie d'un fichier

En DevOps Azure, vos fichiers sont typiquement des configurations IaC (`.tf`, `.bicep`), des manifests Kubernetes (`.yaml`) ou des scripts Azure CLI (`.sh`).

### Vérifier l'état
```bash
git status
```

### Ajouter des modifications (Staging)
```bash
git add main.tf # Fichier Terraform spécifique
git add kubernetes/ # Tout un dossier de manifests
git add . # Tout le dossier actuel
```

### Créer un commit (Snapshot)
```bash
git commit -m "feat: add AKS cluster Terraform module"
```

---

## 3. Consulter l'historique

### Liste des commits
```bash
git log # Complet
git log --oneline # Résumé (idéal pour voir les changements d'infra)
git log --graph # Vue graphique des branches
```

### Voir les modifications d'un commit
```bash
git show <commit_hash>
# Affiche le diff exact : quelles lignes de main.tf ont changé
```

### Voir les différences non committées
```bash
git diff # Working directory vs Staging
git diff --staged # Staging vs dernier commit
```

---

## 4. Structure typique d'un dépôt IaC Azure

```
infra-azure/
├── terraform/
│ ├── main.tf # Ressources principales
│ ├── variables.tf # Déclaration des variables
│ ├── outputs.tf # Valeurs exportées
│ └── versions.tf # Contraintes de versions
├── kubernetes/
│ ├── deployment.yaml
│ └── service.yaml
├── scripts/
│ └── bootstrap.sh # Script Azure CLI d'initialisation
├── .github/
│ └── workflows/
│ └── deploy.yml # Pipeline CI/CD GitHub Actions
├── .gitignore
└── README.md
```

---

## 💡 Conseil : Commits atomiques en IaC

Un commit IaC doit représenter **une seule ressource ou une seule décision d'architecture**. Ne mélangez pas la création d'un AKS et la configuration d'un Key Vault dans le même commit. Cela facilite les revues et les retours en arrière en cas d'incident.

```bash
# ✅ Bon : un commit = une ressource
git commit -m "feat: add Azure Key Vault for secrets management"

# ❌ Mauvais : tout dans un commit
git commit -m "update infra"
```

---

[← 02 - Configuration](02-installation-configuration.md) | [🏠 Accueil](README.md) | [04 - Maîtrise des branches →](04-maitrise-branches.md)
Loading
Loading