{"id":6379,"date":"2022-08-03T18:38:38","date_gmt":"2022-08-03T18:38:38","guid":{"rendered":"https:\/\/itopdev.wpenginepowered.com\/long-term-internal-organization-for-a-great-lts-release\/"},"modified":"2025-12-09T15:42:48","modified_gmt":"2025-12-09T15:42:48","slug":"organisation-interne-long-term-pour-une-version-lts-au-top","status":"publish","type":"post","link":"https:\/\/combodo.com\/fr\/itop-fr\/organisation-interne-long-term-pour-une-version-lts-au-top\/","title":{"rendered":"Organisation interne \u00ab Long-term \u00bb pour une version LTS au top"},"content":{"rendered":"<h2 dir=\"auto\">Deuxi\u00e8me partie : comment Combodo s\u2019est organis\u00e9 pour s\u2019adapter au mod\u00e8le STS-LTS<\/h2>\n<p>Dans l\u2019<a href=\"https:\/\/combodo.com\/fr\/itop-fr\/besoin-de-stabilite-la-long-term-support-est-faite-pour-vous\/\">article pr\u00e9c\u00e9dent<\/a>, vous avez pu appr\u00e9hender les nombreux avantages \u00e0 combiner des versions Long-term et Short-term support : \u00eatre flexible et \u00e9volutif tout en garantissant de la stabilit\u00e9 \u00e0 nos clients, minimiser les co\u00fbts de support et de d\u00e9veloppement tout en garantissant la meilleure qualit\u00e9 de service.<\/p>\n<p>Mais avant d\u2019arriver \u00e0 la mise \u00e0 disposition de cette premi\u00e8re version LTS, la 2.7, nous avons d\u00fb repenser un certain nombre de choses dans notre organisation interne. Ce projet a fait faire un pas en avant aux \u00e9quipes de Combodo, et nous allons voir dans cet article comment nous nous sommes organis\u00e9s pour relever le d\u00e9fi.<\/p>\n<h2 dir=\"auto\">Un projet de d\u00e9veloppement ambitieux<\/h2>\n<p>Comment r\u00e9aliser la premi\u00e8re version LTS de l\u2019histoire de Combodo ? Voil\u00e0 un projet bien ambitieux, et comme nous l\u2019expliquions dans le\u00a0<a href=\"https:\/\/combodo.com\/fr\/itop-fr\/besoin-de-stabilite-la-long-term-support-est-faite-pour-vous\/\">pr\u00e9c\u00e9dent volet<\/a>, soumis \u00e0 des contraintes contradictoires\u2026<\/p>\n<p>Ce projet s\u2019est \u00e9tal\u00e9 sur un peu plus d\u2019un an, mobilisant plusieurs \u00e9quipes au sein de Combodo. Quelques chiffres r\u00e9sument bien cette ann\u00e9e de d\u00e9veloppement :<\/p>\n<ul>\n<li>D\u00e9but des d\u00e9veloppements : mars 2019<\/li>\n<li>Backlog : 275 demandes en mars 2019, et environ 400 en juillet 2019\u2026 pour finalement terminer \u00e0 240 demandes effectivement r\u00e9alis\u00e9es fin mars 2020\u2026 on peut dire qu\u2019il a \u00e9volu\u00e9 tr\u00e8s vite, et qu\u2019il a fallu s\u2019adapter.<\/li>\n<li>Date de sortie :\n<ul>\n<li>Objectif initial de sortie de la LTS d\u00e9cembre 2019<\/li>\n<li>Date de sortie d\u00e9cal\u00e9e une premi\u00e8re fois \u00e0 fin f\u00e9vrier 2020 (d\u00e9cid\u00e9 en d\u00e9cembre 2019)<\/li>\n<li>Nouveau d\u00e9calage \u00e0 fin mars 2020 (d\u00e9cid\u00e9 en janvier 2020)<\/li>\n<li><strong>Sortie effective de la version 2.7.0 le 1er avril 2020<\/strong><\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<h2>Changer l\u2019organisation pour optimiser la qualit\u00e9 !<\/h2>\n<p>Face \u00e0 nos ambitions, nous avons revu notre mani\u00e8re de travailler au fur et \u00e0 mesure que le projet avan\u00e7ait.<\/p>\n<h3 dir=\"auto\">Suivi de projet<\/h3>\n<p dir=\"auto\">Les r\u00e9trospectives effectu\u00e9es sur les pr\u00e9c\u00e9dentes version d\u2019iTop nous ont montr\u00e9 l\u2019augmentation des demandes au cours du\u00a0 temps. Vu la dimension du projet, nous avons d\u00e9cid\u00e9 de mettre en place un suivi hebdomadaire du backlog : cela nous a permis d\u2019identifier rapidement les d\u00e9rapages et d\u2019agir en cons\u00e9quence pour limiter les retards.<\/p>\n<h3 dir=\"auto\">Confinement et Covid-19<\/h3>\n<p dir=\"auto\">Comme le monde entier au d\u00e9but de l\u2019ann\u00e9e 2020, nous avons subi l\u2019\u00e9pid\u00e9mie de COVID-19 et du jour au lendemain, toute notre organisation a due \u00eatre chang\u00e9e. Nous aimons faire de la programmation en paire et les revues de code, et nous avons d\u00e9couvert les avantages et inconv\u00e9nients du t\u00e9l\u00e9travail :<\/p>\n<ul>\n<li dir=\"auto\">\u2795 Nous \u00e9tions moins soumis aux distractions de la vie de bureau donc nous pouvions nous concentrer sur le code.<\/li>\n<li dir=\"auto\">\u2796 Passer de l\u2019oral \u00e0 l\u2019\u00e9crit (et donc \u00e0 l\u2019asynchrone) a g\u00e9n\u00e9r\u00e9 des tensions entre les \u00e9quipes notamment entre l\u2019\u00e9quipe de d\u00e9veloppement et l\u2019\u00e9quipe produit : disponibilit\u00e9, prise en compte des demandes, temps de r\u00e9ponse\u2026<\/li>\n<li dir=\"auto\">\u2796 A distance il est bien plus difficile de s\u2019assurer de l\u2019alignement de chacun sur la m\u00eame compr\u00e9hension\u2026 Quand tout le monde est dans les m\u00eames locaux, il suffit bien souvent de simplement se d\u00e9placer pour parler \u00e0 l\u2019ensemble des membres de l\u2019autre \u00e9quipe.<\/li>\n<\/ul>\n<p dir=\"auto\">\ud83e\udd14 Ce changement de fonctionnement subi par les \u00e9quipes, ajout\u00e9 au retard par rapport au planning initial a n\u00e9cessit\u00e9 de la souplesse, afin de trouver la meilleure fa\u00e7on de fonctionner.<\/p>\n<p dir=\"auto\">Nous avons donc cherch\u00e9 les outils adapt\u00e9s (chat et visio : \u00e0 terme Combodo a adopt\u00e9\u00a0<a href=\"https:\/\/rocket.chat\/\">Rocket Chat<\/a>) et \u00e9chang\u00e9 sur la mani\u00e8re de bien les utiliser, afin de garantir un fonctionnement valid\u00e9 par tous.<\/p>\n<h3 dir=\"auto\">Pair programming<img loading=\"lazy\" decoding=\"async\" class=\"alignright wp-image-1811\" src=\"https:\/\/blog.combodo.com\/wp-content\/uploads\/2022\/08\/Strips-Pair-coding-550-final-300x195.jpg\" alt=\"pair programming\" width=\"365\" height=\"237\" srcset=\"https:\/\/combodo.com\/wp-content\/uploads\/2022\/08\/Strips-Pair-coding-550-final-300x195.jpg 300w, https:\/\/combodo.com\/wp-content\/uploads\/2022\/08\/Strips-Pair-coding-550-final-480x312.jpg 480w, https:\/\/combodo.com\/wp-content\/uploads\/2022\/08\/Strips-Pair-coding-550-final.jpg 550w\" sizes=\"(max-width: 365px) 100vw, 365px\" \/><\/h3>\n<p>En vue d\u2019am\u00e9liorer la qualit\u00e9 du code de l\u2019application, la\u00a0<strong>programmation \u00e0 deux personnes<\/strong>\u00a0(pair programming ou peer programming) a \u00e9t\u00e9 g\u00e9n\u00e9ralis\u00e9e. Il y a plusieurs avantages \u00e0 cette pratique :<\/p>\n<ul>\n<li>Comme les deux d\u00e9veloppeurs ont une vue diff\u00e9rente,\u00a0<strong>le code est de meilleure qualit\u00e9<\/strong>\u00a0(mieux structur\u00e9, plus maintenable) : l\u2019un (celui qui est au clavier) a une vue tactique du code, et l\u2019autre a une vue strat\u00e9gique.<\/li>\n<li>La\u00a0<strong>revue de code<\/strong>\u00a0qui s\u2019effectue au moment du codage est plus pertinente que celle effectu\u00e9e \u00e0 posteriori.<\/li>\n<li>Transfert de comp\u00e9tences : la\u00a0<strong>maintenance est facilit\u00e9e<\/strong>\u00a0par le fait que deux d\u00e9veloppeurs connaitront bien cette partie du code qu\u2019ils ont con\u00e7ue et modifi\u00e9e.<\/li>\n<\/ul>\n<p>Cette pratique a aussi quelques inconv\u00e9nients :<\/p>\n<ul>\n<li>Le d\u00e9marrage est toujours un peu plus long, puisque les deux d\u00e9veloppeurs doivent s\u2019accorder sur la marche \u00e0 suivre pour le d\u00e9veloppement et apprendre le fonctionnement de la partie de code qu\u2019ils ont \u00e0 modifier.<\/li>\n<li>Il faut trouver des paires de d\u00e9veloppeurs qui se compl\u00e8tent bien et se font confiance (pas forcement facile dans les petites \u00e9quipes)<\/li>\n<li>La mobilisation de deux d\u00e9veloppeurs sur le m\u00eame sujet r\u00e9duit la quantit\u00e9 de projets que l\u2019\u00e9quipe peut mener en parall\u00e8le.<\/li>\n<\/ul>\n<p>Mais pour nous les b\u00e9n\u00e9fices ont largement supplant\u00e9 ces quelques inconv\u00e9nients. Cette m\u00e9thode a donc \u00e9t\u00e9 d\u00e9finitivement adopt\u00e9e.<\/p>\n<h3 dir=\"auto\">Revues de code<\/h3>\n<p>Nous avons mis en place \u00e9galement des revues de code \u00e0 post\u00e9riori. C\u2019est un exercice qui n\u2019est pas forc\u00e9ment simple.<\/p>\n<p>iTop \u00e9tant une application vaste, il est difficile pour les d\u00e9veloppeurs de connaitre l\u2019ensemble de la base de code, ou simplement d\u2019\u00e9valuer l\u2019impact d\u2019une modification sur l\u2019ensemble de l\u2019application. Cependant, toute l\u2019\u00e9quipe travaillant sur cette version au m\u00eame moment, l\u2019\u00e9mulation permet de trouver des connexions entre des sujets (fonctionnels comme techniques) connexes.<\/p>\n<p>Cela a \u00e9t\u00e9 l\u2019occasion de commencer \u00e0 cr\u00e9er des\u00a0<a href=\"https:\/\/blog.zenika.com\/2017\/01\/24\/pull-request-demystifie\/\" target=\"_blank\" rel=\"noopener\">pull request<\/a>\u00a0internes afin de faciliter ce travail de revue, et de permettre une int\u00e9gration meilleure de la fonctionnalit\u00e9 dans l\u2019historique Git. Sur cette version 2.7.0\u00a0<a href=\"https:\/\/github.com\/Combodo\/iTop\/pulls?q=is%3Aclosed+is%3Apr+label%3Ainternal+milestone%3A2.7.0+\">16 pull request internes<\/a>\u00a0ont ainsi \u00e9t\u00e9 int\u00e9gr\u00e9es !<\/p>\n<h3 dir=\"auto\">Tests automatis\u00e9s<\/h3>\n<p>Avec le d\u00e9veloppement de la version 2.7, les tests\u00a0<a href=\"https:\/\/phpunit.de\/\">PHPUnit<\/a>\u00a0qui \u00e9taient balbutiants chez Combodo ont connu un essor important puisque l\u2019on est pass\u00e9 de quelques dizaines de tests \u00e0 plusieurs milliers !<br \/>\nDe plus les tests qui \u00e9taient seulement manuels jusque l\u00e0 ont \u00e9t\u00e9 automatis\u00e9s \u00e0 l\u2019aide de Jenkins et sont lanc\u00e9s \u00e0 chaque commit pour une partie d\u2019entre eux, et quotidiennement pour l\u2019ensemble.<\/p>\n<p>Pour compl\u00e9ter ces tests PHPUnit (qui couvrent essentiellement des fonctions du c\u0153ur d\u2019iTop), des tests de l\u2019interface graphique ont aussi \u00e9t\u00e9 r\u00e9alis\u00e9s \u00e0 l\u2019aide de\u00a0<a href=\"https:\/\/behat.org\/\">Behat<\/a>\u00a0et \u00e9galement ex\u00e9cut\u00e9s quotidiennement.<\/p>\n<p>Cette couche bien plus importante de tests a grandement facilit\u00e9 la vie et donn\u00e9 confiance \u00e0 l\u2019\u00e9quipe qualit\u00e9 en charge de la validation du produit.<\/p>\n<h2>Pr\u00e9voir le futur<\/h2>\n<p>Une fois cette organisation mise en place, il faut la p\u00e9renniser, et il faut \u00e9galement anticiper le futur et les \u00e9volutions notamment technologiques qui font partie des challenges importants d\u2019une LTS.<\/p>\n<h3>Plage de compatibilit\u00e9 PHP<\/h3>\n<p>Le\u00a0<a href=\"https:\/\/www.php.net\/supported-versions.php\">calendrier des versions support\u00e9es de PHP<\/a>\u00a0\u00e9voluant vite, il faut concilier des aspects contradictoires :<\/p>\n<ul>\n<li>Permettre \u00e0 une majorit\u00e9 de clients de pouvoir basculer sur notre version LTS sans avoir \u00e0 mettre \u00e0 jour leur infrastructure, et donc supporter une version minimale assez basse<\/li>\n<li>Ne pas choisir une version minimale trop basse consid\u00e9rant que vu le rythme de d\u00e9veloppement de PHP, nombre de librairies que nous embarquons dans iTop allaient sans doute monter leur version minimale support\u00e9e rapidement<\/li>\n<li>Supporter la version la plus r\u00e9cente de PHP<\/li>\n<\/ul>\n<p>En cons\u00e9quence, nous avons retenu une plage allant de<strong>\u00a0PHP 5.6 comme version minimale \u00e0 7.4<\/strong>\u00a0comme version maximale.<\/p>\n<h3>MySQL 8<\/h3>\n<p>La sortie de MySQL 8.0 a aussi fait planer un doute sur les performances d\u2019iTop puisqu\u2019une des modifications importantes de cette version \u00e9tait la suppression du cache de requ\u00eates. Nous avons consid\u00e9r\u00e9 qu\u2019impl\u00e9menter un cache de requ\u00eates SQL dans iTop \u00e9tait en dehors du p\u00e9rim\u00e8tre de l\u2019application, mais nous avons malgr\u00e9 tout rendu iTop compatible avec cette version !<\/p>\n<p>Nous avons ainsi d\u00fb intervenir sur plusieurs aspects :<\/p>\n<ul>\n<li>Les noms de colonnes toujours renvoy\u00e9s en majuscule \u00e0 partir de MySQL 8 (auparavant, c\u2019\u00e9tait avec la casse utilis\u00e9e dans la clause SELECT)<\/li>\n<li>Mauvaise d\u00e9tection de mysqldump : on contr\u00f4lait la version du programme pour valider le support de utf8mb4 (charset g\u00e9n\u00e9ralis\u00e9 en iTop 2.5.0) et ce code n\u2019\u00e9tait plus fonctionnel avec MySQL 8\u2026 Nous utilisons maintenant la version de la base de donn\u00e9es plut\u00f4t que celle de l\u2019outil<\/li>\n<li>G\u00e9n\u00e9ration de valeurs en double dans Ticket.ref : le syst\u00e8me s\u2019appuyait sur la valeur d\u2019incr\u00e9mentation automatique, mais celle-ci est mise en cache dans MySQL8\u2026 Nous avons donc mis en place\u00a0<a href=\"https:\/\/www.itophub.io\/wiki\/page?id=2_7_0:release:2_7_whats_new#ticket_ref_generation\">un nouveau syst\u00e8me<\/a>\u00a0avec un compteur g\u00e9n\u00e9rique\u00a0<a href=\"https:\/\/github.com\/Combodo\/iTop\/blob\/2.7.0\/core\/counter.class.inc.php\">ItopCounter<\/a>.<\/li>\n<\/ul>\n<p>Les incompatibilit\u00e9s ayant \u00e9t\u00e9 corrig\u00e9es, nous avons men\u00e9 des tests de performance qui ont confirm\u00e9 l\u2019impact tr\u00e8s n\u00e9gatif de la disparition du cache de requ\u00eates.<br \/>\nEn cons\u00e9quence une communication sp\u00e9cifique a \u00e9t\u00e9 faite pour pr\u00e9venir nos utilisateurs sur ces probl\u00e8mes de performances avec MySQL 8, et leur conseiller de privil\u00e9gier une version ant\u00e9rieure du serveur de base de donn\u00e9es.<\/p>\n<h3>Gestion des d\u00e9pendances<\/h3>\n<p>iTop embarque plusieurs librairies PHP. Ces librairies \u00e9taient auparavant g\u00e9r\u00e9es manuellement. La version LTS \u00e9tant planifi\u00e9e pour durer plus longtemps il nous a fallu un m\u00e9canisme efficace pour g\u00e9rer les failles de s\u00e9curit\u00e9 et bug dans ces librairies. Nous avons naturellement choisi <a href=\"https:\/\/getcomposer.org\/\">Composer<\/a>, un outil tr\u00e8s r\u00e9pandu dans le monde PHP et qui a fait ses preuves.<br \/>\nNous avons ensuite men\u00e9 un travail d\u2019inventaire, puis pour chaque librairie v\u00e9rifi\u00e9 s\u2019il y avait lieu de la mettre \u00e0 jour.<\/p>\n<p>La pr\u00e9sence du fichier\u00a0<a href=\"https:\/\/github.com\/Combodo\/iTop\/blob\/2.7.0\/composer.json\">composer.json dans notre d\u00e9p\u00f4t<\/a>\u00a0nous apporte de\u00a0<strong>l\u2019efficacit\u00e9<\/strong>\u00a0gr\u00e2ce au support par notre outil de d\u00e9veloppement PHPStorm, et assure \u00e9galement de\u00a0<strong>ne pas manquer d\u2019informations importantes<\/strong>\u00a0gr\u00e2ce \u00e0 l\u2019outil\u00a0<a href=\"https:\/\/docs.github.com\/en\/code-security\/dependabot\">Dependabot<\/a>\u00a0int\u00e9gr\u00e9 \u00e0 GitHub.<\/p>\n<p>Nous avons aussi adapt\u00e9 nos processus pour ajouter, avant chaque version majeure, une nouvelle phase\u00a0<strong>\u00ab\u00a0fondations\u00a0\u00bb<\/strong>\u00a0incluant en particulier la v\u00e9rification des librairies et leur mise \u00e0 jour.<\/p>\n<h4>Silex vers Symfony<\/h4>\n<p>Nous avons d\u00fb remplacer la librairie Silex (arriv\u00e9e en\u00a0<a href=\"https:\/\/symfony.com\/blog\/the-end-of-silex\">fin de maintenance en juin 2018<\/a>) par\u00a0<a href=\"https:\/\/symfony.com\/releases\" target=\"_blank\" rel=\"noopener\">Symfony<\/a>. Cette nouvelle librairie a aussi un calendrier de support calqu\u00e9 sur PHP. Nous \u00e9tions donc limit\u00e9 sur la version Symfony utilisable dans iTop 2.7.0.<\/p>\n<p>Silex a donc \u00e9t\u00e9 remplac\u00e9e par Symfony 3 tout en pr\u00e9voyant le passage \u00e0 Symfony 4 et 5.<\/p>\n<h3>Politique de d\u00e9pr\u00e9ciation \/ suppression des API<\/h3>\n<p>Une bonne partie du code d\u2019iTop est constitu\u00e9 d\u2019API : effectivement, les cr\u00e9ateurs d\u2019extensions utilisent beaucoup de nos classes et m\u00e9thodes ! Or si l\u2019\u00e9quipe de d\u00e9veloppement Combodo a besoin de pouvoir restructurer parfois le code de iTop, il faut aussi garantir de la stabilit\u00e9 \u00e0 ces d\u00e9veloppeurs, et faciliter les migrations des extensions.<\/p>\n<p>Nous avons donc men\u00e9 plusieurs chantiers :<\/p>\n<ul>\n<li>clairement identifier les classes et m\u00e9thodes qui sont des API (avec le\u00a0<a href=\"https:\/\/docs.phpdoc.org\/guide\/references\/phpdoc\/tags\/api.html#api\">tag phpdoc @api<\/a>) et celles qui ne doivent pas \u00eatre utilis\u00e9es ailleurs que dans le code iTop (<a href=\"https:\/\/docs.phpdoc.org\/guide\/references\/phpdoc\/tags\/internal.html#internal\">@internal<\/a>)<\/li>\n<li><strong>automatiser la documentation de ces API<\/strong>\u00a0: cela a \u00e9t\u00e9 fait avec\u00a0<a href=\"https:\/\/github.com\/Combodo\/iTop\/tree\/2.7.0\/.doc\">quelques scripts<\/a>, et publi\u00e9\u00a0<a href=\"https:\/\/www.itophub.io\/wiki\/page?id=latest:customization:extensions_api#interfaces_reference_documentation\">sur le wiki<\/a><\/li>\n<li>lorsqu\u2019une partie de l\u2019API doit \u00eatre modifi\u00e9e, avoir une\u00a0<strong>politique solide de d\u00e9pr\u00e9ciation \/ suppression<\/strong>\u00a0: l\u2019ancien code reste pr\u00e9sent dans la version N mais est marqu\u00e9 comme \u00e9tant d\u00e9pr\u00e9ci\u00e9, et il sera supprim\u00e9 dans une version ult\u00e9rieure<\/li>\n<\/ul>\n<p>Les m\u00e9thodes d\u00e9pr\u00e9ci\u00e9es sont marqu\u00e9es avec le tag\u00a0<strong>phpdoc @deprecated<\/strong>, avec l\u2019indication de la version de iTop o\u00f9 cela a \u00e9t\u00e9 fait et autant que possible une indication sur le code \u00e0 utiliser \u00e0 la place. Pour chacune des d\u00e9pr\u00e9ciations, un ticket de suppression est saisi et planifi\u00e9 pour une des prochaines versions d\u2019iTop. L\u2019ensemble est document\u00e9 dans les notes de migration (exemple pour la 2.7.0 dans\u00a0<a href=\"https:\/\/www.itophub.io\/wiki\/page?id=2_7_0:release:2_7_whats_new#deprecations\">un chapitre du What\u2019s new<\/a>, et pour la 3.0.0 dans\u00a0<a href=\"https:\/\/www.itophub.io\/wiki\/page?id=3_0_0:release:developer\">une page d\u00e9di\u00e9e<\/a>).<\/p>\n<p>Par exemple la documentation de la m\u00e9thode \\DBObject::DBInsertTracked a \u00e9t\u00e9 modifi\u00e9e pour iTop 2.7.0 :<\/p>\n<div id=\"0\" class=\"wp-block-codemirror-blocks code-block \">\n<div class=\"CodeMirror CodeMirror-simplescroll cm-s-material\">\n<div><\/div>\n<div class=\"CodeMirror-simplescroll-horizontal\">\n<div><\/div>\n<\/div>\n<div class=\"CodeMirror-scroll\" tabindex=\"-1\">\n<div class=\"CodeMirror-sizer\">\n<div>\n<div class=\"CodeMirror-lines\" role=\"presentation\">\n<div role=\"presentation\">\n<div class=\"CodeMirror-measure\"><\/div>\n<div class=\"CodeMirror-measure\"><\/div>\n<div><\/div>\n<div class=\"CodeMirror-cursors\">\n<div class=\"CodeMirror-cursor\"><\/div>\n<\/div>\n<div class=\"CodeMirror-code\" role=\"presentation\">\n<pre class=\" CodeMirror-line \" role=\"presentation\"><span role=\"presentation\">    <span class=\"cm-comment\">\/**<\/span><\/span><\/pre>\n<pre class=\" CodeMirror-line \" role=\"presentation\"><span role=\"presentation\">     <span class=\"cm-comment\">* @internal<\/span><\/span><\/pre>\n<pre class=\" CodeMirror-line \" role=\"presentation\"><span role=\"presentation\">     <span class=\"cm-comment\">*<\/span><\/span><\/pre>\n<pre class=\" CodeMirror-line \" role=\"presentation\"><span role=\"presentation\">     <span class=\"cm-comment\">* @deprecated 2.7.0 N\u00b02361 simply use {@see DBObject::DBInsert()} instead, that will automatically create and persist a CMDBChange object.<\/span><\/span><\/pre>\n<pre class=\" CodeMirror-line \" role=\"presentation\"><span role=\"presentation\">     <span class=\"cm-comment\">*    If you need to persist your own, call {@see CMDBObject::SetCurrentChange()} before.<\/span><\/span><\/pre>\n<pre class=\" CodeMirror-line \" role=\"presentation\"><span role=\"presentation\">     <span class=\"cm-comment\">*<\/span><\/span><\/pre>\n<pre class=\" CodeMirror-line \" role=\"presentation\"><span role=\"presentation\">     <span class=\"cm-comment\">* @param CMDBChange $oChange<\/span><\/span><\/pre>\n<pre class=\" CodeMirror-line \" role=\"presentation\"><span role=\"presentation\">     <span class=\"cm-comment\">*<\/span><\/span><\/pre>\n<pre class=\" CodeMirror-line \" role=\"presentation\"><span role=\"presentation\">     <span class=\"cm-comment\">* @return int|null<\/span><\/span><\/pre>\n<pre class=\" CodeMirror-line \" role=\"presentation\"><span role=\"presentation\">     <span class=\"cm-comment\">* @throws CoreException<\/span><\/span><\/pre>\n<pre class=\" CodeMirror-line \" role=\"presentation\"><span role=\"presentation\">     <span class=\"cm-comment\">*\/<\/span><\/span><\/pre>\n<pre class=\" CodeMirror-line \" role=\"presentation\"><span role=\"presentation\">    <span class=\"cm-keyword\">public<\/span> <span class=\"cm-keyword\">function<\/span> <span class=\"cm-def\">DBInsertTracked<\/span>(<span class=\"cm-variable\">CMDBChange<\/span> <span class=\"cm-variable-2\">$oChange<\/span>)<\/span><\/pre>\n<pre class=\" CodeMirror-line \" role=\"presentation\"><span role=\"presentation\">\u200b<\/span><\/pre>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<div><\/div>\n<\/div>\n<\/div>\n<\/div>\n<p>Et cette m\u00e9thode DBObject::DBInsertTracked a \u00e9t\u00e9 supprim\u00e9e en 3.0.0 (commit\u00a0<a href=\"https:\/\/github.com\/Combodo\/iTop\/commit\/80161b909e9e5d253d5c349f5c7ef0ade4ba1c3d\">80161b9<\/a>).<\/p>\n<h2>Am\u00e9liorer la s\u00e9curit\u00e9, maintenant et demain !<\/h2>\n<h3 dir=\"auto\">Audit de s\u00e9curit\u00e9<\/h3>\n<p>Plusieurs de nos clients avaient fait r\u00e9aliser un audit de s\u00e9curit\u00e9 par un cabinet externe pour leur propre version d\u2019iTop et nous avaient remont\u00e9 quelques failles.<\/p>\n<p>Nous avons pris la d\u00e9cision de faire r\u00e9aliser un\u00a0<strong>audit de s\u00e9curit\u00e9 sur la version beta de la 2.7.0<\/strong>\u00a0pour identifier et aider \u00e0 la correction du maximum de failles avant la sortie officielle de iTop 3.0.0.<\/p>\n<h3 dir=\"auto\">Public security policy<\/h3>\n<p dir=\"auto\">Afin que les failles soient remont\u00e9es au plus vite et corrig\u00e9es le mieux possible, nous avons aussi d\u00e9fini ensemble puis\u00a0<strong>publi\u00e9 notre politique de s\u00e9curit\u00e9<\/strong>\u00a0sur nos d\u00e9p\u00f4ts GitHub (pas exemple\u00a0<a href=\"https:\/\/github.com\/Combodo\/iTop\/blob\/develop\/SECURITY.md\">ici sur iTop<\/a>).<\/p>\n<p dir=\"auto\">Les failles sont publi\u00e9es 3 mois apr\u00e8s la sortie de la premi\u00e8re version contenant la correction afin de permettre \u00e0 nos utilisateurs et clients de mettre \u00e0 jour leurs instances. La publication est effectu\u00e9e par le biais de\u00a0<a href=\"https:\/\/github.com\/Combodo\/iTop\/security\/advisories\">GitHub security advisories<\/a>\u00a0et de CVE.<\/p>\n<p dir=\"auto\">L\u2019audit de s\u00e9curit\u00e9 et la remont\u00e9e des failles gr\u00e2ce \u00e0 la politique mise en \u0153uvre ont permis de corriger\u00a0<strong>30 probl\u00e8mes de s\u00e9curit\u00e9 sur la version 2.7.0<\/strong>.<\/p>\n<h3 dir=\"auto\">Extension Brute force protection<\/h3>\n<p>Cette extension a \u00e9t\u00e9 ajout\u00e9e aux packages souscription (iTop Professional et Essential) pour prot\u00e9ger l\u2019application des attaques par force brute sur les mots de passe. C\u2019est en effet une attaque connue sur les application web accessibles sur internet.<\/p>\n<p dir=\"auto\">Une attaque par force brute est ainsi d\u00e9finie par Wikipedia :<\/p>\n<blockquote>\n<p dir=\"auto\">L\u2019<b>attaque par force brute<\/b>\u00a0est une m\u00e9thode utilis\u00e9e en\u00a0<a title=\"Cryptanalyse\" href=\"https:\/\/fr.wikipedia.org\/wiki\/Cryptanalyse\">cryptanalyse<\/a>\u00a0pour\u00a0<a title=\"Cassage de mot de passe\" href=\"https:\/\/fr.wikipedia.org\/wiki\/Cassage_de_mot_de_passe\">trouver un mot de passe<\/a>\u00a0ou une\u00a0<a title=\"Cl\u00e9 de chiffrement\" href=\"https:\/\/fr.wikipedia.org\/wiki\/Cl%C3%A9_de_chiffrement\">cl\u00e9<\/a>. Il s\u2019agit de tester, une \u00e0 une, toutes les combinaisons possibles.<\/p>\n<p dir=\"auto\"><em>.Source\u00a0<a href=\"https:\/\/fr.wikipedia.org\/wiki\/Attaque_par_force_brute\">https:\/\/fr.wikipedia.org\/wiki\/Attaque_par_force_brute<\/a><\/em><\/p>\n<\/blockquote>\n<p dir=\"auto\">L\u2019extension limite le nombre d\u2019essais possibles pour la connexion, ce qui emp\u00eache ce type d\u2019attaque. Elle propose aussi de nombreuses autres protections (filtrage par IP, captcha, \u2026) comme l\u2019indique\u00a0<a href=\"https:\/\/www.itophub.io\/wiki\/page?id=extensions:itop-fence\">sa documentation<\/a>.<\/p>\n<h3 dir=\"auto\">Password policy<\/h3>\n<p>Pour compliquer encore le travail des hackers, il ne faut pas autoriser les utilisateurs de l\u2019application \u00e0 avoir des mots de passe trop courts ou trop simples. L\u2019authentification locale a \u00e9t\u00e9 modifi\u00e9e pour permettre de contr\u00f4ler les mots de passe et \u00e9viter la validation de mots de passe trop simples et non s\u00e9curis\u00e9s. Plus de d\u00e9tails dans le What\u2019s new iTop 2.7.0 :\u00a0<a href=\"https:\/\/wiki.combodo.com\/doku.php?id=2_7_0:release:2_7_whats_new#password_policy\">Password Policy<\/a><\/p>\n<h2 dir=\"auto\">Fonctionnalit\u00e9s<\/h2>\n<p>Certaines\u00a0<a href=\"https:\/\/www.itophub.io\/wiki\/page?id=2_7_0%3Arelease%3A2_7_whats_new\" target=\"_blank\" rel=\"noopener\">fonctionnalit\u00e9s<\/a>\u00a0devaient \u00eatre r\u00e9alis\u00e9es absolument dans cette LTS. Effectivement il nous fallait :<\/p>\n<ul>\n<li>rendre la maintenance et le support les plus simples possible,<\/li>\n<li>assurer la meilleure des int\u00e9grations aux SI des utilisateurs,<\/li>\n<li>proposer toutes les API pour les auteurs d\u2019extension.<\/li>\n<\/ul>\n<p>Voici ci-dessous quelques exemples de fonctionnalit\u00e9s r\u00e9alis\u00e9es pour remplir ces objectifs :<\/p>\n<h3 dir=\"auto\"><a id=\"user-content-extensibilit\u00e9-login\" class=\"anchor\" href=\"https:\/\/github.com\/Combodo\/faf_blog\/blob\/feature\/2.7-lts\/itop-2.7-lts-v2.md#extensibilit%C3%A9-login\" aria-hidden=\"true\"><\/a>Extensibilit\u00e9 login<\/h3>\n<p dir=\"auto\">Puisque cette version est pr\u00e9vue pour durer, il a fallu pr\u00e9voir l\u2019extensibilit\u00e9 de certaines parties. La page de connexion a fait parti des am\u00e9liorations apport\u00e9es \u00e0 la version 2.7.0.<\/p>\n<p dir=\"auto\">Nous avons ajout\u00e9 les fonctionnalit\u00e9s suivantes :<\/p>\n<ul>\n<li dir=\"auto\">Passage de la page de connexion sous un format\u00a0<a href=\"https:\/\/twig.symfony.com\/doc\/\">Twig<\/a>\u00a0ce qui permet d\u2019en modifier l\u2019aspect visuel.<\/li>\n<li dir=\"auto\">Restructuration de la logique de connexion pour permettre l\u2019ajout de nouveaux types de connexion (SSO notamment avec OAuth)<\/li>\n<li dir=\"auto\">Permettre de nouveaux contr\u00f4les pour la s\u00e9curit\u00e9 (comme\u00a0<a href=\"https:\/\/www.itophub.io\/wiki\/page?id=extensions:itop-fence\">Brute Force Protection<\/a>\u00a0contre les attaques de force brute)<\/li>\n<li dir=\"auto\">Permettre d\u2019ajouter plus tard des contr\u00f4les de connexion comme le\u00a0<a href=\"https:\/\/fr.wikipedia.org\/wiki\/Double_authentification\">2FA<\/a>\u00a0ou les\u00a0<a href=\"https:\/\/fr.wikipedia.org\/wiki\/CAPTCHA\">captchas<\/a><\/li>\n<\/ul>\n<div class=\"snippet-clipboard-content position-relative overflow-auto\">\n<h3 dir=\"auto\"><a id=\"user-content--supportabilit\u00e9\" class=\"anchor\" href=\"https:\/\/github.com\/Combodo\/faf_blog\/blob\/feature\/2.7-lts\/itop-2.7-lts-v2.md#-supportabilit%C3%A9\" aria-hidden=\"true\"><\/a>Supportabilit\u00e9<\/h3>\n<p>Pour pouvoir assurer le support de la version LTS pendant un temps assez long, il faut que l\u2019\u00e9quipe support ait des outils int\u00e9gr\u00e9s \u00e0 iTop pour leur permettre de gagner en efficacit\u00e9. Un effort tout particulier a \u00e9t\u00e9 fait dans ce domaine.<\/p>\n<ul>\n<li dir=\"auto\"><strong>Log management<\/strong>\u00a0permet aux clients qui appellent le support d\u2019acc\u00e9der aux logs de l\u2019application directement depuis iTop (et m\u00eame de les envoyer \u00e0 Combodo) sans avoir \u00e0 se connecter au syst\u00e8me comme dans les pr\u00e9c\u00e9dentes versions.<\/li>\n<li dir=\"auto\"><strong>System information<\/strong>\u00a0permet d\u2019acc\u00e9der \u00e0 l\u2019\u00e9tat de l\u2019application et aux param\u00e8tres importants du syst\u00e8me, il est m\u00eame possible de r\u00e9cup\u00e9rer un rapport \u00e0 envoyer \u00e0 l\u2019\u00e9quipe support de Combodo.<\/li>\n<li dir=\"auto\"><strong>Database integrity<\/strong>\u00a0 permet de contr\u00f4ler l\u2019int\u00e9grit\u00e9 de la base de donn\u00e9e pour \u00e9viter les dysfonctionnements de l\u2019application.<\/li>\n<li dir=\"auto\"><a href=\"https:\/\/www.itophub.io\/wiki\/page?id=2_7_0%3Aadmin%3Acore-update\" target=\"_blank\" rel=\"noopener\"><strong>Application Upgrade<\/strong><\/a>\u00a0permet de faire les mises \u00e0\u00a0 jour des versions mineures de mani\u00e8re contr\u00f4l\u00e9e directement depuis l\u2019application. Cela facilite l\u2019adoption des versions mineures (de maintenance) de la LTS par les clients. Il est important pour Combodo que les clients soient le plus possible dans la version la plus r\u00e9cente de la LTS pour diminuer les demandes \u00e0 l\u2019\u00e9quipe support.<\/li>\n<\/ul>\n<\/div>\n<h2 dir=\"auto\"><a id=\"user-content-choose-the-features\" class=\"anchor\" href=\"https:\/\/github.com\/Combodo\/faf_blog\/blob\/feature\/2.7-lts\/itop-2.7-lts-v2.md#choose-the-features\" aria-hidden=\"true\"><\/a>Performance<\/h2>\n<h3 dir=\"auto\"><a id=\"user-content-perf-g\u00e9n\u00e9ration-sql\" class=\"anchor\" href=\"https:\/\/github.com\/Combodo\/faf_blog\/blob\/feature\/2.7-lts\/itop-2.7-lts-v2.md#perf-g%C3%A9n%C3%A9ration-sql\" aria-hidden=\"true\"><\/a>G\u00e9n\u00e9ration SQL<\/h3>\n<p>L\u2019application iTop utilise, pour manipuler les donn\u00e9es du client, un langage de requ\u00eates propre \u00e0 iTop, l\u2019OQL (<a href=\"https:\/\/www.itophub.io\/wiki\/page?id=latest%3Aoql%3Astart\">Object Query Language<\/a>). Ce langage permet d\u2019acc\u00e9der au donn\u00e9es en effectuant des requ\u00eates sur les objets \u00e0 la mani\u00e8re du langage SQL. Le c\u0153ur d\u2019iTop convertit ensuite l\u2019OQL en SQL pour effectuer les traitements attendus par l\u2019utilisateur.<\/p>\n<p>Avant iTop 2.7, le m\u00e9canisme utilis\u00e9 pour la g\u00e9n\u00e9ration de ces requ\u00eates SQL garantissait la coh\u00e9rence des donn\u00e9es remont\u00e9es dans les r\u00e9sultats, ce qui \u00e9tait rassurant pour l\u2019utilisateur, mais au prix de performances d\u00e9grad\u00e9es. Nous devions faire face aux questions de nos clients au moindre soucis de performance.<\/p>\n<p>Cette partie de l\u2019application a \u00e9t\u00e9 revue avec comme objectifs d\u2019am\u00e9liorer la maintenabilit\u00e9, gr\u00e2ce \u00e0 une architecture plus explicite, et la performance de la g\u00e9n\u00e9ration des requ\u00eates SQL, avec un gain en nombre de\u00a0<a href=\"https:\/\/sql.sh\/cours\/jointures\">jointures<\/a>\u00a0(pouvant se monter \u00e0 plusieurs dizaines sur les op\u00e9rations de d\u00e9nombrement).<\/p>\n<p>Le choix de l\u2019optimisation s\u2019est fait au d\u00e9triment de la garantie de coh\u00e9rence des r\u00e9sultats, puisque les requ\u00eates ne vont plus chercher exhaustivement dans toutes les tables composant les objets du\u00a0<a href=\"https:\/\/manage-wiki.openitop.org\/doku.php?id=2_7_0:datamodel:start\">mod\u00e8le de donn\u00e9es<\/a>\u00a0du client, mais seulement les tables n\u00e9cessaires \u00e0 la r\u00e9ponse. Malgr\u00e9 tout, m\u00eame si les optimisations d\u00e9pendent grandement de la complexit\u00e9 des requ\u00eates OQL, un gain important sur l\u2019ex\u00e9cution des requ\u00eates en base a \u00e9t\u00e9 constat\u00e9.<\/p>\n<p>Ce compromis entre la performance et la coh\u00e9rence des r\u00e9sultats, a \u00e9t\u00e9 fait en sachant qu\u2019un outil de contr\u00f4le de coh\u00e9rence de la base \u00ab\u00a0<strong>Database integrity<\/strong>\u00a0\u00bb \u00e9tait fourni en standard dans l\u2019application.<\/p>\n<p>Ce changement a \u00e9t\u00e9 rendu possible par l\u2019ajout de tests unitaires qui ont permis de garantir que le comportement (le r\u00e9sultat des requ\u00eates) \u00e9tait identique \u00e0 la version 2.6.<\/p>\n<h2>Conclusion<\/h2>\n<p>En faisant ici la liste de toutes les \u00e9volutions \u00e0 la fois sur notre organisation, nos m\u00e9thodes, mais \u00e9galement les choix techniques concernant la solution r\u00e9alis\u00e9s pour la Long-term Support, nous r\u00e9alisons facilement l\u2019impact d\u2019un tel projet sur les \u00e9quipes Combodo et la solution iTop.<\/p>\n<p>iTop 2.7 fonctionne donc depuis 2 ans d\u00e9sormais, seule LTS en parall\u00e8le des versions STS comme iTop 3.0 et utilis\u00e9e par plus de la moiti\u00e9 de nos clients. Apr\u00e8s tout ce temps, il nous a sembl\u00e9 utile de terminer cette s\u00e9rie d\u2019articles par un retour d\u2019exp\u00e9rience sur le d\u00e9ploiement et le fonctionnement \u00e0 post\u00e9riori, en vue de pr\u00e9parer les prochaines versions d\u2019iTop.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Deuxi\u00e8me partie : comment Combodo s\u2019est organis\u00e9 pour s\u2019adapter au mod\u00e8le STS-LTS Dans l\u2019article pr\u00e9c\u00e9dent, vous avez pu appr\u00e9hender les nombreux avantages \u00e0 combiner des versions Long-term et Short-term support : \u00eatre flexible et \u00e9volutif tout en garantissant de la stabilit\u00e9 \u00e0 nos clients, minimiser les co\u00fbts de support et de d\u00e9veloppement tout en garantissant [&hellip;]<\/p>\n","protected":false},"author":23,"featured_media":6381,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"_et_pb_use_builder":"","_et_pb_old_content":"","_et_gb_content_width":"","content-type":"","footnotes":""},"categories":[130],"tags":[144],"class_list":["post-6379","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-itop-fr","tag-lts-fr"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.4 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Organisation interne \u00ab Long-term \u00bb pour une version LTS au top<\/title>\n<meta name=\"description\" content=\"Combining LTS and STS releases of iTop requires adapting the internal organization, development methods and technology. Let&#039;s see how.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/combodo.com\/fr\/itop-fr\/organisation-interne-long-term-pour-une-version-lts-au-top\/\" \/>\n<meta property=\"og:locale\" content=\"fr_FR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Organisation interne \u00ab Long-term \u00bb pour une version LTS au top\" \/>\n<meta property=\"og:description\" content=\"Combining LTS and STS releases of iTop requires adapting the internal organization, development methods and technology. Let&#039;s see how.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/combodo.com\/fr\/itop-fr\/organisation-interne-long-term-pour-une-version-lts-au-top\/\" \/>\n<meta property=\"og:site_name\" content=\"iTop\" \/>\n<meta property=\"article:published_time\" content=\"2022-08-03T18:38:38+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2025-12-09T15:42:48+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/combodo.com\/wp-content\/uploads\/2022\/08\/LTS-STS3-600x400px.png\" \/>\n\t<meta property=\"og:image:width\" content=\"600\" \/>\n\t<meta property=\"og:image:height\" content=\"400\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"Eric Espi\u00e9\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Eric Espi\u00e9\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"14 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/combodo.com\\\/fr\\\/itop-fr\\\/organisation-interne-long-term-pour-une-version-lts-au-top\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/combodo.com\\\/fr\\\/itop-fr\\\/organisation-interne-long-term-pour-une-version-lts-au-top\\\/\"},\"author\":{\"name\":\"Eric Espi\u00e9\",\"@id\":\"https:\\\/\\\/combodo.com\\\/#\\\/schema\\\/person\\\/15f31c14d7a66019b61c8dd3bf88a0c1\"},\"headline\":\"Organisation interne \u00ab Long-term \u00bb pour une version LTS au top\",\"datePublished\":\"2022-08-03T18:38:38+00:00\",\"dateModified\":\"2025-12-09T15:42:48+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/combodo.com\\\/fr\\\/itop-fr\\\/organisation-interne-long-term-pour-une-version-lts-au-top\\\/\"},\"wordCount\":3300,\"publisher\":{\"@id\":\"https:\\\/\\\/combodo.com\\\/#organization\"},\"image\":{\"@id\":\"https:\\\/\\\/combodo.com\\\/fr\\\/itop-fr\\\/organisation-interne-long-term-pour-une-version-lts-au-top\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/combodo.com\\\/wp-content\\\/uploads\\\/2022\\\/08\\\/LTS-STS3-600x400px.png\",\"keywords\":[\"LTS\"],\"articleSection\":[\"iTop\"],\"inLanguage\":\"fr-FR\"},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/combodo.com\\\/fr\\\/itop-fr\\\/organisation-interne-long-term-pour-une-version-lts-au-top\\\/\",\"url\":\"https:\\\/\\\/combodo.com\\\/fr\\\/itop-fr\\\/organisation-interne-long-term-pour-une-version-lts-au-top\\\/\",\"name\":\"Organisation interne \u00ab Long-term \u00bb pour une version LTS au top\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/combodo.com\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/combodo.com\\\/fr\\\/itop-fr\\\/organisation-interne-long-term-pour-une-version-lts-au-top\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/combodo.com\\\/fr\\\/itop-fr\\\/organisation-interne-long-term-pour-une-version-lts-au-top\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/combodo.com\\\/wp-content\\\/uploads\\\/2022\\\/08\\\/LTS-STS3-600x400px.png\",\"datePublished\":\"2022-08-03T18:38:38+00:00\",\"dateModified\":\"2025-12-09T15:42:48+00:00\",\"description\":\"Combining LTS and STS releases of iTop requires adapting the internal organization, development methods and technology. Let's see how.\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/combodo.com\\\/fr\\\/itop-fr\\\/organisation-interne-long-term-pour-une-version-lts-au-top\\\/#breadcrumb\"},\"inLanguage\":\"fr-FR\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/combodo.com\\\/fr\\\/itop-fr\\\/organisation-interne-long-term-pour-une-version-lts-au-top\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"fr-FR\",\"@id\":\"https:\\\/\\\/combodo.com\\\/fr\\\/itop-fr\\\/organisation-interne-long-term-pour-une-version-lts-au-top\\\/#primaryimage\",\"url\":\"https:\\\/\\\/combodo.com\\\/wp-content\\\/uploads\\\/2022\\\/08\\\/LTS-STS3-600x400px.png\",\"contentUrl\":\"https:\\\/\\\/combodo.com\\\/wp-content\\\/uploads\\\/2022\\\/08\\\/LTS-STS3-600x400px.png\",\"width\":600,\"height\":400,\"caption\":\"LTS\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/combodo.com\\\/fr\\\/itop-fr\\\/organisation-interne-long-term-pour-une-version-lts-au-top\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/combodo.com\\\/fr\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Organisation interne \u00ab Long-term \u00bb pour une version LTS au top\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/combodo.com\\\/#website\",\"url\":\"https:\\\/\\\/combodo.com\\\/\",\"name\":\"iTop, easy service management\",\"description\":\"Easy service management\",\"publisher\":{\"@id\":\"https:\\\/\\\/combodo.com\\\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/combodo.com\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"fr-FR\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/combodo.com\\\/#organization\",\"name\":\"iTop\",\"url\":\"https:\\\/\\\/combodo.com\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"fr-FR\",\"@id\":\"https:\\\/\\\/combodo.com\\\/#\\\/schema\\\/logo\\\/image\\\/\",\"url\":\"https:\\\/\\\/combodo.com\\\/wp-content\\\/uploads\\\/2025\\\/06\\\/yoast-logo.jpg\",\"contentUrl\":\"https:\\\/\\\/combodo.com\\\/wp-content\\\/uploads\\\/2025\\\/06\\\/yoast-logo.jpg\",\"width\":696,\"height\":696,\"caption\":\"iTop\"},\"image\":{\"@id\":\"https:\\\/\\\/combodo.com\\\/#\\\/schema\\\/logo\\\/image\\\/\"},\"sameAs\":[\"https:\\\/\\\/x.com\\\/iTopByCombodo\",\"https:\\\/\\\/www.youtube.com\\\/@itopbycombodo1800\"]},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/combodo.com\\\/#\\\/schema\\\/person\\\/15f31c14d7a66019b61c8dd3bf88a0c1\",\"name\":\"Eric Espi\u00e9\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"fr-FR\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/458777c26f1a1efdcedc2d0a4b6dfd186a89b11838962e6936347ba0c9425b7c?s=96&d=mm&r=g\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/458777c26f1a1efdcedc2d0a4b6dfd186a89b11838962e6936347ba0c9425b7c?s=96&d=mm&r=g\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/458777c26f1a1efdcedc2d0a4b6dfd186a89b11838962e6936347ba0c9425b7c?s=96&d=mm&r=g\",\"caption\":\"Eric Espi\u00e9\"},\"url\":\"https:\\\/\\\/combodo.com\\\/fr\\\/author\\\/eric-espiecombodo-com\\\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Organisation interne \u00ab Long-term \u00bb pour une version LTS au top","description":"Combining LTS and STS releases of iTop requires adapting the internal organization, development methods and technology. Let's see how.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/combodo.com\/fr\/itop-fr\/organisation-interne-long-term-pour-une-version-lts-au-top\/","og_locale":"fr_FR","og_type":"article","og_title":"Organisation interne \u00ab Long-term \u00bb pour une version LTS au top","og_description":"Combining LTS and STS releases of iTop requires adapting the internal organization, development methods and technology. Let's see how.","og_url":"https:\/\/combodo.com\/fr\/itop-fr\/organisation-interne-long-term-pour-une-version-lts-au-top\/","og_site_name":"iTop","article_published_time":"2022-08-03T18:38:38+00:00","article_modified_time":"2025-12-09T15:42:48+00:00","og_image":[{"width":600,"height":400,"url":"https:\/\/combodo.com\/wp-content\/uploads\/2022\/08\/LTS-STS3-600x400px.png","type":"image\/png"}],"author":"Eric Espi\u00e9","twitter_card":"summary_large_image","twitter_misc":{"Written by":"Eric Espi\u00e9","Est. reading time":"14 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/combodo.com\/fr\/itop-fr\/organisation-interne-long-term-pour-une-version-lts-au-top\/#article","isPartOf":{"@id":"https:\/\/combodo.com\/fr\/itop-fr\/organisation-interne-long-term-pour-une-version-lts-au-top\/"},"author":{"name":"Eric Espi\u00e9","@id":"https:\/\/combodo.com\/#\/schema\/person\/15f31c14d7a66019b61c8dd3bf88a0c1"},"headline":"Organisation interne \u00ab Long-term \u00bb pour une version LTS au top","datePublished":"2022-08-03T18:38:38+00:00","dateModified":"2025-12-09T15:42:48+00:00","mainEntityOfPage":{"@id":"https:\/\/combodo.com\/fr\/itop-fr\/organisation-interne-long-term-pour-une-version-lts-au-top\/"},"wordCount":3300,"publisher":{"@id":"https:\/\/combodo.com\/#organization"},"image":{"@id":"https:\/\/combodo.com\/fr\/itop-fr\/organisation-interne-long-term-pour-une-version-lts-au-top\/#primaryimage"},"thumbnailUrl":"https:\/\/combodo.com\/wp-content\/uploads\/2022\/08\/LTS-STS3-600x400px.png","keywords":["LTS"],"articleSection":["iTop"],"inLanguage":"fr-FR"},{"@type":"WebPage","@id":"https:\/\/combodo.com\/fr\/itop-fr\/organisation-interne-long-term-pour-une-version-lts-au-top\/","url":"https:\/\/combodo.com\/fr\/itop-fr\/organisation-interne-long-term-pour-une-version-lts-au-top\/","name":"Organisation interne \u00ab Long-term \u00bb pour une version LTS au top","isPartOf":{"@id":"https:\/\/combodo.com\/#website"},"primaryImageOfPage":{"@id":"https:\/\/combodo.com\/fr\/itop-fr\/organisation-interne-long-term-pour-une-version-lts-au-top\/#primaryimage"},"image":{"@id":"https:\/\/combodo.com\/fr\/itop-fr\/organisation-interne-long-term-pour-une-version-lts-au-top\/#primaryimage"},"thumbnailUrl":"https:\/\/combodo.com\/wp-content\/uploads\/2022\/08\/LTS-STS3-600x400px.png","datePublished":"2022-08-03T18:38:38+00:00","dateModified":"2025-12-09T15:42:48+00:00","description":"Combining LTS and STS releases of iTop requires adapting the internal organization, development methods and technology. Let's see how.","breadcrumb":{"@id":"https:\/\/combodo.com\/fr\/itop-fr\/organisation-interne-long-term-pour-une-version-lts-au-top\/#breadcrumb"},"inLanguage":"fr-FR","potentialAction":[{"@type":"ReadAction","target":["https:\/\/combodo.com\/fr\/itop-fr\/organisation-interne-long-term-pour-une-version-lts-au-top\/"]}]},{"@type":"ImageObject","inLanguage":"fr-FR","@id":"https:\/\/combodo.com\/fr\/itop-fr\/organisation-interne-long-term-pour-une-version-lts-au-top\/#primaryimage","url":"https:\/\/combodo.com\/wp-content\/uploads\/2022\/08\/LTS-STS3-600x400px.png","contentUrl":"https:\/\/combodo.com\/wp-content\/uploads\/2022\/08\/LTS-STS3-600x400px.png","width":600,"height":400,"caption":"LTS"},{"@type":"BreadcrumbList","@id":"https:\/\/combodo.com\/fr\/itop-fr\/organisation-interne-long-term-pour-une-version-lts-au-top\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/combodo.com\/fr\/"},{"@type":"ListItem","position":2,"name":"Organisation interne \u00ab Long-term \u00bb pour une version LTS au top"}]},{"@type":"WebSite","@id":"https:\/\/combodo.com\/#website","url":"https:\/\/combodo.com\/","name":"iTop, easy service management","description":"Easy service management","publisher":{"@id":"https:\/\/combodo.com\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/combodo.com\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"fr-FR"},{"@type":"Organization","@id":"https:\/\/combodo.com\/#organization","name":"iTop","url":"https:\/\/combodo.com\/","logo":{"@type":"ImageObject","inLanguage":"fr-FR","@id":"https:\/\/combodo.com\/#\/schema\/logo\/image\/","url":"https:\/\/combodo.com\/wp-content\/uploads\/2025\/06\/yoast-logo.jpg","contentUrl":"https:\/\/combodo.com\/wp-content\/uploads\/2025\/06\/yoast-logo.jpg","width":696,"height":696,"caption":"iTop"},"image":{"@id":"https:\/\/combodo.com\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/x.com\/iTopByCombodo","https:\/\/www.youtube.com\/@itopbycombodo1800"]},{"@type":"Person","@id":"https:\/\/combodo.com\/#\/schema\/person\/15f31c14d7a66019b61c8dd3bf88a0c1","name":"Eric Espi\u00e9","image":{"@type":"ImageObject","inLanguage":"fr-FR","@id":"https:\/\/secure.gravatar.com\/avatar\/458777c26f1a1efdcedc2d0a4b6dfd186a89b11838962e6936347ba0c9425b7c?s=96&d=mm&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/458777c26f1a1efdcedc2d0a4b6dfd186a89b11838962e6936347ba0c9425b7c?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/458777c26f1a1efdcedc2d0a4b6dfd186a89b11838962e6936347ba0c9425b7c?s=96&d=mm&r=g","caption":"Eric Espi\u00e9"},"url":"https:\/\/combodo.com\/fr\/author\/eric-espiecombodo-com\/"}]}},"_links":{"self":[{"href":"https:\/\/combodo.com\/fr\/wp-json\/wp\/v2\/posts\/6379","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/combodo.com\/fr\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/combodo.com\/fr\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/combodo.com\/fr\/wp-json\/wp\/v2\/users\/23"}],"replies":[{"embeddable":true,"href":"https:\/\/combodo.com\/fr\/wp-json\/wp\/v2\/comments?post=6379"}],"version-history":[{"count":0,"href":"https:\/\/combodo.com\/fr\/wp-json\/wp\/v2\/posts\/6379\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/combodo.com\/fr\/wp-json\/wp\/v2\/media\/6381"}],"wp:attachment":[{"href":"https:\/\/combodo.com\/fr\/wp-json\/wp\/v2\/media?parent=6379"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/combodo.com\/fr\/wp-json\/wp\/v2\/categories?post=6379"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/combodo.com\/fr\/wp-json\/wp\/v2\/tags?post=6379"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}