Migration du projet cinestats vers le mono-dépôt cineges-go

Résumé

Le projet GitLab hickson/cinestats produisait 19 artefacts :

  • cinestats-api — l’API REST des statistiques (Postgres pgstats + JasperReports) ;
  • 18 consumers Kafka k2b-* (« kafka to base ») qui alimentent la base de stats à partir des topics cineges.*.data.

Le code a été recopié dans le mono-dépôt hickson/cineges-go, mais la chaîne de build ne l’avait pas suivi : seul cinestats-api y était réellement industrialisé. Les 18 k2b-* n’avaient ni stage Dockerfile, ni cible bake, ni job chartify — leur code était donc mort dans le mono-dépôt, et les environnements continuaient à tourner sur les images de l’ancien dépôt.

Depuis cineges-go v1.11.16, les 19 artefacts sont produits par le mono-dépôt.

Où sont les artefacts

Ancien dépôt cinestats Mono-dépôt cineges-go
Images dkr.isi.nc/hickson/cinestats/<app> docker.isi.nc/hickson/<app>
Charts <app> versions v1.0.x <app> versions v1.11.x
Chart de base API @isi/go-api-chart v1.2 cmd/.helm/base-api (local)
Chart de base job templates autonomes par app cmd/.helm/base-job (local)

Les deux lignées cohabitent sous le même nom de chart au chartmuseum. Passer de v1.0.x à v1.11.x n’est donc pas un simple bump de version : c’est un changement de chart sous le même nom de release.

Points d’attention lors d’une bascule

Consumer group Kafka

Les anciens charts k2b-* dérivaient OVERRIDE_KAFKA_CONSUMER_GROUP du fullname du chart. Les nouveaux le figent explicitement dans cmd/k2b-<x>/helm/values.yaml, à la même valeur (k2b-<x>). Ne pas modifier cette valeur : un changement de groupe fait repartir le consumer du début du topic.

Pour la même raison, nameOverride et fullnameOverride sont figés à k2b-<x> : sans eux, base-job nommerait les objets k2b-<x>-job.

Sélecteur de Deployment

Le sélecteur d’un Deployment est immuable.

  • k2b-* : l’ancien chart utilisait déjà app.kubernetes.io/name + app.kubernetes.io/instance, identiques à ceux de base-job → helm upgrade fonctionne en place.

  • cinestats-api : l’ancien chart @isi/go-api-chart utilisait app: api + release: cinestats-api, incompatible avec base-api. Il faut supprimer le Deployment avant l’upgrade :

    kubectl -n <ns> delete deployment cinestats-api
    

    Le Service et le ServiceAccount, eux, sont réadoptés par le nouveau chart.

Services k2b-*

Les anciens charts créaient un Service ClusterIP:80 par consumer, alors qu’aucun k2b-* n’écoute sur le réseau. base-job n’en crée pas : Helm supprime ces 18 Services au premier upgrade. C’est voulu.

Registre

Les images passent de dkr.isi.nc (pull anonyme) à docker.isi.nc, qui exige un imagePullSecrets. Les charts posent isi-registry-credz par défaut ; ce secret doit exister dans le namespace cible.

Variables d’environnement

Le fichier de values de déploiement partagé par les 18 consumers ne peut pas utiliser la clé env : Helm remplace les listes au lieu de les fusionner, ce qui écraserait le consumer group porté par le chart. base-job expose donc extraEnv, concaténé après env, réservé au fichier de déploiement (Postgres, réglages par environnement).

État par environnement

Qualif central — basculé

deploy-qualif-central déploie les 19 artefacts depuis cineges-go (VERSION_CINESTATS_API et VERSION_CINESTATS_JOBS = $VERSION_BACKEND_GO). k2b-zone-projection, qui n’avait jamais eu de job de déploiement, en a un désormais.

Production — non basculée

prod-central tourne toujours sur les images de l’ancien dépôt :

Composant Version
cinestats-api v1.0.0
k2b-* (11 consumers) v1.0.0
k2b-pos-session, k2b-show-state, k2b-stats-movie, k2b-stats-sales-session, k2b-user v1.0.1
k2b-pos-basket v1.0.5-fix.2

prod-cinecity et prod-kone n’hébergent aucun composant cinestats. prod-tahiti n’a pas pu être vérifié (API server injoignable au moment de l’audit).

La bascule prod suppose de mettre à jour deploy-prod-central de la même façon que deploy-qualif-central, en appliquant les points d’attention ci-dessus (notamment la suppression préalable du Deployment cinestats-api). Elle n’est pas faite et demande une fenêtre validée.

Archivage de hickson/cinestats

Le projet est archivé (lecture seule). Cela ne supprime ni les images du registre ni les charts du chartmuseum : la prod continue de tourner sur les artefacts déjà publiés tant qu’elle n’est pas basculée.

Deux tags v1.0.6 et v1.0.7 (10/06/2026) existent dans Git mais n’ont jamais été publiés : leur pipeline bake échouait sur isi.nc/go/odoorpc@v1.0.1, absent du proxy Athens. Leurs deux correctifs fonctionnels ont été reportés dans cineges-go :

  • soft-delete du film sur tombstone dans k2b-movie (le hard-delete cassait fk_show_movie et faisait boucler k2b-show) ;
  • Net.ReadTimeout sarama à 90 s et arrêt du panic sur erreur de consumer.

Les répertoires cmd/e2b-show et cmd/poc-viper de l’ancien dépôt sont des POC morts et n’ont pas été migrés.

Bug connu, non corrigé

Plusieurs consumers (k2b-show, k2b-pos-basket, k2b-pos-session, k2b-product, k2b-stats-movie, k2b-stats-sales-session) peuvent tomber en CrashLoopBackOff sur :

panic: uuid: Parse(): invalid UUID length: 0

Cause : un message ES dont l’id est vide, passé à uuid.MustParse dans pkg/stats/mapping. Le comportement est identique dans l’ancien dépôt et dans cineges-go : la migration ne le corrige pas.