[{"data":1,"prerenderedAt":355},["ShallowReactive",2],{"blog-post-\u002Fblogs\u002F2026-04-14-rex-environnements-phmres":3,"related-\u002Fblogs\u002F2026-04-14-rex-environnements-phmres":324},{"id":4,"title":5,"alt":6,"authors":7,"body":14,"date":297,"description":298,"extension":299,"image":300,"meta":301,"navigation":302,"ogImage":300,"path":303,"published":302,"reviewers":304,"seo":318,"stem":319,"tags":320,"__hash__":323},"blogs\u002Fblogs\u002F2026-04-14-rex-environnements-phmres\u002Findex.md","REX: Environnements éphémères","Image d’illustration, une usine à environnements éphémères qui sont créés, validés puis détruits",[8],{"id":9,"name":10,"image":11,"linkedin":12,"x":13},"67adfd77-4b84-4496-b55d-3391541f59c5","Michaël Bernasinski",".\u002Fassets\u002Fauthor-michal-bernasinski.webp","https:\u002F\u002Fwww.linkedin.com\u002Fin\u002Fmichael-bernasinski",null,{"type":15,"value":16,"toc":284},"minimark",[17,21,42,49,57,67,72,79,82,102,106,113,118,143,159,162,169,178,183,192,196,203,210,216,220,242,246,257,265,269,278,281],[18,19,20],"p",{},"Tout au long de ma carrière de développeur web, une question s’est toujours posée : comment tester une nouvelle fonctionnalité développée ? Une anomalie corrigée ?",[18,22,23,24,31,32,36,37,41],{},"Certes les tests automatisés répondent en partie à la problématique, par exemple grâce au ",[25,26,30],"a",{"href":27,"rel":28},"https:\u002F\u002Fhoppr-tech.notion.site\u002FFormation-TDD-HoppR-19ff4462cd388034b74eecb49e31630d",[29],"nofollow","TDD",", mais ",[33,34,35],"strong",{},"quid de la validation humaine",", par un ",[38,39,40],"em",{},"product owner",", un testeur, voire un utilisateur final ?",[18,43,44,45,48],{},"Beaucoup de projets utilisent des environnements de recette. Mais ceux-ci finissent rapidement avec des données bancales\u002Fobsolètes, des configurations bricolées, et où plusieurs fonctionnalités mergées récemment s’entremêlent. Et qui n’a jamais entendu une phrase du type “",[38,46,47],{},"N’utilisez pas la recette, je fais des tests dessus","”, bloquant ainsi l’ensemble de l’équipe et réduisant la productivité de celle-ci.",[18,50,51,52,56],{},"De plus, si le développement mergé ne répond pas au besoin, cela entraîne deux choses : soit un commit “parasite” a été introduit sur la branche ",[53,54,55],"code",{},"main"," testée, soit l’évitement de ce problème nécessite un travail sur plusieurs branches Git parallèles et autant de complexité ajoutée.",[18,58,59,60,63,64,66],{},"Dès lors, comment tester manuellement une fonctionnalité de manière isolée ? Sur un environnement propre ? Ou des tests end-to-end peuvent être joués sans difficultés pour chaque ",[38,61,62],{},"merge request"," ? Sur une MR qui sera validée avant de partir sur une branche ",[53,65,55],{}," ?",[68,69,71],"h2",{"id":70},"quest-ce-quun-environnement-éphémère","Qu’est-ce qu’un environnement éphémère ?",[18,73,74,75,78],{},"Comme son nom l’indique, ",[33,76,77],{},"un environnement éphémère est une instance qui a une durée de vie limitée",", par exemple à la MR à laquelle il est rattaché. Il est construit dans une configuration au plus proche de celle de production, avec des données de test préchargées si nécessaire, pour faciliter les tests automatisés (end-to-end par exemple) et manuels.",[18,80,81],{},"Une fois que l’on sait créer un environnement éphémère facilement, plusieurs cas d’usage se présentent :",[83,84,85,96,99],"ul",{},[86,87,88,89,91,92,95],"li",{},"Celui que j’ai le plus utilisé, une ",[38,90,62],{}," = un environnement éphémère. Ainsi, n’importe qui dans l’équipe peut visualiser et valider les modifications avant ",[38,93,94],{},"merge"," de la branche",[86,97,98],{},"Création d’un environnement dédié propre pour des démonstrations, qu’elles soient internes ou aux utilisateurs",[86,100,101],{},"Un environnement créé pour des tests end-to-end, détruit ensuite",[68,103,105],{"id":104},"retour-dexpérience","Retour d’expérience",[18,107,108,109,112],{},"Je vais vous faire mon retour d’expérience de l’utilisation de ces environnements éphémères, lors de mon projet actuel chez mon client. Ces environnements sont systématiquement utilisés, pour chaque MR ",[33,110,111],{},"sans exception",".",[114,115,117],"h3",{"id":116},"la-mise-en-place","La mise en place",[18,119,120,121,126,127,132,133,138,139,142],{},"Sur le projet, nous utilisons les outils suivants : ",[25,122,125],{"href":123,"rel":124},"https:\u002F\u002Faws.amazon.com\u002Ffr\u002F",[29],"AWS",", ",[25,128,131],{"href":129,"rel":130},"https:\u002F\u002Fdeveloper.hashicorp.com\u002Fterraform",[29],"Terraform"," et ",[25,134,137],{"href":135,"rel":136},"https:\u002F\u002Fabout.gitlab.com\u002F",[29],"Gitlab",". Cela nous permet de facilement automatiser la construction des environnements avec l’",[33,140,141],{},"infrastructure-as-code"," (IaC).",[18,144,145,146,148,149,154,155,158],{},"Pour avoir un environnement disponible à la création de la ",[38,147,62],{},", nous utilisons une ",[25,150,153],{"href":151,"rel":152},"https:\u002F\u002Fdocs.gitlab.com\u002Fci\u002Fvariables\u002Fpredefined_variables\u002F",[29],"variable prédéfinie de GitLab"," nommée ",[53,156,157],{},"CI_MERGE_REQUEST_IID"," , un identifiant de la MR spécifique au projet. Cela nous permet d’intégrer la construction de l’environnement à la pipeline de CI\u002FCD.",[18,160,161],{},"Bien entendu, hors de question d’installer un environnement inutilement pour un développement qui ne passe pas les tests unitaires. La pipeline ressemble donc  grossièrement à ceci :",[18,163,164],{},[165,166],"img",{"alt":167,"src":168},"Exemple de pipeline : build ⇒ TU ⇒ environnement éphémère","\u002Fcontent-assets\u002F2026-04-14-rex-environnements-phmres\u002Fassets\u002Fimg1.webp",[18,170,171,172,177],{},"A noter que l’environnement éphémère créé à la volée possède ses propres ressources AWS, (dans notre cas, des buckets S3, des queues SQS, etc.). Un jeu de données spécifique à ces environnements est mis en place via un script ",[25,173,176],{"href":174,"rel":175},"https:\u002F\u002Fwww.liquibase.com\u002Fhow-liquibase-works",[29],"liquibase"," pour un référentiel de données nécessaire aux tests. Ainsi naît un environnement avec une URL du type",[18,179,180],{},[53,181,182],{},"https:\u002F\u002Fenv-${CI_MERGE_REQUEST_IID}.client.fr",[18,184,185,186,191],{},"Bien évidemment, il faut faire attention à ne pas oublier de détruire automatiquement l’environnement à la fermeture de la MR, qu’elle soit mergée ou non (avec l’aide de ",[25,187,190],{"href":188,"rel":189},"https:\u002F\u002Fdocs.gitlab.com\u002Fuser\u002Fproject\u002Fintegrations\u002Fwebhook_events\u002F#merge-request-events",[29],"webhooks Gitlab","). On pourra également donner une durée de vie maximum à l’environnement. Cela nécessite également une bonne observabilité pour ne pas garder d’environnements “fantômes” coûteux.",[114,193,195],{"id":194},"la-mise-en-situation","La mise en situation",[18,197,198,199,202],{},"Maintenant que nous avons des environnements éphémères pour chaque ",[38,200,201],{},"merge request,","  comment allons-nous les utiliser ?",[18,204,205,206,209],{},"Notre principale idée ici est d’intégrer les ",[38,207,208],{},"product owners"," dans la construction de chaque feature. Ainsi, là où la majorité des projets ne demande qu’une validation technique par un pair technique, nous demandons également une validation fonctionnelle par un PO ou un UX, suivant le sujet.",[18,211,212],{},[165,213],{"alt":214,"src":215},"Exemple sur une MR sur GitLab : le PO ET un autre dev ont validé la MR, qui a ensuite pu être mergée","\u002Fcontent-assets\u002F2026-04-14-rex-environnements-phmres\u002Fassets\u002Fimg2.webp",[114,217,219],{"id":218},"les-avantages","Les avantages",[83,221,222,225,228,231,234],{},[86,223,224],{},"Chaque MR dispose d’un environnement dédié, évitant les interférences entre les fonctionnalités en développement",[86,226,227],{},"Terraform garantit que chaque environnement est identique (mêmes configurations, versions, dépendances), et permet de provisionner\u002Fdétruire l’infrastructure à la demande.",[86,229,230],{},"D’ailleurs, cela permet la génération de multiples environnements avec la même config, plus besoin de maintenir chaque environnement de recette\u002Fformation\u002Fdémo séparément",[86,232,233],{},"Facilite le développement, l’intégration et le déploiement continu",[86,235,236,237],{},"Permet une amélioration de vos ",[25,238,241],{"href":239,"rel":240},"https:\u002F\u002Fblog.hoppr.tech\u002Fblogs\u002F2024-10-31-dora-metrics-valuer-la-performance-de-livraison-logicielle#quest-ce-que-les-m%C3%A9triques-dora",[29],"DORA Metrics",[114,243,245],{"id":244},"les-inconvénients","Les inconvénients",[83,247,248,251,254],{},[86,249,250],{},"La mise en place du fonctionnement est complexe, et nécessite un investissement initial important en début de projet. De plus, cela nécessite une bonne maîtrise des outils utilisés",[86,252,253],{},"La construction automatique d’un environnement complet peut prendre du temps, et rallonger la pipeline",[86,255,256],{},"Avoir un métier (PO\u002FUX) pleinement impliqué et disponible pour faire des revues fonctionnelles.",[18,258,259,260,112],{},"Pour ce dernier point, c’est le cas sur ce produit, donc pas d’inquiétude là-dessus. Il faut de toute façon toujours impliquer le métier dans le développement et inversement, c’est la clé de la réussite de tous vos projets, et c’est cela que l’on pousse systématiquement chez ",[25,261,264],{"href":262,"rel":263},"https:\u002F\u002Fwww.hoppr.tech\u002F",[29],"HoppR",[68,266,268],{"id":267},"conclusion","Conclusion",[18,270,271,272,274,275,277],{},"Toute l’équipe est ravie de ce système de double validation technique\u002Fmétier sur chaque ",[38,273,62],{}," fonctionnelle. Les ",[38,276,208],{}," et les développeurs travaillent en symbiose sur le produit, ce qui est nécessaire dans une équipe pluri-disciplinaire soudée.",[18,279,280],{},"L’investissement initial à la mise en place des environnements éphémères est largement rentabilisé, fluidifiant le processus de développement. Ce système est d’ailleurs petit à petit propagé à d’autres produits chez le même client, suite à nos retours d’expérience positifs.",[18,282,283],{},"Alors, qu’attendez-vous pour employer les environnements éphémères, et mieux impliquer le métier dans vos développements ?",{"title":285,"searchDepth":286,"depth":286,"links":287},"",2,[288,289,296],{"id":70,"depth":286,"text":71},{"id":104,"depth":286,"text":105,"children":290},[291,293,294,295],{"id":116,"depth":292,"text":117},3,{"id":194,"depth":292,"text":195},{"id":218,"depth":292,"text":219},{"id":244,"depth":292,"text":245},{"id":267,"depth":286,"text":268},"2026-04-14T07:29:50.497Z","Tout au long de ma carrière de développeur web, une question s’est toujours posée : comment tester une nouvelle fonctionnalité développée ? Une anomalie corrigée ?  Certes les tests automatisés répond","md",".\u002Fassets\u002Fcover-image.webp",{},true,"\u002Fblogs\u002F2026-04-14-rex-environnements-phmres",[305,310,313],{"id":306,"name":307,"image":308,"linkedin":309,"x":13},"0bb914a6-f882-4951-bee6-53e8e8abb807","Emmanuelle Gouvart","https:\u002F\u002Fprod-files-secure.s3.us-west-2.amazonaws.com\u002F5863e833-64f2-4f13-9f7a-2c92c72b5bbf\u002Fc88f5dfa-16db-4e6f-acf1-34dd80ee8766\u002Femma_hoppr.png?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Content-Sha256=UNSIGNED-PAYLOAD&X-Amz-Credential=ASIAZI2LB4663EVYACVJ%2F20260414%2Fus-west-2%2Fs3%2Faws4_request&X-Amz-Date=20260414T072949Z&X-Amz-Expires=3600&X-Amz-Security-Token=IQoJb3JpZ2luX2VjEL7%2F%2F%2F%2F%2F%2F%2F%2F%2F%2FwEaCXVzLXdlc3QtMiJHMEUCIGZtaRbA4cSdTwdKuo6iJWkH8%2F7Mf4%2F7P2W6PXte3kjGAiEAok6aw4VityW2XGt3RF9AGdcuCRas9ZE5wwRFKdD8whcqiAQIh%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2FARAAGgw2Mzc0MjMxODM4MDUiDJYMPZlPCPZ%2B%2BEq4XyrcA0HVbqp5SrmxfwBpOmpGhgMIg2gTLjV3M6tzdLTdz1DY3m5Zswt94ObBgZT2zhyiePmuVZBd1Yg1lc3W5l4Plvp1OTzIp4BRtM5hZrAXZfoBHQWnigkX1G6zQbPZUIgWCLbbCRfsX0MMT0k49aDA2T2%2B8kuBS8gWNYR1P1hwkZtrA02V4rtsmCfaFrkZZB7EItp9LNTxhmjx9Z7YNBJx9n%2F5ZNY2MIIwLM%2BoEhgaCs4ReNV608nFYY8f0%2F9QzMZye3PM5WlCN9Sgf1O%2FfCO31or9a0z%2FCfxAL37zIa6parPGRxTaGuGT1V2q%2Ftn%2FD%2FVaFbFq0tsFOU5vDyhrQRTjHVOC9i0Bxr%2Bu3Ak9jtAgSZk5gcMpBe1Gwvsu0G8ZWVcPFk0gio%2BfOHd%2BPPJaDoGo5eGVGw5gyBGbovOThBvyvMT6eXcrDWWntNs4IA8iJgFkhRDOI0WPwf3Z%2BASr9UFvNBIGFwOJWG6nRfqJ1c2e7z9yFAhtmFO%2FIAu3p0QMoZ7diWXeFiPcptFAary1LxEwUC9ajIIaF92J%2FIcsZzX%2BUujpZZXDCM7clyCayH%2BgBBdk5ZCXXtuxzLHQG9CWt%2F4HOmafqFTCwhwO3l1BU8fjUNzofspm0KV4sf8cP4yrMKq0984GOqUB4D0QZc81PuEfU5nOGA8R6pZbugM8G6tdhcqL%2BDIjVIXKvGD7pUh8JrnWiiJttpmlBsSRPNT712UTe6nfpUsgIoYecV5eladz3QX4lKzPcT6DFOK1QyILpjC%2BYfO4yoLETTJ0kMmTpOEZMJDhT%2B1qbyLmH3tunIsjs5KTzObbxMOPWCum76IZMm%2Ft7V53%2BjfXdBwkLQRu7hgyITrMqz2603DNgwUd&X-Amz-Signature=52a40968af7f41c867e910c4f5f34edb18ae5a028da26372aaa8b48db773f820&X-Amz-SignedHeaders=host&x-amz-checksum-mode=ENABLED&x-id=GetObject","https:\u002F\u002Fwww.linkedin.com\u002Fin\u002Femmanuellegouvart-182b6ab2\u002F",{"id":311,"name":312,"image":13,"linkedin":13,"x":13},"320f4462-cd38-8071-8eb7-f90621a068a3","Marjorie Dieusart",{"id":314,"name":315,"image":316,"linkedin":317,"x":13},"33bf4462-cd38-80da-845c-c63b2fd024bf","Florian Hirson","https:\u002F\u002Fprod-files-secure.s3.us-west-2.amazonaws.com\u002F5863e833-64f2-4f13-9f7a-2c92c72b5bbf\u002F2b6052d3-047d-4e1d-9256-fea2c2adc9e6\u002FPhoto_Profil_CV_1200px_%289%29.png?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Content-Sha256=UNSIGNED-PAYLOAD&X-Amz-Credential=ASIAZI2LB4663SBXKDNX%2F20260414%2Fus-west-2%2Fs3%2Faws4_request&X-Amz-Date=20260414T072949Z&X-Amz-Expires=3600&X-Amz-Security-Token=IQoJb3JpZ2luX2VjEL7%2F%2F%2F%2F%2F%2F%2F%2F%2F%2FwEaCXVzLXdlc3QtMiJHMEUCIQDoQ2zeta%2FyHTI540wsMH0HxSAY%2BATUU8y1DXJo49%2FR3QIgfgYpE8rnxVjQjdXQSdfSs4FkbukBGNmM4mYPxzHzNsoqiAQIh%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2FARAAGgw2Mzc0MjMxODM4MDUiDH%2FXA22vPQpx%2FkhClCrcA479MmEEV6I9eigvXgytlLjiNUm7v9pTEdM6CFlyZps94bpHWFfG1VfrFw5wOqXSNRFgPrU%2BgGOGKxBi49qeUtd1KdV%2FAPniG8hILB88TLq0EP1yYuBzeSzZmQ%2FqW2T8t92AsCFIedtwHr2DEc%2BKS9q4BREb75QOIKQukTD4iyXiMTaQOHGbu1wYT7I0NUnIHCYv6MyctXcxvPMrjVuxcHmU9EqjvvBHhzpZSzZWHdoR7NhEiNn3ia5TEEurHsuCHtwJP33t86%2FWvgmpv3eqDKI1h8U84OHcINLxPkHCjNytazhXEsDQii%2FC1ejswGUQajdRdLTT6orMRQ1jiUqWYYLtHUUluWzswhoWbBQF2Gd0DaN5AlEh4LjA92uMSg7Ooz6EkIEX2IfuKc6P%2B6v2BVD3wrrJwaCJUJK38ponmF03%2B5WYj0BOvHc6QpkSqO3ptcz2m2NTsHSJJQIdXInRtGGkcfIpLKPeRVr%2F4ueugg%2BTdv05AwuLXcwhOiBDx%2FiSPKxu8DzESmpt1KL7097NPp33PkgeOi%2BoMuGjNn0mJQCL6aTfQHl%2FGwVCu8fC04fqlmgDI4bGR9uT0VWcLEtS93V%2FWCVctavIuyFfTjm3bW3YnQqmDWvoTF5bglFAMMi1984GOqUBpwexbiOU10bG1oXGEC8pAoGR1qleIYaJFatZ3Hn2l02%2ByqIleJqpNHHJunG9BF04s4vtqS4IOIhpUc6y63prUVltgzFyGsM7q46WZwKClOYQ%2BHR9DQTSdAv7ujF3tdq%2BezDPIBWNstYKoWlRBL7cGoqdzL9Rs0SnZtD4ZSEFTkSEXVLeb8klio4AlBqqsVoslyJMFnZurcUaJ0HQyVxlldG%2FFXzY&X-Amz-Signature=760c14d682562a02818ac9dd16ece58d593677ef6cde7d10ff42bcb67502a42e&X-Amz-SignedHeaders=host&x-amz-checksum-mode=ENABLED&x-id=GetObject","https:\u002F\u002Fwww.linkedin.com\u002Fin\u002Fflorian-hirson\u002F",{"title":5,"description":298},"blogs\u002F2026-04-14-rex-environnements-phmres\u002Findex",[321,322],"craft","rex","l4AE9RbTPfGFFrIE5a0c5Yvcj9eYR9PrSGRNYuMi4qg",[325,331,341,348],{"path":326,"title":327,"image":328,"date":329,"tags":330},"\u002Fblogs\u002F2026-04-08-architecture-hexagonale-en-programmation-fonctionnelle-mythe-ou-ralit","Architecture hexagonale en programmation fonctionnelle, mythe ou réalité ?","\u002Fcontent-assets\u002F2026-04-08-architecture-hexagonale-en-programmation-fonctionnelle-mythe-ou-ralit\u002Fassets\u002Fcover-image.webp","8 avril 2026",[321],{"path":332,"title":333,"image":334,"date":335,"tags":336},"\u002Fblogs\u002F2026-03-31-connecter-datadog-un-rseau-100-hors-ligne-retour-dexprience-avec-vector","Connecter Datadog à un réseau 100% hors-ligne : retour d'expérience avec Vector","\u002Fcontent-assets\u002F2026-03-31-connecter-datadog-un-rseau-100-hors-ligne-retour-dexprience-avec-vector\u002Fassets\u002Fcover-image.webp","31 mars 2026",[337,338,339,340,322],"cloud-platform","datadog","devops","observabilité",{"path":342,"title":343,"image":344,"date":345,"tags":346},"\u002Fblogs\u002F2026-02-03-le-manifeste-du-platform-craftsmanship-lengagement-hoppr","Le Manifeste du Platform Craftsmanship : L'engagement HoppR","\u002Fcontent-assets\u002F2026-02-03-le-manifeste-du-platform-craftsmanship-lengagement-hoppr\u002Fassets\u002Fcover-image.webp","3 février 2026",[347,337,321,339],"plateform engineering",{"path":349,"title":350,"image":351,"date":352,"tags":353},"\u002Fblogs\u002F2026-01-14-devbox-ou-comment-enfin-onboarder-un-dev-en-5min-chrono-sur-son-projet","Devbox, ou comment (enfin) onboarder un dev en 5min chrono sur son projet","\u002Fcontent-assets\u002F2026-01-14-devbox-ou-comment-enfin-onboarder-un-dev-en-5min-chrono-sur-son-projet\u002Fassets\u002Fcover-image.webp","14 janvier 2026",[339,337,321,354],"veille tech",1776179385556]