[{"data":1,"prerenderedAt":274},["ShallowReactive",2],{"\u002Fv5\u002Fdodock\u002Fcontribuer\u002Fverification-images-ci":3,"section:\u002Fv5\u002Fdodock\u002Fcontribuer\u002Fverification-images-ci":273},{"id":4,"title":5,"body":6,"description":258,"extension":259,"meta":260,"navigation":264,"path":269,"seo":270,"stem":271,"__hash__":272},"docs\u002F1.v5\u002F3.dodock\u002F15.contribuer\u002F5.verification-images-ci.md","Vérification des images Docker de Dokos",{"type":7,"value":8,"toc":249},"minimark",[9,13,25,30,38,56,107,111,114,134,141,148,162,166,170,176,191,194,197,220,224],[10,11,5],"h1",{"id":12},"vérification-des-images-docker-de-dokos",[14,15,16,17,24],"p",{},"Le pipeline GitLab du dépôt ",[18,19,23],"a",{"href":20,"rel":21},"https:\u002F\u002Fgitlab.com\u002Fdokos\u002Fdokos",[22],"nofollow","Dokos"," construit une image Docker qui contient Dodock, Dokos et les applications principales. Avant de publier l'image, le pipeline vérifie qu'elle est complète. Si la construction ou la vérification échoue, un message peut partir vers un webhook.",[26,27,29],"h2",{"id":28},"quand-limage-est-construite","Quand l'image est construite",[14,31,32,33,37],{},"Le job ",[34,35,36],"code",{},"docker"," s'exécute :",[39,40,41,45],"ul",{},[42,43,44],"li",{},"sur un tag (une version publiée) ;",[42,46,47,48,51,52,55],{},"quand la variable ",[34,49,50],{},"DO_BUILD_DOCKER"," vaut ",[34,53,54],{},"true",", par exemple pour un pipeline lancé à la main.",[14,57,58,59,62,63,66,67,70,71,70,74,70,77,70,80,83,84,87,88,70,91,70,94,70,97,70,100,83,103,106],{},"L'image est construite avec le fichier ",[34,60,61],{},"images\u002Fcustom\u002FContainerfile"," du projet ",[34,64,65],{},"frappe_docker",". Elle contient les applications ",[34,68,69],{},"frappe",", ",[34,72,73],{},"payments",[34,75,76],{},"hrms",[34,78,79],{},"webshop",[34,81,82],{},"etransactions"," et ",[34,85,86],{},"erpnext",". Les variables ",[34,89,90],{},"PAYMENTS_BRANCH",[34,92,93],{},"HRMS_BRANCH",[34,95,96],{},"WEBSHOP_BRANCH",[34,98,99],{},"ETRANSACTIONS_BRANCH",[34,101,102],{},"DODOCK_BRANCH",[34,104,105],{},"DOKOS_BRANCH"," choisissent une autre branche pour une application.",[26,108,110],{"id":109},"contrôles-de-limage","Contrôles de l'image",[14,112,113],{},"Après la construction, le pipeline lance l'image et vérifie, pour chaque application :",[115,116,117,124,127],"ol",{},[42,118,119,120,123],{},"le dossier ",[34,121,122],{},"apps\u002F\u003Capplication>"," du bench existe ;",[42,125,126],{},"le paquet Python de l'application est installé ;",[42,128,129,130,133],{},"le dossier des fichiers statiques ",[34,131,132],{},"assets\u002F\u003Capplication>"," existe.",[14,135,136,137,140],{},"Le pipeline vérifie aussi le fichier ",[34,138,139],{},"assets\u002Fassets.json",".",[14,142,143,144,147],{},"Si un contrôle échoue, le job affiche l'élément manquant (par exemple ",[34,145,146],{},"Missing app: hrms",") et s'arrête. L'image n'est pas publiée.",[14,149,150,151,154,155,158,159,140],{},"Si les contrôles réussissent, le pipeline publie l'image dans le registre GitLab. Sur un tag ",[34,152,153],{},"vX.Y.Z",", il publie aussi l'étiquette de la version majeure (",[34,156,157],{},"vX","). Sur la dernière version publiée, il publie aussi l'étiquette ",[34,160,161],{},"latest",[163,164,165],"mermaid",{},"\nflowchart TD\n    A[Construction de l'image] --> B[Contrôle des applications, paquets et assets]\n    B -->|Succès| C[Publication dans le registre]\n    B -->|Échec| D[Job docker en échec]\n    A -->|Échec| D\n    D --> E[Job docker:fail-notification]\n    E --> F[Message sur le webhook]\n",[26,167,169],{"id":168},"notification-en-cas-déchec","Notification en cas d'échec",[14,171,32,172,175],{},[34,173,174],{},"docker:fail-notification"," s'exécute seulement si :",[39,177,178,184],{},[42,179,180,181,183],{},"le job ",[34,182,36],{}," a échoué ;",[42,185,186,187,190],{},"la variable CI\u002FCD ",[34,188,189],{},"ON_BUILD_FAILURE_WEBHOOK"," est définie.",[14,192,193],{},"Le job envoie un message au format Discord à l'adresse de ce webhook. Le message contient le projet, la branche, le commit et le lien vers les journaux du job.",[14,195,196],{},"Pour recevoir ces messages :",[115,198,199,206,214],{},[42,200,201,202,205],{},"Créez un webhook entrant dans votre outil de messagerie. Il doit accepter un JSON avec une clé ",[34,203,204],{},"content"," (format Discord).",[42,207,208,209,213],{},"Dans GitLab, ouvrez ",[210,211,212],"strong",{},"Paramètres > CI\u002FCD > Variables"," du projet.",[42,215,216,217,219],{},"Ajoutez la variable ",[34,218,189],{}," avec l'adresse du webhook. Masquez la variable : l'adresse donne le droit d'écrire dans votre canal.",[26,221,223],{"id":222},"diagnostiquer-un-échec","Diagnostiquer un échec",[39,225,226,235],{},[42,227,32,228,230,231,234],{},[34,229,36],{}," garde le fichier ",[34,232,233],{},"docker-build.log"," comme artefact pendant une semaine. Il contient le journal complet de la construction.",[42,236,237,238,70,241,244,245,248],{},"Un message ",[34,239,240],{},"Missing app",[34,242,243],{},"Missing Python package"," ou ",[34,246,247],{},"Missing assets"," désigne l'application en cause. Vérifiez que sa branche existe et qu'elle se construit.",{"title":250,"searchDepth":251,"depth":252,"links":253},"",1,2,[254,255,256,257],{"id":28,"depth":252,"text":29},{"id":109,"depth":252,"text":110},{"id":168,"depth":252,"text":169},{"id":222,"depth":252,"text":223},"Contrôles exécutés par le pipeline GitLab de Dokos après la construction d'une image Docker, et notification en cas d'échec.","md",{"icon":261,"order":262,"badge":263,"reviewed":264,"last_verified":265,"sources":266},"i-mdi-alert-circle-check",4,"Administration",true,"2026-11-03",[267,268],"dokos@v5:.gitlab-ci.yml","dodock@v5:.gitlab-ci.yml","\u002Fv5\u002Fdodock\u002Fcontribuer\u002Fverification-images-ci",{"title":5,"description":258},"1.v5\u002F3.dodock\u002F15.contribuer\u002F5.verification-images-ci","8UCyk_NUiskIJJaFxUsIfpJ5KZghy823f2cgpGyBsNE",{},1794736580621]