[{"data":1,"prerenderedAt":145},["ShallowReactive",2],{"navigation":3,"page-projet-devops":47},[4,8,12,16,20,24,28,31,36,39,43],{"title":5,"path":6,"stem":7},"Accueil","/","1.index",{"title":9,"path":10,"stem":11},"Compétences","/competences","2.competences",{"title":13,"path":14,"stem":15},"CV","/cv","3.cv",{"title":17,"path":18,"stem":19},"Expérience","/experience","4.experience",{"title":21,"path":22,"stem":23},"Projets","/projets","5.projets",{"title":25,"path":26,"stem":27,"link":25},"","/projet-androidx86","projet-androidx86",{"title":25,"path":29,"stem":30,"link":29},"/projet-contapp","projet-contapp",{"title":32,"path":33,"stem":34,"tile":35},"Projet Devops","/projet-devops","projet-devops","/projets/devops",{"title":25,"path":37,"stem":38,"link":37},"/projet-java","projet-java",{"title":25,"path":40,"stem":41,"link":42},"/projet-mod","projet-mod","projets/mod",{"title":44,"path":45,"stem":46},"Projet Watchguard","/projet-watchguard","projet-watchguard",{"id":48,"title":32,"body":49,"description":25,"extension":139,"layout":140,"meta":141,"navigation":142,"path":33,"seo":143,"stem":34,"__hash__":144},"content/projet-devops.md",{"type":50,"value":51,"toc":135},"minimal",[52,57,62,71,74,77,122,125,129,132],[53,54,56],"h2",{"id":55},"intégration-continue-de-lapplication-conteneurisée","Intégration continue de l'application conteneurisée",[58,59,61],"h4",{"id":60},"de-quoi-sagit-il","De quoi s'agit-il ?",[63,64,65,66,70],"p",{},"Ce projet fait suite au ",[67,68,69],"a",{"href":29},"projet de développement d'applications conteneurisées",".",[63,72,73],{},"Notre MVP étant développée et fonctionnelle, il nous fallait inclure la philosophie DevOps.",[63,75,76],{},"Pour ce faire, nous avions plusieurs objectifs :",[78,79,80,84,87,90,93,96],"ul",{},[81,82,83],"li",{},"Installer un nouveau cluster single-node k3s avec :",[81,85,86],{},"Une forge GitLab",[81,88,89],{},"Un runner GitLab (runner k8s)",[81,91,92],{},"Une instance de ArgoCD",[81,94,95],{},"Une instance de Harbor",[81,97,98,99],{},"Développer une pipeline permettant de :\n",[78,100,101,104,107,110,113,116,119],{},[81,102,103],{},"Tester le fonctionnement du code",[81,105,106],{},"Tester la qualité du code",[81,108,109],{},"Compiler automatiquement et pousser les images docker sur l'instance Harbor",[81,111,112],{},"Scanner les vulnérabilités du code et des images via sbom/trivy",[81,114,115],{},"Déployer l'application via un chart Helm et l'instance ArgoCD sur un cluster de prod",[81,117,118],{},"Générer de la documentation via sphinx",[81,120,121],{},"Déployer la documentation via pages",[63,123,124],{},"Le tout avec de l'IaC (Terraform/Ansible).",[58,126,128],{"id":127},"ce-que-jai-appris","Ce que j'ai appris",[63,130,131],{},"J'ai appris beaucoup de choses dédiées à la mise en production propre durant ce projet. J'ai pu beaucoup expérimenter via du homelabbing avec kubernetes, sans avoir eu l'occasion de mettre en place toute la pipeline de devops.",[63,133,134],{},"J'ai énormément progressé en IaC par le biais de Terraform, passé beaucoup de temps à faire du debug et découvert que le provider kubernetes n'était pas vraiment utilisable en présence de CRDs custom.",{"title":25,"searchDepth":136,"depth":136,"links":137},2,[138],{"id":55,"depth":136,"text":56},"md",null,{},{"tile":35},{"title":32,"description":25},"jYZ00dthoKhr81r40KL0I_1GmFSZvIoLLHZatKm4EXI",1780238519052]