Déploiement
La définition de l'application doit être dans le git https://gitlab.com/olicy/bedigital/infra/applications
Voir documentation
Values
Configuration du chart Helm — values.yaml
1. Réplicas
| Clé | Description | Valeur |
|---|
replicaCount | Nombre de pods déployés | 1 |
2. Image
| Clé | Description | Valeur |
|---|
image.repository | Repository de l’image | registry.gitlab.com/olicy/igor/igor/ |
image.pullPolicy | Politique de récupération | IfNotPresent |
image.tag | Tag de l’image | 2.3.8.1-1 |
3. Application
| Clé | Description | Valeur |
|---|
app.name | Nom de l’application | Igor |
app.mail.from_name | Nom utilisé pour l’envoi d'emails | Igor |
app.session.driver | Driver de session | database |
app.session.lifetime | Durée de session (minutes) | 10080 |
app.queue_connection | Mode queue | sync |
app.worker.enabled | Activation du worker | true |
4. Paramètres PHP
| Clé | Description | Valeur |
|---|
php.memory | Mémoire PHP | 512M |
php.upload | Taille max upload | 50M |
5. Gotenberg
| Clé | Description | Valeur |
|---|
gotenberg.url | URL du service Gotenberg | http://igor-gotenberg.igor.svc.cluster.local:3000 |
6. Environnement
| Clé | Description | Valeur |
|---|
env.app | Environnement applicatif | production |
7. Secrets & Overrides
| Clé | Description | Valeur |
|---|
imagePullSecrets | Secret d’accès registre | gitlab-registry-igor |
nameOverride | Nom personnalisé | "" |
fullnameOverride | Nom complet personnalisé | "" |
8. Sécurité Pods & Conteneurs
| Clé | Description | Valeur |
|---|
podSecurityContext | Contexte sécurité du pod | {} |
securityContext | Contexte sécurité conteneur | {} |
9. Service
| Clé | Description | Valeur |
|---|
service.type | Type de service | ClusterIP |
service.port | Port HTTP | 80 |
10. Ingress
Configuration principale
| Clé | Description | Valeur |
|---|
ingress.class | Classe Ingress (Traefik) | traefik |
ingress.enabled | Activation | true |
ingress.entryPoints | Entrypoint Traefik | websecure |
TLS
| Clé | Description | Valeur |
|---|
ingress.tls.enabled | Activation TLS | true |
ingress.tls.secretName | Secret TLS | wildcard-igor-cert |
Ingress personnalisé
| Clé | Description | Valeur |
|---|
ingress.custom.enabled | Ingress custom | false |
ingress.custom.entryPoints | Entrypoint custom | websecure |
ingress.custom.tls.enabled | TLS custom | true |
DNS
| Clé | Description | Valeur |
|---|
ingress.dns.ttl | TTL DNS | "3600" |
11. Autoscaling
| Clé | Description | Valeur |
|---|
autoscaling.enabled | Activation HPA | false |
autoscaling.minReplicas | Minimum | 1 |
autoscaling.maxReplicas | Maximum | 3 |
autoscaling.averageUtilization | Cible CPU | 85 |
12. Cronjob
| Clé | Description | Valeur |
|---|
cronjob.schedule | Expression CRON | "*/5 * * * *" |
13. Base de données
| Clé | Description | Valeur |
|---|
db.port | Port MySQL | "3306" |
14. Resources
HTTP
| Clé | Description | Valeur |
|---|
resources.http.requests.memory | Memory request | 64Mi |
resources.http.requests.cpu | CPU request | 50m |
resources.http.limits.memory | Memory limit | 256Mi |
resources.http.limits.cpu | CPU limit | 1 |
PHP
| Clé | Description | Valeur |
|---|
resources.php.requests.memory | Memory request | 128Mi |
resources.php.requests.cpu | CPU request | 50m |
resources.php.limits.memory | Memory limit | 2048Mi |
resources.php.limits.cpu | CPU limit | 1 |
15. Scheduling
| Clé | Description | Valeur |
|---|
nodeSelector | Ciblage de nœud | {} |
tolerations | Tolerations | [] |
affinity | Affinité pods | {} |
16. PodDisruptionBudget
| Clé | Description | Valeur |
|---|
poddisruptionbudget.enabled | Activation | false |
poddisruptionbudget.min | Min pods | 1 |
17. Identifiants registre
| Clé | Description | Valeur |
|---|
imageCredentials.registry | Registre | registry.gitlab.com |
imageCredentials.username | Username | Commenté |
imageCredentials.password | Password | Commenté |
Pipeline et mise à jour
1. Quel est l'objectif ?
Ce pipeline gère un chart Helm nommé igor. Ses fonctions sont :
- Valider la syntaxe du chart.
- Mettre à jour la version du chart (manuellement ou en synchronisation avec l'application).
- Publier le chart dans le registre de paquets Helm de GitLab.
Le pipeline est divisé en plusieurs étapes et s'exécute principalement sur la branche main et pour les tags Git.
Étape 1 : lint (Validation)
- Job :
helm:lint
- Quoi ? Ce job vérifie que la structure et la syntaxe de votre chart Helm sont correctes et ne contiennent pas d'erreurs.
- Quand ? Automatiquement, à chaque fois qu'une modification est poussée sur la branche
main.
- Comment ? Il utilise la commande
helm lint. Si une erreur est trouvée, le pipeline s'arrête.
Étape 2 : chart-versioning (Gestion des versions du Chart)
Cette étape contient deux jobs différents pour la gestion des versions :
Job 1 : bump:version (Mise à jour Manuelle de la Version du Chart)
- Quoi ? Ce job vous permet d'augmenter manuellement le numéro de version du chart lui-même (ex: de
1.2.3 à 1.2.4 ou 2.0.0).
- Quand ? Manuellement uniquement. Vous devez le déclencher depuis l'interface de GitLab.
- Comment ?
- Il clone le dépôt des charts.
- Il lit la version actuelle du chart dans
igor/Chart.yaml.
- Il augmente la version (par défaut, il incrémente le dernier chiffre).
- Il crée un commit Git avec la nouvelle version et le pousse sur la branche
main.
Job 2 : update:helm-chart (Synchronisation de la Version de l'Application)
- Quoi ? Ce job met à jour la version de l'application que votre chart va déployer. Il synchronise l'
appVersion dans Chart.yaml et l'image.tag dans values.yaml avec le tag de l'application Docker fraîchement construite (ex: v1.2.0).
- Quand ? Automatiquement, à chaque fois qu'un tag est poussé pour l'application, après que l'image Docker de l'application a été construite et poussée.
- Comment ?
- Il clone le dépôt des charts.
- Il met à jour les fichiers
igor/values.yaml et igor/Chart.yaml pour refléter la nouvelle version de l'application.
- Il crée un commit avec ces modifications et le pousse sur la branche
main.
- Il inclut une logique de re-tentative (
retry) en cas d'échec de push initial.
Étape 3 : publish (Publication du Chart)
- Job :
helm:publish
- Quoi ? Ce job prépare et publie le chart Helm.
- Quand ? Automatiquement, après l'étape
lint (et donc après toute mise à jour de version effectuée par bump:version ou update:helm-chart), à chaque fois qu'une modification est poussée sur main.
- Où est-il publié ? Dans le Registre de Paquets Helm du projet GitLab, accessible via "Deploy > Package Registry".
- Comment ? Il met à jour les dépendances du chart, compresse le chart dans une archive (
.tgz) et l'envoie au registre GitLab.