# ArgoCD

# Mise à jour d'Argo CD (Guide Générique & Bonnes Pratiques)

Ce guide détaille la procédure standard pour mettre à jour Argo CD de manière sécurisée. Depuis la version 3.3, l'augmentation de la taille des Custom Resource Definitions (CRDs) impose l'utilisation du **Server-Side Apply** pour éviter l'erreur `metadata.annotations: Too long`.

---

## Étape 1 : Sauvegarde de précaution (Backup)

Bien qu'Argo CD soit "stateless" (puisque l'état réel est dans Git), il est toujours recommandé de sauvegarder la configuration actuelle, notamment si vous gérez des clusters externes ou des secrets locaux.

```bash
kubectl get all,secret,configmap,crd -n argocd -o yaml > argocd_backup_pre_upgrade.yaml
```

## Étape 2 : Définir la version cible

Vérifiez la dernière version stable sur le [dépôt GitHub officiel d'Argo CD](https://github.com/argoproj/argo-cd/releases) et définissez-la dans une variable d'environnement pour simplifier les commandes suivantes.

```bash
export ARGOCD_VERSION="v3.4.1"
```

## Étape 3 : Application de la mise à jour (Server-Side Apply)

**Attention :** N'utilisez plus la commande classique `kubectl apply -f`. Vous devez obligatoirement utiliser les drapeaux `--server-side` et `--force-conflicts`.

```bash
kubectl apply -n argocd --server-side --force-conflicts -f https://raw.githubusercontent.com/argoproj/argo-cd/${ARGOCD_VERSION}/manifests/install.yaml
```

> **Note :** Si vous utilisez Argo CD en mode "High Availability" (HA), remplacez `install.yaml` par `ha/install.yaml`.

## Étape 4 : Validation et nettoyage

Vérifiez que les nouveaux pods se lancent correctement et remplacent les anciens.

```bash
kubectl get pods -n argocd -w
```

Une fois que tous les pods sont en statut `Running`, vérifiez la version installée via l'interface web ou via l'outil en ligne de commande :

```bash
argocd version --client
```

## Cas particulier : Argo CD "gère" Argo CD (Self-Managed)

Si vous utilisez Argo CD pour mettre à jour Argo CD lui-même via un manifeste `Application`, vous devez explicitement activer le Server-Side Apply dans le fichier YAML de l'Application :

```yaml
apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
  name: argocd
  namespace: argocd
spec:
  syncPolicy:
    syncOptions:
      - ServerSideApply=true # <-- Requis depuis la v3.3

```