Déploiement
ArgoCD installation app-of-apps
Mettre en place la bedigital-app-of-apps dans argocd, appliquer le fichier root-app.yaml du repo
https://gitlab.com/olicy/bedigital/infra/applications
Architecture DevOps Bedigital
.
├── argocd-definitions/
│ ├── .argocd-source-maisondubonze-38xknku2.yaml
│ └── .argocd-source-autre-application.yaml
│
└── application-manifests/
├── maisondubonze-38xknku2/
│ ├── values.yaml
│ └── secret.yaml
│
└── autre-application/
├── values.yaml
└── secret.yaml
Explication de cette structure :
-
argocd-definitions/: Ce dossier contient uniquement les fichiers qui définissent vos Application Argo CD. C'est la "configuration pour Argo CD". C'est dans ce dossier que vous créerez tous vos fichiers .argocd-source-*.yaml. -
application-manifests/: Ce dossier contient la configuration spécifique à chaque application :- values.yaml pour le chart Helm.
- secret.yaml et tout autre manifeste Kubernetes brut que vous souhaitez appliquer en plus du chart Helm.
1. Nouvelle instance BeDigital custom
1. Repo git projet custom
Les projets custom doivent être créé dans le git olicy/bedigital-projects et porter le nom du projet sans le préfix bd- et sans id (ex: maisondubonze)
2. Créé un utilisateur AWS IAM
Sur le compte AWS Olicy dans AWS IAM
ajouter le suffix -staging pour une instance de recette (ex : maisondubonze-38xknku2-staging)
PROD et STAGING
- préfixé l'utiliisateur
bd-(ex: bd-hubscrm-jsaf3545) - ajouter l'utilisateur dans le groupe
BeDigitalProd - ajouter un tag (Balise) à l'utilisateur, ajouter le tag
usernameavec en valeur le nom de l'utilisateur sans le préfixbd-(ex : hubscrm-jsaf3545 )

La PROD et la STAGING utilise le même bucket S3
3. DevOps définition
La définition de l'application doit être dans le dossier /argocd-definitions/<projet>,
La définition de l'Application Argo CD dans le dossier /application-manifests et créé le fichier .argocd-source-<nomprojet-id>.yaml
Pour une STAGING .argocd-source-<nomprojet-id-staging>.yaml
1. Application Argo CD
apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
name: <nomprojet-id>
namespace: nexylan-argocd
spec:
project: bedigital
# --- CONFIGURATION MULTI-SOURCE ---
sources:
# Source n°1 : Le chart Helm depuis le registre de packages GitLab
- repoURL: https://gitlab.com/api/v4/projects/61954451/packages/helm/stable
chart: bedigital
targetRevision: "^2.0.0"
helm:
# Fait référence au fichier values.yaml d'une autre source via 'ref'
valueFiles:
- $values/application-manifests/<nomprojet-id>/values.yaml
# Source n°2 : Les fichiers de valeurs depuis le dépôt Git
- repoURL: https://gitlab.com/olicy/bedigital/infra/applications.git
targetRevision: main
# On donne une référence à cette source pour que la source n°1 puisse l'utiliser
ref: values
# Source n°3 : Uniquement le secret.yaml et autres manifestes bruts
- repoURL: https://gitlab.com/olicy/bedigital/infra/applications.git
targetRevision: main
path: application-manifests/<nomprojet-id>
# On exclut le values.yaml pour ne pas l'appliquer deux fois
directory:
exclude: '{values.yaml,Chart.yaml,templates/}'
destination:
server: https://kubernetes.default.svc
namespace: bedigital-app
syncPolicy:
automated:
prune: true
selfHeal: true
2. Secret application
Créer le Secret à partir du serveur nc3413 pour chiffrer les secrets avec kubeseal
- Créez un secret Kubernetes SealedSecret en YAML, par exemple :
kubectl create secret generic projets-xxxx-**staging**-bedigital -n bedigital-app --dry-run=client --from-literal=APP_KEY="base64:vfb6VQXZT5Bqm35PSdf7LJuO3lhbHfO2iE4eoBioMKo=" --from-literal=DB_HOST="185.x.x.x" --from-literal=DB_DATABASE="bd-projets-xxxx-stg-0bxl99js_prod" --from-literal=DB_USERNAME="bd-projets-xxxx-stg-0bxl99js_prod_user" --from-literal=DB_PASSWORD="xxxxxXXXxx" --from-literal=AWS_ACCESS_KEY_ID="AKIAXXXXX" --from-literal=AWS_SECRET_ACCESS_KEY=xxxxxxx -o yaml | kubeseal --controller-name=sealed-secrets --controller-namespace=kube-system --format yaml > sealedsecret.yaml
- Le fichier
sealedsecret.yamlchiffré peut être stocké en toute sécurité, par exemple dans un dépôt Git, et partagé sans risque. - Le contrôleur SealedSecrets dans le cluster déchiffrera le secret et créera un Secret Kubernetes déchiffré classique.
Push le fichier sealedsecret.yaml dans https://gitlab.com/olicy/bedigital/infra/applications/dzdzdz-dzdzdzd/
3. Values de l'application
Exemple de values.yaml
image:
repository: registry.gitlab.com/olicy/bedigital-projects/maisondubonze
tag: v0.2.13
ingress:
enabled: true
class: nginx
resources:
php:
requests:
memory: "256Mi"
cpu: "250m"
worker:
requests:
memory: "256Mi"
limits:
memory: "512Mi"
5. Déployement CI/CD automatique n8n
Sur la plateforme n8n https://workflow.olicy.fr/, copier le worflow de TEMPLATE BeDigital afin de mettre en place le déploiement continue.
n8n va détecter une nouvelle pipeline et commit le nouveau tag de l'application dans le values.yaml dans le repo DevOps.
Configuration
Changer les valeurs des nodes Git en fonction du projet.


2. Nouvelle instance BeDigital standard
Sans repo git custom, il utilise BeCore
1. Créé un utilisateur AWS IAM
Sur le compte AWS Olicy dans AWS IAM
ajouter le suffix -staging pour une instance de recette (ex : maisondubonze-38xknku2-staging)
PROD et STAGING
- préfixé l'utiliisateur
bd-(ex: bd-hubscrm-jsaf3545) - ajouter l'utilisateur dans le groupe
BeDigitalProd - ajouter un tag (Balise) à l'utilisateur, ajouter le tag
usernameavec en valeur le nom de l'utilisateur sans le préfixbd-(ex : hubscrm-jsaf3545 )

La PROD et la STAGING utilise le même bucket S3
3. DevOps définition
La définition de l'application doit être dans le dossier /argocd-definitions/<projet>,
La définition de l'Application Argo CD dans le dossier /application-manifests et créé le fichier .argocd-source-<nomprojet-id>.yaml
Pour une STAGING .argocd-source-<nomprojet-id-staging>.yaml
1. Application Argo CD
apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
name: <nomprojet-id>
namespace: nexylan-argocd
spec:
project: bedigital
# --- CONFIGURATION MULTI-SOURCE ---
sources:
# Source n°1 : Le chart Helm depuis le registre de packages GitLab
- repoURL: https://gitlab.com/api/v4/projects/61954451/packages/helm/stable
chart: bedigital
targetRevision: "^2.0.0"
helm:
# Fait référence au fichier values.yaml d'une autre source via 'ref'
valueFiles:
- $values/application-manifests/<nomprojet-id>/values.yaml
# Source n°2 : Les fichiers de valeurs depuis le dépôt Git
- repoURL: https://gitlab.com/olicy/bedigital/infra/applications.git
targetRevision: main
# On donne une référence à cette source pour que la source n°1 puisse l'utiliser
ref: values
# Source n°3 : Uniquement le secret.yaml et autres manifestes bruts
- repoURL: https://gitlab.com/olicy/bedigital/infra/applications.git
targetRevision: main
path: application-manifests/<nomprojet-id>
# On exclut le values.yaml pour ne pas l'appliquer deux fois
directory:
exclude: '{values.yaml,Chart.yaml,templates/}'
destination:
server: https://kubernetes.default.svc
namespace: bedigital-app
syncPolicy:
automated:
prune: true
selfHeal: true
2. Secret application
Créer le Secret à partir du serveur nc3413 pour chiffrer les secrets avec kubeseal
Usage de base avec YAML
- Créez un secret Kubernetes non chiffré localement en YAML, par exemple :
kubectl create secret generic projets-xxxx-**staging**-bedigital -n bedigital-app --dry-run=client --from-literal=APP_KEY="base64:vfb6VQXZT5Bqm35PSdf7LJuO3lhbHfO2iE4eoBioMKo=" --from-literal=DB_HOST="185.x.x.x" --from-literal=DB_DATABASE="bd-projets-xxxx-stg-0bxl99js_prod" --from-literal=DB_USERNAME="bd-projets-xxxx-stg-0bxl99js_prod_user" --from-literal=DB_PASSWORD="xxxxxXXXxx" --from-literal=AWS_ACCESS_KEY_ID="AKIAXXXXX" --from-literal=AWS_SECRET_ACCESS_KEY=xxxxxxx -o yaml | kubeseal --controller-name=sealed-secrets --controller-namespace=kube-system --format yaml > sealedsecret.yaml
- Utilisez kubeseal pour chiffrer ce secret en un SealedSecret au format YAML :
kubeseal --controller-name=sealed-secrets --controller-namespace=kube-system -f secrets.yaml -o yaml > sealedsecret.yaml
- Le fichier
sealedsecret.yamlchiffré peut être stocké en toute sécurité, par exemple dans un dépôt Git, et partagé sans risque. - Le contrôleur SealedSecrets dans le cluster déchiffrera le secret et créera un Secret Kubernetes déchiffré classique.
push le code secret dans https://gitlab.com/olicy/bedigital/infra/applications/nomprojet-id
3. Values de l'application
Exemple de values.yaml
ingress:
enabled: true
class: nginx
resources:
php:
requests:
memory: "256Mi"
cpu: "250m"
worker:
requests:
memory: "256Mi"
limits:
memory: "512Mi"
5. Déployement CI/CD automatique n8n
Sur la plateforme n8n https://workflow.olicy.fr/, copier le worflow de TEMPLATE BeDigital afin de mettre en place le déploiement continue.
n8n va détecter une nouvelle pipeline et commit le nouveau tag de l'application dans le values.yaml dans le repo DevOps.
Configuration
Changer les valeurs des nodes Git en fonction du projet.


3. Mise à jour d'une instance
Pour mettre à jour une application il faut créer un tag de l'application, n8n va détecter une nouvelle pipeline et commit le nouveau tag de l'application dans le values.yaml dans le repo DevOps.
4. Pipeline CI/CD

1. Quel est l'objectif ?
Ce pipeline automatise la création et la publication d'images Docker pour l'application BeDigital Custom.
Il est conçu pour être efficace : il évite de reconstruire une image pour une version de production si une version "Release Candidate" (RC) correspondante existe déjà.
2. Comment ça marche ?
Le pipeline fonctionne selon deux scénarios principaux, en fonction du nom du tag Git que vous poussez.
Scénario 1 : Vous publiez une version de test (un tag "RC")
Exemple de tag : v1.2.0-rc.1
- Build complet : Le pipeline installe les dépendances (
composer installetnpm install). - Compilation : Il compile les fichiers front-end (
npm run build). - Packaging : Il crée une nouvelle image Docker et la tague avec la version RC (ex:
be-digital:v1.2.0-rc.1). - Publication : Il pousse cette nouvelle image sur le registre Docker.
Scénario 2 : Vous publiez une version finale (un tag de "Production")
Exemple de tag : v1.2.0
-
Vérification : Le pipeline cherche d'abord s'il existe déjà un tag RC pour cette version (ex:
v1.2.0-rc.1). -
Deux cas possibles :
-
A) Oui, une RC existe :
- Le pipeline saute les étapes de build et de compilation. C'est plus rapide !
- Il récupère l'image Docker de la RC.
- Il lui ajoute simplement les tags de production :
be-digital:v1.2.0etbe-digital:latest. - Il publie ces nouveaux tags. On appelle ça une promotion.
-
B) Non, aucune RC n'existe :
- Le pipeline exécute un build complet, exactement comme pour une RC.
- Il crée une nouvelle image et la publie avec les tags
be-digital:v1.2.0etbe-digital:latest.
-
3. Résumé des Étapes
prepare: Décide si un build est nécessaire (uniquement pour les tags de production).run: Installe les dépendances (si nécessaire).build: Compile les assets (si nécessaire).package: Crée l'image Docker (pour les RCs) ou promeut/crée l'image (pour la production).
Schéma image Docker
