<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Julien Durillon, Author at Clever Cloud</title>
	<atom:link href="https://www.clever.cloud/fr/blog/author/julien-durillonclever-cloud-com/feed/" rel="self" type="application/rss+xml" />
	<link></link>
	<description>From Code to Product</description>
	<lastBuildDate>Wed, 24 Dec 2025 07:36:45 +0000</lastBuildDate>
	<language>fr-FR</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	

<image>
	<url>https://cdn.clever-cloud.com/uploads/2023/03/cropped-cropped-favicon-32x32.png</url>
	<title>Julien Durillon, Author at Clever Cloud</title>
	<link></link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>Variables de déploiement : davantage de cohérence</title>
		<link>https://www.clever.cloud/fr/blog/entreprise/2025/12/22/variables-de-deploiement-davantage-de-coherence/</link>
		
		<dc:creator><![CDATA[Julien Durillon]]></dc:creator>
		<pubDate>Mon, 22 Dec 2025 14:00:14 +0000</pubDate>
				<category><![CDATA[Entreprise]]></category>
		<guid isPermaLink="false">https://www.clever.cloud/?p=22454</guid>

					<description><![CDATA[<p><img width="2500" height="1109" src="https://cdn.clever-cloud.com/uploads/2025/12/2025-12-02-clever-cloud-banniere-blog-variables-de-deploiement-fr-1.png" class="attachment-post-thumbnail size-post-thumbnail wp-post-image" alt="2025 12 02 clever cloud banniere blog variables de deploiement fr 1" decoding="async" fetchpriority="high" srcset="https://cdn.clever-cloud.com/uploads/2025/12/2025-12-02-clever-cloud-banniere-blog-variables-de-deploiement-fr-1.png 2500w, https://cdn.clever-cloud.com/uploads/2025/12/2025-12-02-clever-cloud-banniere-blog-variables-de-deploiement-fr-1-300x133.png 300w, https://cdn.clever-cloud.com/uploads/2025/12/2025-12-02-clever-cloud-banniere-blog-variables-de-deploiement-fr-1-1024x454.png 1024w, https://cdn.clever-cloud.com/uploads/2025/12/2025-12-02-clever-cloud-banniere-blog-variables-de-deploiement-fr-1-768x341.png 768w, https://cdn.clever-cloud.com/uploads/2025/12/2025-12-02-clever-cloud-banniere-blog-variables-de-deploiement-fr-1-1536x681.png 1536w, https://cdn.clever-cloud.com/uploads/2025/12/2025-12-02-clever-cloud-banniere-blog-variables-de-deploiement-fr-1-2048x908.png 2048w, https://cdn.clever-cloud.com/uploads/2025/12/2025-12-02-clever-cloud-banniere-blog-variables-de-deploiement-fr-1-1368x607.png 1368w" sizes="(max-width: 2500px) 100vw, 2500px" /></p><!-- wp:paragraph -->
<p>Lorsque vous déployez vos applications sur Clever Cloud, vous pouvez configurer la construction et le démarrage de votre application ou de services secondaires en utilisant des <a href="https://www.clever.cloud/developers/doc/reference/reference-environment-variables">variables d’environnement</a>. Nous avons récemment revu leur gestion. Cette refonte apporte clarté et cohérence aux variables de configuration, avec quelques changements incompatibles. Dans cet article, nous détaillons ce qui a changé et le travail fait pour vous éviter les problèmes.</p>
<!-- /wp:paragraph -->

<!-- wp:heading -->
<h2 class="wp-block-heading">Configurer votre déploiement</h2>
<!-- /wp:heading -->

<!-- wp:heading {"level":3} -->
<h3 class="wp-block-heading">Un peu de contexte</h3>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>Clever Cloud essaie de construire et d’exécuter vos applications en détectant la technologie que vous utilisez : un fichier <code>composer.json</code> existe ? Nous exécutons <code>composer install</code>. Vous avez déjà un <code>composer.phar</code> dans votre dépôt ? Nous utilisons celui-ci à la place de celui du système.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Cependant, vous devez parfois nous indiquer quoi faire. Votre application nécessite une version spécifique de <a href="https://www.clever.cloud/fr/product/applications-php/">PHP</a> ou de <a href="https://www.clever.cloud/fr/product/applications-java/">Java</a> pour fonctionner ? Nous ne pouvons pas le deviner. C’est là que les variables de configuration interviennent : pour nous indiquer quelle version de PHP utiliser ou si nous devons activer une extension PHP, vous devez utiliser des <a href="https://www.clever.cloud/developers/doc/reference/reference-environment-variables">variables<strong> </strong>d’environnement</a>, qui seront interprétées par le logiciel chargé du déploiement de l’application.</p>
<!-- /wp:paragraph -->

<!-- wp:heading {"level":3} -->
<h3 class="wp-block-heading">Un traitement empirique de la configuration</h3>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>Historiquement, nous avons commencé à utiliser des variables d’environnement pour modifier le comportement du processus de déploiement. Le processus lui-même vérifiait la présence et validait les variables lorsqu’il devait les utiliser. La prise en charge de chaque variable était empirique et sujette à variations.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Par exemple, pour activer l’extension PHP APCu, vous pouvez définir <code>ENABLE_APCU="true"</code>. Dans le script d’activation de l’extension, la valeur de la variable <code>ENABLE_APCU</code> était vérifiée juste avant d’activer (ou non) l’extension. Ce morceau de code acceptait la chaîne “true” sans tenir compte de la casse.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Ailleurs dans le code, <code>CC_CACHE_DEPENDENCIES</code> n’était vérifié que pour la chaîne exacte “true”. Ainsi “True” ou “TRUE” étaient considérées comme fausses. Pour d’autres variables, “yes” et “no” étaient autorisés à la place ou en plus de “true” et “false”.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Différentes variables impliquaient différentes stratégies de validation. Cela compliquait l’assistance client, puisqu’il fallait parfois consulter le code pour aider des utilisateurs confus.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Ce logiciel nécessitait depuis longtemps une refonte.</p>
<!-- /wp:paragraph -->

<!-- wp:heading -->
<h2 class="wp-block-heading">Nettoyer tôt, valider tôt, arrêter tôt</h2>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>Ces derniers mois, nous avons commencé à réécrire la gestion de plus de 300 variables d’environnement. Il fallait :</p>
<!-- /wp:paragraph -->

<!-- wp:list {"ordered":true} -->
<ol class="wp-block-list"><!-- wp:list-item -->
<li>Localiser toutes les variables utilisées</li>
<!-- /wp:list-item -->

<!-- wp:list-item -->
<li>Lister toutes les manières dont elles étaient utilisées</li>
<!-- /wp:list-item -->

<!-- wp:list-item -->
<li>Documenter les différents types de variables existants</li>
<!-- /wp:list-item -->

<!-- wp:list-item -->
<li>Tout nettoyer</li>
<!-- /wp:list-item --></ol>
<!-- /wp:list -->

<!-- wp:heading {"level":3} -->
<h3 class="wp-block-heading">Les LLM à la rescousse !</h3>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>Comme mentionné auparavant, ce nettoyage était attendu depuis longtemps. Il était dans nos esprits depuis plusieurs années. Cependant, le travail quotidien, les nouvelles fonctionnalités à développer, la croissance rapide de l’entreprise, etc., empêchaient de s’y consacrer.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Plus nous attendions, plus nous ajoutions de variables, et plus le travail devenait énorme. C’est à ce moment que les LLM sont arrivés. Trouver des motifs et réorganiser du texte est l’une de leurs forces ! Armés de ces outils, s’attaquer à cette tâche immense est soudainement devenu possible.</p>
<!-- /wp:paragraph -->

<!-- wp:heading {"level":3} -->
<h3 class="wp-block-heading">Tout centraliser</h3>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>Nous avons commencé par lister toutes les variables. Avec l’aide de LLM, toutes les variables ont été trouvées et centralisées dans un fichier unique. Ce fichier sert désormais de source de vérité pour toutes les variables. Nous les avons également typées et noté comment chaque variable était utilisée.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>À l’avenir, ce fichier sera utilisé pour générer la documentation et la validation dans nos API et nos clients.</p>
<!-- /wp:paragraph -->

<!-- wp:heading {"level":3} -->
<h3 class="wp-block-heading">Les types, pierre angulaire d’un code sain</h3>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>Lorsque vous construisez des programmes qui reçoivent des données des utilisateurs, vous voulez respecter deux principes :</p>
<!-- /wp:paragraph -->

<!-- wp:list {"ordered":true} -->
<ol class="wp-block-list"><!-- wp:list-item -->
<li>Les utilisateurs sont imprévisibles : ils s’attendent à être compris quoi qu’ils envoient. Pour offrir une expérience fluide, vous devez accepter un large éventail de valeurs. Si vous ne les acceptez pas, affichez des messages d’erreur clairs.</li>
<!-- /wp:list-item -->

<!-- wp:list-item -->
<li>À l’intérieur de votre programme, vous voulez de la cohérence, de la simplicité et de la prédictibilité.</li>
<!-- /wp:list-item --></ol>
<!-- /wp:list -->

<!-- wp:paragraph -->
<p>Pour cela, l’une des meilleures approches est d’utiliser des types forts. Par exemple, la chaîne “true” indique une valeur booléenne, vraie ou fausse. Dans le programme, nous ne vérifions que si la valeur est “true” ou “false” (toute autre valeur signifiant false). Autant utiliser un booléen.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Dans l’ensemble du programme de déploiement, les valeurs booléennes sont exposées aux utilisateurs de diverses manières :</p>
<!-- /wp:paragraph -->

<!-- wp:list -->
<ul class="wp-block-list"><!-- wp:list-item -->
<li>"true" / "false"</li>
<!-- /wp:list-item -->

<!-- wp:list-item -->
<li>"yes" / "no"</li>
<!-- /wp:list-item -->

<!-- wp:list-item -->
<li>"enable" / "disable"</li>
<!-- /wp:list-item -->

<!-- wp:list-item -->
<li>"enabled" / "disabled"</li>
<!-- /wp:list-item -->

<!-- wp:list-item -->
<li>"1" / "0"</li>
<!-- /wp:list-item -->

<!-- wp:list-item -->
<li>… (oui, il y en a d’autres !)</li>
<!-- /wp:list-item --></ul>
<!-- /wp:list -->

<!-- wp:paragraph -->
<p>Pourquoi ne pas toutes les accepter ? C’est ce que nous avons décidé.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Pour les booléens, les utilisateurs peuvent désormais utiliser l’une des valeurs suivantes :</p>
<!-- /wp:paragraph -->

<!-- wp:list -->
<ul class="wp-block-list"><!-- wp:list-item -->
<li>For true: 1, true, yes, on, enable, enabled</li>
<!-- /wp:list-item -->

<!-- wp:list-item -->
<li>Pour faux : 0, false, no, off, disable, disabled</li>
<!-- /wp:list-item --></ul>
<!-- /wp:list -->

<!-- wp:paragraph -->
<p>… plus quelques valeurs spécifiques pour la rétrocompatibilité.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Dans le code, nous récupérons la variable et obtenons une valeur booléenne. Plus besoin d’analyser plusieurs fois les mêmes chaînes dans des dizaines de fonctions !</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Au final, nous avons défini les types suivants :</p>
<!-- /wp:paragraph -->

<!-- wp:list -->
<ul class="wp-block-list"><!-- wp:list-item -->
<li>Boolean</li>
<!-- /wp:list-item -->

<!-- wp:list-item -->
<li>Disabler (presque un booléen, mais “disable” signifie true)</li>
<!-- /wp:list-item -->

<!-- wp:list-item -->
<li>Alternatives (choix dans une liste définie, comme les versions Java)</li>
<!-- /wp:list-item -->

<!-- wp:list-item -->
<li>Number</li>
<!-- /wp:list-item -->

<!-- wp:list-item -->
<li>String</li>
<!-- /wp:list-item --></ul>
<!-- /wp:list -->

<!-- wp:paragraph -->
<p>Pour chaque type, nous appliquons les mêmes étapes de nettoyage. Nous levons des erreurs cohérentes.</p>
<!-- /wp:paragraph -->

<!-- wp:heading {"level":3} -->
<h3 class="wp-block-heading">Arrêter tôt</h3>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>Dans l’ancienne version du code de déploiement, les valeurs des variables étaient vérifiées au moment de leur utilisation. Cela signifiait qu’une variable utilisée pour démarrer votre application était validée après la construction ! Vous deviez attendre toute la phase de build pour savoir si la variable était correcte. Puis vous corrigiez la variable et réessayiez. Ensuite, une autre erreur apparaissait plus tard dans le processus. 🤦</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Pour respecter les deux principes ci-dessus, nous devions tout valider dès le début.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Le programme de déploiement vérifie désormais toutes vos variables au lancement. Cela signifie que, quelle que soit la quantité de variables incorrectes, vous obtenez la liste complète des erreurs immédiatement et le déploiement s’arrête là. Plus besoin d’attendre 20 minutes avant de voir une erreur !</p>
<!-- /wp:paragraph -->

<!-- wp:heading -->
<h2 class="wp-block-heading">La cohérence implique un comportement plus strict</h2>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>Puisque chaque partie du code analysait les chaînes fournies par les utilisateurs, différents comportements apparaissaient :</p>
<!-- /wp:paragraph -->

<!-- wp:list -->
<ul class="wp-block-list"><!-- wp:list-item -->
<li>Parfois, une valeur inattendue provoquait une exception</li>
<!-- /wp:list-item -->

<!-- wp:list-item -->
<li>Parfois, elle était simplement ignorée</li>
<!-- /wp:list-item -->

<!-- wp:list-item -->
<li>Parfois, elle était ignorée puis faisait échouer l’application pour des raisons obscures</li>
<!-- /wp:list-item --></ul>
<!-- /wp:list -->

<!-- wp:paragraph -->
<p>Cette nouvelle validation étant cohérente, elle devient plus stricte pour certaines variables. Nous avons aussi choisi de considérer toutes les valeurs non prises en charge comme un échec. Cela signifie que votre application, auparavant déployée sans erreur, peut soudain échouer à cause d’une valeur non supportée.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Les déploiements blue-green de Clever Cloud empêchent toute interruption en cas de mauvaise valeur ! Le déploiement échoue tôt et vos instances existantes continuent de servir l’application.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Avant de publier cette mise à jour, nous avons également revu toutes vos variables de configuration Clever Cloud. Nous les avons testées et corrigées avant de déployer la mise à jour.</p>
<!-- /wp:paragraph -->

<!-- wp:heading {"level":3} -->
<h3 class="wp-block-heading">À quoi cela ressemble-t-il ?</h3>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>Si votre déploiement échoue parce que certaines variables ne passent pas la validation, vous verrez ce message dans les logs :</p>
<!-- /wp:paragraph -->

<!-- wp:image {"id":22937,"sizeSlug":"large","linkDestination":"none"} -->
<figure class="wp-block-image size-large"><img src="https://cdn.clever-cloud.com/uploads/2025/12/image-8-1024x185.png" alt="" class="wp-image-22937"/></figure>
<!-- /wp:image -->

<!-- wp:paragraph -->
<p>Ce message indique que quatre variables ont une valeur inattendue. Les valeurs correctes sont affichées.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Lorsque vous obtenez ce message, allez dans l’onglet “Environment variables” de votre application dans la console et corrigez les variables. Par exemple :</p>
<!-- /wp:paragraph -->

<!-- wp:list -->
<ul class="wp-block-list"><!-- wp:list-item -->
<li><code>CC_CGI_IMPLEMENTATION</code>: il y avait une faute de frappe, facile à corriger !</li>
<!-- /wp:list-item -->

<!-- wp:list-item -->
<li><code>CC_COMPOSER_VERSION</code>: la variable est définie, mais sa valeur est une chaîne vide.</li>
<!-- /wp:list-item --></ul>
<!-- /wp:list -->

<!-- wp:paragraph -->
<p>Si vous corrigez toutes les erreurs, c’est terminé ! Aucune nouvelle erreur de variable non supportée n’apparaîtra au prochain déploiement.</p>
<!-- /wp:paragraph -->]]></description>
										<content:encoded><![CDATA[<p><img width="2500" height="1109" src="https://cdn.clever-cloud.com/uploads/2025/12/2025-12-02-clever-cloud-banniere-blog-variables-de-deploiement-fr-1.png" class="attachment-post-thumbnail size-post-thumbnail wp-post-image" alt="2025 12 02 clever cloud banniere blog variables de deploiement fr 1" decoding="async" srcset="https://cdn.clever-cloud.com/uploads/2025/12/2025-12-02-clever-cloud-banniere-blog-variables-de-deploiement-fr-1.png 2500w, https://cdn.clever-cloud.com/uploads/2025/12/2025-12-02-clever-cloud-banniere-blog-variables-de-deploiement-fr-1-300x133.png 300w, https://cdn.clever-cloud.com/uploads/2025/12/2025-12-02-clever-cloud-banniere-blog-variables-de-deploiement-fr-1-1024x454.png 1024w, https://cdn.clever-cloud.com/uploads/2025/12/2025-12-02-clever-cloud-banniere-blog-variables-de-deploiement-fr-1-768x341.png 768w, https://cdn.clever-cloud.com/uploads/2025/12/2025-12-02-clever-cloud-banniere-blog-variables-de-deploiement-fr-1-1536x681.png 1536w, https://cdn.clever-cloud.com/uploads/2025/12/2025-12-02-clever-cloud-banniere-blog-variables-de-deploiement-fr-1-2048x908.png 2048w, https://cdn.clever-cloud.com/uploads/2025/12/2025-12-02-clever-cloud-banniere-blog-variables-de-deploiement-fr-1-1368x607.png 1368w" sizes="(max-width: 2500px) 100vw, 2500px" /></p><!-- wp:paragraph -->
<p>Lorsque vous déployez vos applications sur Clever Cloud, vous pouvez configurer la construction et le démarrage de votre application ou de services secondaires en utilisant des <a href="https://www.clever.cloud/developers/doc/reference/reference-environment-variables">variables d’environnement</a>. Nous avons récemment revu leur gestion. Cette refonte apporte clarté et cohérence aux variables de configuration, avec quelques changements incompatibles. Dans cet article, nous détaillons ce qui a changé et le travail fait pour vous éviter les problèmes.</p>
<!-- /wp:paragraph -->

<!-- wp:heading -->
<h2 class="wp-block-heading">Configurer votre déploiement</h2>
<!-- /wp:heading -->

<!-- wp:heading {"level":3} -->
<h3 class="wp-block-heading">Un peu de contexte</h3>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>Clever Cloud essaie de construire et d’exécuter vos applications en détectant la technologie que vous utilisez : un fichier <code>composer.json</code> existe ? Nous exécutons <code>composer install</code>. Vous avez déjà un <code>composer.phar</code> dans votre dépôt ? Nous utilisons celui-ci à la place de celui du système.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Cependant, vous devez parfois nous indiquer quoi faire. Votre application nécessite une version spécifique de <a href="https://www.clever.cloud/fr/product/applications-php/">PHP</a> ou de <a href="https://www.clever.cloud/fr/product/applications-java/">Java</a> pour fonctionner ? Nous ne pouvons pas le deviner. C’est là que les variables de configuration interviennent : pour nous indiquer quelle version de PHP utiliser ou si nous devons activer une extension PHP, vous devez utiliser des <a href="https://www.clever.cloud/developers/doc/reference/reference-environment-variables">variables<strong> </strong>d’environnement</a>, qui seront interprétées par le logiciel chargé du déploiement de l’application.</p>
<!-- /wp:paragraph -->

<!-- wp:heading {"level":3} -->
<h3 class="wp-block-heading">Un traitement empirique de la configuration</h3>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>Historiquement, nous avons commencé à utiliser des variables d’environnement pour modifier le comportement du processus de déploiement. Le processus lui-même vérifiait la présence et validait les variables lorsqu’il devait les utiliser. La prise en charge de chaque variable était empirique et sujette à variations.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Par exemple, pour activer l’extension PHP APCu, vous pouvez définir <code>ENABLE_APCU="true"</code>. Dans le script d’activation de l’extension, la valeur de la variable <code>ENABLE_APCU</code> était vérifiée juste avant d’activer (ou non) l’extension. Ce morceau de code acceptait la chaîne “true” sans tenir compte de la casse.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Ailleurs dans le code, <code>CC_CACHE_DEPENDENCIES</code> n’était vérifié que pour la chaîne exacte “true”. Ainsi “True” ou “TRUE” étaient considérées comme fausses. Pour d’autres variables, “yes” et “no” étaient autorisés à la place ou en plus de “true” et “false”.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Différentes variables impliquaient différentes stratégies de validation. Cela compliquait l’assistance client, puisqu’il fallait parfois consulter le code pour aider des utilisateurs confus.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Ce logiciel nécessitait depuis longtemps une refonte.</p>
<!-- /wp:paragraph -->

<!-- wp:heading -->
<h2 class="wp-block-heading">Nettoyer tôt, valider tôt, arrêter tôt</h2>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>Ces derniers mois, nous avons commencé à réécrire la gestion de plus de 300 variables d’environnement. Il fallait :</p>
<!-- /wp:paragraph -->

<!-- wp:list {"ordered":true} -->
<ol class="wp-block-list"><!-- wp:list-item -->
<li>Localiser toutes les variables utilisées</li>
<!-- /wp:list-item -->

<!-- wp:list-item -->
<li>Lister toutes les manières dont elles étaient utilisées</li>
<!-- /wp:list-item -->

<!-- wp:list-item -->
<li>Documenter les différents types de variables existants</li>
<!-- /wp:list-item -->

<!-- wp:list-item -->
<li>Tout nettoyer</li>
<!-- /wp:list-item --></ol>
<!-- /wp:list -->

<!-- wp:heading {"level":3} -->
<h3 class="wp-block-heading">Les LLM à la rescousse !</h3>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>Comme mentionné auparavant, ce nettoyage était attendu depuis longtemps. Il était dans nos esprits depuis plusieurs années. Cependant, le travail quotidien, les nouvelles fonctionnalités à développer, la croissance rapide de l’entreprise, etc., empêchaient de s’y consacrer.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Plus nous attendions, plus nous ajoutions de variables, et plus le travail devenait énorme. C’est à ce moment que les LLM sont arrivés. Trouver des motifs et réorganiser du texte est l’une de leurs forces ! Armés de ces outils, s’attaquer à cette tâche immense est soudainement devenu possible.</p>
<!-- /wp:paragraph -->

<!-- wp:heading {"level":3} -->
<h3 class="wp-block-heading">Tout centraliser</h3>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>Nous avons commencé par lister toutes les variables. Avec l’aide de LLM, toutes les variables ont été trouvées et centralisées dans un fichier unique. Ce fichier sert désormais de source de vérité pour toutes les variables. Nous les avons également typées et noté comment chaque variable était utilisée.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>À l’avenir, ce fichier sera utilisé pour générer la documentation et la validation dans nos API et nos clients.</p>
<!-- /wp:paragraph -->

<!-- wp:heading {"level":3} -->
<h3 class="wp-block-heading">Les types, pierre angulaire d’un code sain</h3>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>Lorsque vous construisez des programmes qui reçoivent des données des utilisateurs, vous voulez respecter deux principes :</p>
<!-- /wp:paragraph -->

<!-- wp:list {"ordered":true} -->
<ol class="wp-block-list"><!-- wp:list-item -->
<li>Les utilisateurs sont imprévisibles : ils s’attendent à être compris quoi qu’ils envoient. Pour offrir une expérience fluide, vous devez accepter un large éventail de valeurs. Si vous ne les acceptez pas, affichez des messages d’erreur clairs.</li>
<!-- /wp:list-item -->

<!-- wp:list-item -->
<li>À l’intérieur de votre programme, vous voulez de la cohérence, de la simplicité et de la prédictibilité.</li>
<!-- /wp:list-item --></ol>
<!-- /wp:list -->

<!-- wp:paragraph -->
<p>Pour cela, l’une des meilleures approches est d’utiliser des types forts. Par exemple, la chaîne “true” indique une valeur booléenne, vraie ou fausse. Dans le programme, nous ne vérifions que si la valeur est “true” ou “false” (toute autre valeur signifiant false). Autant utiliser un booléen.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Dans l’ensemble du programme de déploiement, les valeurs booléennes sont exposées aux utilisateurs de diverses manières :</p>
<!-- /wp:paragraph -->

<!-- wp:list -->
<ul class="wp-block-list"><!-- wp:list-item -->
<li>"true" / "false"</li>
<!-- /wp:list-item -->

<!-- wp:list-item -->
<li>"yes" / "no"</li>
<!-- /wp:list-item -->

<!-- wp:list-item -->
<li>"enable" / "disable"</li>
<!-- /wp:list-item -->

<!-- wp:list-item -->
<li>"enabled" / "disabled"</li>
<!-- /wp:list-item -->

<!-- wp:list-item -->
<li>"1" / "0"</li>
<!-- /wp:list-item -->

<!-- wp:list-item -->
<li>… (oui, il y en a d’autres !)</li>
<!-- /wp:list-item --></ul>
<!-- /wp:list -->

<!-- wp:paragraph -->
<p>Pourquoi ne pas toutes les accepter ? C’est ce que nous avons décidé.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Pour les booléens, les utilisateurs peuvent désormais utiliser l’une des valeurs suivantes :</p>
<!-- /wp:paragraph -->

<!-- wp:list -->
<ul class="wp-block-list"><!-- wp:list-item -->
<li>For true: 1, true, yes, on, enable, enabled</li>
<!-- /wp:list-item -->

<!-- wp:list-item -->
<li>Pour faux : 0, false, no, off, disable, disabled</li>
<!-- /wp:list-item --></ul>
<!-- /wp:list -->

<!-- wp:paragraph -->
<p>… plus quelques valeurs spécifiques pour la rétrocompatibilité.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Dans le code, nous récupérons la variable et obtenons une valeur booléenne. Plus besoin d’analyser plusieurs fois les mêmes chaînes dans des dizaines de fonctions !</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Au final, nous avons défini les types suivants :</p>
<!-- /wp:paragraph -->

<!-- wp:list -->
<ul class="wp-block-list"><!-- wp:list-item -->
<li>Boolean</li>
<!-- /wp:list-item -->

<!-- wp:list-item -->
<li>Disabler (presque un booléen, mais “disable” signifie true)</li>
<!-- /wp:list-item -->

<!-- wp:list-item -->
<li>Alternatives (choix dans une liste définie, comme les versions Java)</li>
<!-- /wp:list-item -->

<!-- wp:list-item -->
<li>Number</li>
<!-- /wp:list-item -->

<!-- wp:list-item -->
<li>String</li>
<!-- /wp:list-item --></ul>
<!-- /wp:list -->

<!-- wp:paragraph -->
<p>Pour chaque type, nous appliquons les mêmes étapes de nettoyage. Nous levons des erreurs cohérentes.</p>
<!-- /wp:paragraph -->

<!-- wp:heading {"level":3} -->
<h3 class="wp-block-heading">Arrêter tôt</h3>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>Dans l’ancienne version du code de déploiement, les valeurs des variables étaient vérifiées au moment de leur utilisation. Cela signifiait qu’une variable utilisée pour démarrer votre application était validée après la construction ! Vous deviez attendre toute la phase de build pour savoir si la variable était correcte. Puis vous corrigiez la variable et réessayiez. Ensuite, une autre erreur apparaissait plus tard dans le processus. 🤦</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Pour respecter les deux principes ci-dessus, nous devions tout valider dès le début.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Le programme de déploiement vérifie désormais toutes vos variables au lancement. Cela signifie que, quelle que soit la quantité de variables incorrectes, vous obtenez la liste complète des erreurs immédiatement et le déploiement s’arrête là. Plus besoin d’attendre 20 minutes avant de voir une erreur !</p>
<!-- /wp:paragraph -->

<!-- wp:heading -->
<h2 class="wp-block-heading">La cohérence implique un comportement plus strict</h2>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>Puisque chaque partie du code analysait les chaînes fournies par les utilisateurs, différents comportements apparaissaient :</p>
<!-- /wp:paragraph -->

<!-- wp:list -->
<ul class="wp-block-list"><!-- wp:list-item -->
<li>Parfois, une valeur inattendue provoquait une exception</li>
<!-- /wp:list-item -->

<!-- wp:list-item -->
<li>Parfois, elle était simplement ignorée</li>
<!-- /wp:list-item -->

<!-- wp:list-item -->
<li>Parfois, elle était ignorée puis faisait échouer l’application pour des raisons obscures</li>
<!-- /wp:list-item --></ul>
<!-- /wp:list -->

<!-- wp:paragraph -->
<p>Cette nouvelle validation étant cohérente, elle devient plus stricte pour certaines variables. Nous avons aussi choisi de considérer toutes les valeurs non prises en charge comme un échec. Cela signifie que votre application, auparavant déployée sans erreur, peut soudain échouer à cause d’une valeur non supportée.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Les déploiements blue-green de Clever Cloud empêchent toute interruption en cas de mauvaise valeur ! Le déploiement échoue tôt et vos instances existantes continuent de servir l’application.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Avant de publier cette mise à jour, nous avons également revu toutes vos variables de configuration Clever Cloud. Nous les avons testées et corrigées avant de déployer la mise à jour.</p>
<!-- /wp:paragraph -->

<!-- wp:heading {"level":3} -->
<h3 class="wp-block-heading">À quoi cela ressemble-t-il ?</h3>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>Si votre déploiement échoue parce que certaines variables ne passent pas la validation, vous verrez ce message dans les logs :</p>
<!-- /wp:paragraph -->

<!-- wp:image {"id":22937,"sizeSlug":"large","linkDestination":"none"} -->
<figure class="wp-block-image size-large"><img src="https://cdn.clever-cloud.com/uploads/2025/12/image-8-1024x185.png" alt="" class="wp-image-22937"/></figure>
<!-- /wp:image -->

<!-- wp:paragraph -->
<p>Ce message indique que quatre variables ont une valeur inattendue. Les valeurs correctes sont affichées.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Lorsque vous obtenez ce message, allez dans l’onglet “Environment variables” de votre application dans la console et corrigez les variables. Par exemple :</p>
<!-- /wp:paragraph -->

<!-- wp:list -->
<ul class="wp-block-list"><!-- wp:list-item -->
<li><code>CC_CGI_IMPLEMENTATION</code>: il y avait une faute de frappe, facile à corriger !</li>
<!-- /wp:list-item -->

<!-- wp:list-item -->
<li><code>CC_COMPOSER_VERSION</code>: la variable est définie, mais sa valeur est une chaîne vide.</li>
<!-- /wp:list-item --></ul>
<!-- /wp:list -->

<!-- wp:paragraph -->
<p>Si vous corrigez toutes les erreurs, c’est terminé ! Aucune nouvelle erreur de variable non supportée n’apparaîtra au prochain déploiement.</p>
<!-- /wp:paragraph -->]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Repenser les factures pour rendre heureux votre comptable</title>
		<link>https://www.clever.cloud/fr/blog/fonctionnalites/2022/02/16/repenser-les-factures-pour-rendre-heureux-votre-comptable/</link>
		
		<dc:creator><![CDATA[Julien Durillon]]></dc:creator>
		<pubDate>Wed, 16 Feb 2022 08:51:44 +0000</pubDate>
				<category><![CDATA[Fonctionnalités]]></category>
		<category><![CDATA[entreprise]]></category>
		<category><![CDATA[fonctionnalité]]></category>
		<guid isPermaLink="false">https://www.clever-cloud.com/?p=5383</guid>

					<description><![CDATA[<p><img width="1600" height="617" src="https://cdn.clever-cloud.com/uploads/2022/02/refactoring-invoices-2.png" class="attachment-post-thumbnail size-post-thumbnail wp-post-image" alt="refactoring invoices 2" decoding="async" loading="lazy" srcset="https://cdn.clever-cloud.com/uploads/2022/02/refactoring-invoices-2.png 1600w, https://cdn.clever-cloud.com/uploads/2022/02/refactoring-invoices-2-300x116.png 300w, https://cdn.clever-cloud.com/uploads/2022/02/refactoring-invoices-2-1024x395.png 1024w, https://cdn.clever-cloud.com/uploads/2022/02/refactoring-invoices-2-768x296.png 768w, https://cdn.clever-cloud.com/uploads/2022/02/refactoring-invoices-2-1536x592.png 1536w, https://cdn.clever-cloud.com/uploads/2022/02/refactoring-invoices-2-1368x528.png 1368w" sizes="auto, (max-width: 1600px) 100vw, 1600px" /></p><!-- wp:paragraph -->
<p>Cette semaine, nous avons mis en production des améliorations de présentation de nos factures. Le résultat : des factures qui vous aident à comprendre ce que vous payez et à quel montant vous attendre pour la facture suivante. Regardons cela en détail !</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Pour introduire la problématique : Clever Cloud vous facture ce que vous avez utilisé pendant la dernière période, ainsi qu'une provision ("crédits prépayés") pour la période de facturation suivante. D'une facture à l'autre, la provision va évoluer en fonction de votre utilisation de Clever Cloud. Jusqu'ici, le montant de crédits provisionnés à l'instant T n'était pas clairement affiché. L'autre problématique était la gestion du compte de crédits offerts. Ces derniers sont toujours soumis à expiration. Il fallait donc l'expliciter dans les factures.</p>
<!-- /wp:paragraph -->

<!-- wp:heading -->
<h2 class="wp-block-heading" id="une-premiere-page-plus-claire">Une première page plus claire</h2>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>Premièrement, nous avons renommé plusieurs descriptions sur la première page. En partie pour faire plaisir à notre service juridique. Mais principalement pour rendre ces lignes compréhensibles. Ainsi, là où il y avait « Consommation Clever Cloud », on peut maintenant lire « Redevance utilisation de la plateforme ». Nous avons également amélioré l'affichage des montants : tout d'abord, un sous-total représentant le total à payer (après remises) pour avoir utilisé Clever Cloud ("Redevance totale"). Ensuite, un montant de crédits retirés ou à ajouter à votre compte prépayé. La somme des deux vous donne le total à payer.</p>
<!-- /wp:paragraph -->

<!-- wp:image {"id":5388,"sizeSlug":"full","linkDestination":"none"} -->
<figure class="wp-block-image size-full"><img src="https://cdn.clever-cloud.com/uploads/2022/02/article-facture-summary-exemple-1.png" alt="Capture d'écran d'une facture. Le contenu est décrit dans le reste de l'article. Il y a quelques clin d'œils dans l'adresse du style &quot;boulevard de l'orchestration&quot;." class="wp-image-5388"/></figure>
<!-- /wp:image -->

<!-- wp:heading -->
<h2 class="wp-block-heading" id="les-credits-gratuits-explicites">Les crédits gratuits explicités</h2>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>Le changement suivant apparaît sur la deuxième page : nous vous donnons le détail de tous les <a href="https://www.clever.cloud/fr/#subscribe" target="_blank" rel="noreferrer noopener">crédits gratuits</a> consommés / expirés ce mois-ci et comment nous calculons les crédits à supprimer ou à ajouter à la facture.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Sur cette deuxième page, vous avez : tous les crédits gratuits auxquels vous avez droit, ceux qui sont arrivés à expiration, combien il vous reste pour couvrir la prochaine période de facturation. Vous avez également toutes les variables que nous utilisons pour calculer les crédits ajoutés ou consommés qui s'affichent sur la première page.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Cette deuxième page vous aidera à suivre le solde de vos crédits prépayés et à mieux comprendre pourquoi nous vous facturons ce montant précis.</p>
<!-- /wp:paragraph -->

<!-- wp:image {"id":5391,"sizeSlug":"full","linkDestination":"none"} -->
<figure class="wp-block-image size-full"><img src="https://cdn.clever-cloud.com/uploads/2022/02/article-facture-upfront-exemple.png" alt="" class="wp-image-5391"/><figcaption class="wp-element-caption">Can you spot what seems to be a computation error?</figcaption></figure>
<!-- /wp:image -->

<!-- wp:paragraph -->
<p>Avec ces changements, votre comptable devrait être content ! D'une part, nous espérons que cela les aidera à comprendre nos factures. Et d'autre part, qu'ils pourront consacrer du temps à essayer de comprendre les factures de vos autres fournisseurs! 😇</p>
<!-- /wp:paragraph -->]]></description>
										<content:encoded><![CDATA[<p><img width="1600" height="617" src="https://cdn.clever-cloud.com/uploads/2022/02/refactoring-invoices-2.png" class="attachment-post-thumbnail size-post-thumbnail wp-post-image" alt="refactoring invoices 2" decoding="async" loading="lazy" srcset="https://cdn.clever-cloud.com/uploads/2022/02/refactoring-invoices-2.png 1600w, https://cdn.clever-cloud.com/uploads/2022/02/refactoring-invoices-2-300x116.png 300w, https://cdn.clever-cloud.com/uploads/2022/02/refactoring-invoices-2-1024x395.png 1024w, https://cdn.clever-cloud.com/uploads/2022/02/refactoring-invoices-2-768x296.png 768w, https://cdn.clever-cloud.com/uploads/2022/02/refactoring-invoices-2-1536x592.png 1536w, https://cdn.clever-cloud.com/uploads/2022/02/refactoring-invoices-2-1368x528.png 1368w" sizes="auto, (max-width: 1600px) 100vw, 1600px" /></p><!-- wp:paragraph -->
<p>Cette semaine, nous avons mis en production des améliorations de présentation de nos factures. Le résultat : des factures qui vous aident à comprendre ce que vous payez et à quel montant vous attendre pour la facture suivante. Regardons cela en détail !</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Pour introduire la problématique : Clever Cloud vous facture ce que vous avez utilisé pendant la dernière période, ainsi qu'une provision ("crédits prépayés") pour la période de facturation suivante. D'une facture à l'autre, la provision va évoluer en fonction de votre utilisation de Clever Cloud. Jusqu'ici, le montant de crédits provisionnés à l'instant T n'était pas clairement affiché. L'autre problématique était la gestion du compte de crédits offerts. Ces derniers sont toujours soumis à expiration. Il fallait donc l'expliciter dans les factures.</p>
<!-- /wp:paragraph -->

<!-- wp:heading -->
<h2 class="wp-block-heading" id="une-premiere-page-plus-claire">Une première page plus claire</h2>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>Premièrement, nous avons renommé plusieurs descriptions sur la première page. En partie pour faire plaisir à notre service juridique. Mais principalement pour rendre ces lignes compréhensibles. Ainsi, là où il y avait « Consommation Clever Cloud », on peut maintenant lire « Redevance utilisation de la plateforme ». Nous avons également amélioré l'affichage des montants : tout d'abord, un sous-total représentant le total à payer (après remises) pour avoir utilisé Clever Cloud ("Redevance totale"). Ensuite, un montant de crédits retirés ou à ajouter à votre compte prépayé. La somme des deux vous donne le total à payer.</p>
<!-- /wp:paragraph -->

<!-- wp:image {"id":5388,"sizeSlug":"full","linkDestination":"none"} -->
<figure class="wp-block-image size-full"><img src="https://cdn.clever-cloud.com/uploads/2022/02/article-facture-summary-exemple-1.png" alt="Capture d'écran d'une facture. Le contenu est décrit dans le reste de l'article. Il y a quelques clin d'œils dans l'adresse du style &quot;boulevard de l'orchestration&quot;." class="wp-image-5388"/></figure>
<!-- /wp:image -->

<!-- wp:heading -->
<h2 class="wp-block-heading" id="les-credits-gratuits-explicites">Les crédits gratuits explicités</h2>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>Le changement suivant apparaît sur la deuxième page : nous vous donnons le détail de tous les <a href="https://www.clever.cloud/fr/#subscribe" target="_blank" rel="noreferrer noopener">crédits gratuits</a> consommés / expirés ce mois-ci et comment nous calculons les crédits à supprimer ou à ajouter à la facture.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Sur cette deuxième page, vous avez : tous les crédits gratuits auxquels vous avez droit, ceux qui sont arrivés à expiration, combien il vous reste pour couvrir la prochaine période de facturation. Vous avez également toutes les variables que nous utilisons pour calculer les crédits ajoutés ou consommés qui s'affichent sur la première page.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Cette deuxième page vous aidera à suivre le solde de vos crédits prépayés et à mieux comprendre pourquoi nous vous facturons ce montant précis.</p>
<!-- /wp:paragraph -->

<!-- wp:image {"id":5391,"sizeSlug":"full","linkDestination":"none"} -->
<figure class="wp-block-image size-full"><img src="https://cdn.clever-cloud.com/uploads/2022/02/article-facture-upfront-exemple.png" alt="" class="wp-image-5391"/><figcaption class="wp-element-caption">Can you spot what seems to be a computation error?</figcaption></figure>
<!-- /wp:image -->

<!-- wp:paragraph -->
<p>Avec ces changements, votre comptable devrait être content ! D'une part, nous espérons que cela les aidera à comprendre nos factures. Et d'autre part, qu'ils pourront consacrer du temps à essayer de comprendre les factures de vos autres fournisseurs! 😇</p>
<!-- /wp:paragraph -->]]></content:encoded>
					
		
		
			</item>
	</channel>
</rss>
