> ## Documentation Index
> Fetch the complete documentation index at: https://infra-docs.kaeyros.org/llms.txt
> Use this file to discover all available pages before exploring further.

# Déployer une nouvelle version d'une application

> Procédure standard de déploiement via image-updater et les commandes pour forcer une synchronisation immédiate.

Cette page décrit la procédure standard pour déployer une nouvelle version d'une application sur la plateforme Kaeyros. Dans le fonctionnement normal, vous n'avez aucune action manuelle à effectuer : il suffit de publier l'image Docker, et argocd-image-updater détecte le nouveau tag et déclenche la mise à jour.

## Le cas normal : rien a faire

Dans la plupart des cas, vous n'avez rien a faire manuellement. Publier votre image declenche automatiquement le deploiement. Le pipeline est entierement automatise : GitHub Actions construit et pousse l'image, argocd-image-updater detecte le nouveau tag, met a jour l'Application ArgoCD, puis ArgoCD applique la nouvelle version via Argo Rollouts en mode canary par paliers jusqu'a basculer 100 % du trafic.

```mermaid theme={null}
sequenceDiagram
    participant Dev as Developpeur
    participant GHA as GitHub Actions
    participant GHCR as ghcr.io
    participant AIU as argocd-image-updater
    participant Argo as ArgoCD
    participant Roll as Argo Rollouts
    participant Trafic as 100 % du trafic

    Dev->>GHA: git push / merge
    GHA->>GHCR: build + push image
    GHCR-->>AIU: nouveau tag disponible
    AIU->>Argo: met a jour le parametre image/tag
    Argo->>Roll: applique la nouvelle version
    Roll->>Roll: canary par paliers (10 %, 25 %, 50 %...)
    Roll->>Trafic: bascule 100 % du trafic
```

## Suivre un deploiement en cours

Pour suivre l'etat du deploiement en cours, utilisez les commandes suivantes :

```bash Statut Application theme={null}
argocd app get <app>
```

```bash Rollout en cours theme={null}
kubectl argo rollouts get rollout <app>-rollout-v2 -n <ns> --watch
```

```bash Image reellement deployee theme={null}
kubectl -n <ns> get pods -o jsonpath='{.items[*].spec.containers[*].image}{"\n"}'
```

> [!NOTE]
>
> La commande `kubectl argo rollouts get rollout --watch` affiche la progression en temps reel des etapes canary. Interrompez avec `Ctrl+C` une fois le rollout termine.

## Forcer une synchronisation immediate

Si l'attente automatique est trop longue, vous pouvez forcer ArgoCD a synchroniser immediatement sans attendre le cycle automatique :

```bash Sync manuel theme={null}
argocd app sync <app>
argocd app wait <app> --health
```

> [!NOTE]
>
> La commande `argocd app wait` attend que l'application passe a l'etat Healthy. Elle est utile dans un pipeline CI/CD ou lors d'une intervention manuelle.

## Verifier que la nouvelle version est bien en ligne

Suivez ces etapes pour confirmer que le deploiement est complet et que la nouvelle version est bien en ligne :

**1. Verifier que le Rollout est termine**

Confirmez que le canary est a 100 % et que l'ancienne version n'a plus de replicas actifs :

```bash theme={null}
kubectl argo rollouts get rollout <app>-rollout-v2 -n <ns>
```

**2. Verifier que tous les pods sont Ready**

Verifiez que tous les pods de l'application sont dans l'etat `Running` et `Ready` :

```bash theme={null}
kubectl -n <ns> get pods -l app=<app>
```

**3. Verifier la sante de l'Application**

Assurez-vous que l'Application ArgoCD est a l'etat `Healthy` et `Synced` :

```bash theme={null}
argocd app get <app>
```

**4. Fumer test : appeler une URL publique**

Effectuez un test de fumer en appelant une URL publique de l'application pour valider le comportement en production :

```bash theme={null}
curl -s -o /dev/null -w "%{http_code}" https://<app>.kaeyros-analytics.com/health
```

> [!WARNING]
>
> Le tag d'image n'est pas dans Git (voir image-updater). Pour savoir ce qui tourne reellement, utilisez la commande suivante :
>
> ```bash theme={null}
> kubectl -n <ns> get pods -o json | jq '.items[].spec.containers[].image'
> ```


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.