Introduction : pourquoi 1C a-t-il besoin de CI/CD ?
Si vous travaillez avec la plateforme 1C, vous avez probablement rencontré une situation où, après une autre mise à jour, quelque chose se casse dans la base de combat, et il n'est pas possible d'annuler rapidement les modifications. Ou lorsque l'équipe de développement travaille sur une configuration et que le code d'un programmeur écrase les modifications d'un autre. Cela vous est familier ?
C'est précisément pour résoudre ces problèmes qu'il existe le CI/CD (Continuous Integration / Continuous Delivery), un ensemble de pratiques qui automatisent le processus de développement, de test et de déploiement de logiciels. Bien que ces approches soient devenues depuis longtemps la norme dans le développement Web, elles ne gagnent en popularité que dans le monde de 1C. Et c'est compréhensible : l'écosystème 1C est spécifique, fonctionne avec ses propres formats de configuration et nécessite une approche particulière du contrôle de version.
Dans cet article, nous allons voir comment construire un pipeline CI/CD simple mais efficace pour 1C, qui automatise les opérations de routine et rend votre travail plus prévisible et plus sûr.
Qu'est-ce que CI/CD en termes simples ?
Continuous Integration (intégration continue) signifie que toutes les modifications apportées au code sont régulièrement fusionnées dans une branche de développement commune, et le système vérifie automatiquement si ces modifications ont endommagé quelque chose d'important. Imaginez que chaque fois que vous enregistrez des modifications de configuration, le robot vérifie automatiquement la syntaxe, exécute des tests et vous informe si quelque chose ne va pas.
Continuous Delivery (livraison continue) est l'étape suivante, lorsque votre code est automatiquement préparé pour le déploiement sur un serveur de test ou de production. Au lieu d'exporter manuellement la configuration, de copier des fichiers et de mettre à jour des bases de données, tout ce processus se déroule automatiquement en appuyant sur un bouton ou même sans votre participation.
Caractéristiques de 1C à prendre en compte
La plateforme 1C présente un certain nombre de caractéristiques qui rendent la mise en œuvre de CI/CD un peu plus difficile que dans le développement Web conventionnel. Tout d'abord, les configurations 1C sont stockées dans des fichiers binaires (.cf), qui sont difficiles à versionner avec les outils Git conventionnels. Deuxièmement, pour travailler avec 1C, vous avez besoin d'une plate-forme installée, ce qui complique la configuration des environnements automatisés. Troisièmement, 1C a ses propres spécificités avec le verrouillage des objets, le mode monopole et les fonctionnalités de mise à jour de la base de données.
Cependant, toutes ces difficultés peuvent être résolues. Il existe un format de téléchargement de configuration XML qui est parfait pour Git. La plateforme 1C peut être exécutée en mode client léger ou sans interface graphique, ce qui permet de l'utiliser dans des scripts automatisés. Et pour résoudre des problèmes spécifiques, 1C a créé plusieurs outils open source, dont nous parlerons plus tard.
Outils d'automatisation
Pour construire un pipeline CI/CD pour 1C, vous aurez besoin de plusieurs outils. Commençons par le système de contrôle de version — ici le choix est évident : Git. Il s'agit d'une norme de l'industrie, et pour travailler avec 1C, il est idéal si vous configurez correctement le format de stockage des configurations.
L'outil clé est OneScript, un interpréteur de langage 1C qui fonctionne en dehors de la plate-forme 1C. Il vous permet d'écrire des scripts dans une langue familière et d'effectuer diverses opérations avec des configurations. Sur la base de OneScript, des utilitaires utiles tels que vanessa-automation pour les tests automatisés et gitsync pour la synchronisation avec Git ont été créés.
Pour le serveur CI/CD, vous pouvez utiliser des solutions populaires : GitLab CI, Jenkins, GitHub Actions ou même TeamCity. Le choix dépend de vos préférences et de l'infrastructure de votre entreprise. Pour les débutants, je recommande GitLab CI ou GitHub Actions, car ils fournissent des solutions d'hébergement gratuites et ont une configuration simple via des fichiers YAML.
Vous aurez également besoin d'un outil pour travailler avec les configurations à partir de la ligne de commande. Ici, vous pouvez utiliser les fonctionnalités standard de la plate-forme 1C (configurateur en mode /C) ou des utilitaires spécialisés tels que v8unpack pour décompresser les configurations en XML.
Configuration de la structure de base du projet
La première étape vers l'automatisation est la bonne organisation du projet. Au lieu de stocker des fichiers binaires .cf dans Git, vous devez télécharger la configuration au format XML. Pour ce faire, créez un dossier src à la racine de votre projet, où le code source de la configuration sera téléchargé sous forme de fichiers XML séparés pour chaque objet de métadonnées.
La structure d'un projet 1C typique dans Git peut ressembler à ceci : le dossier racine contient le répertoire src avec la configuration téléchargée, le dossier tests avec des tests automatiques, le dossier scripts avec des scripts de service pour l'assemblage et le déploiement, ainsi que des fichiers de configuration pour le système CI/CD, par exemple .gitlab-ci.yml ou .github/workflows/main.yml.
Il est important d'ajouter à .gitignore les fichiers qui n'ont pas besoin d'être versionnés : les fichiers temporaires 1C avec l'extension .tmp, les fichiers de verrouillage .1CV8, les dossiers avec cache et journaux. Il ne faut pas non plus stocker les bases d'informations elles-mêmes dans le dépôt, mais uniquement le code source des configurations.

Création du premier pipeline
Créons un pipeline CI/CD simple qui effectuera des vérifications de base à chaque validation. Par exemple, nous utilisons GitLab CI, mais la logique s'applique également à d'autres systèmes.
Créez un fichier .gitlab-ci.yml à la racine du projet et définissez plusieurs étapes : vérification de la syntaxe, assemblage de la configuration, exécution des tests et déploiement. Dans la première étape, le pipeline vérifie la syntaxe de la configuration. Il s'agit d'une opération rapide qui vous permet de détecter des erreurs évidentes telles que des parenthèses non fermées ou des noms de variables incorrects.
Pour vérifier la syntaxe, vous pouvez utiliser le configurateur 1C en mode ligne de commande. Créez un script qui charge la configuration à partir de fichiers XML dans une base de données vide et lance une vérification de la configuration. Si le configurateur trouve des erreurs, le script doit se terminer par un code de retour non nul et le pipeline s'arrêtera.
La deuxième étape est l'assemblage de la configuration. Ici, un fichier cf complet est assemblé à partir de fichiers XML, qui peuvent être utilisés pour le déploiement. Ce fichier est enregistré en tant qu'artefact de pipeline et peut être utilisé dans les étapes suivantes ou téléchargé manuellement.
La troisième étape est le lancement de tests automatiques. Si vous utilisez un framework de test tel que Vanessa-Automation ou ADD, tous les tests écrits sont exécutés ici. Les tests sont effectués sur une base d'informations temporaire, créée spécifiquement pour cette étape et supprimée une fois terminée.
La dernière étape est le déploiement. Cette étape ne peut être lancée que pour certaines branches (par exemple, master ou release) et met à jour la base de données de test ou de production. Il est important de mettre en œuvre cette étape de manière à ce qu'en cas de problème, vous puissiez revenir rapidement à la version précédente.
Automatisation des tests
L'une des principales valeurs de CI/CD est le test automatique. Pour 1C, il existe plusieurs frameworks qui permettent d'écrire des tests automatiques. Le plus populaire est Vanessa-Automation, qui prend en charge le style de test BDD (Behavior Driven Development).
Les tests BDD sont écrits en langage naturel au format Gherkin : donné (Given), quand (When), alors (Then). Par exemple, le test peut ressembler à ceci : étant donné que j'ai ouvert le formulaire de création de document, lorsque j'ai rempli le champ « Contrepartie » avec la valeur « Roga i kopita SARL », et que j'ai cliqué sur le bouton « Enregistrer », alors le document doit être enregistré sans erreur. Ces scénarios sont compréhensibles non seulement pour les programmeurs, mais aussi pour les analystes ou les testeurs.
Chacun de ces scénarios est associé à une implémentation dans le langage intégré 1C, qui exécute des actions et vérifie les résultats. Il est important de couvrir les processus métier critiques avec des tests : traitement des documents, calcul des registres, génération de rapports. Même un petit ensemble de ces tests augmente considérablement la stabilité du développement.
Stratégies de branchement et de publication
Pour que le CI/CD fonctionne efficacement, vous avez besoin d'une stratégie de ramification Git appropriée. Pour les équipes travaillant avec 1C, un Git Flow simplifié est bien adapté : la branche principale master (ou main) contient un code stable prêt à être déployé en production, la branche develop est utilisée pour intégrer de nouvelles fonctionnalités, et des branches de fonctionnalités distinctes sont créées pour chaque tâche.
Lorsqu'un développeur commence à travailler sur une nouvelle tâche, il crée une branche à partir de develop avec un nom clair tel que feature/add-inventory-report. Une fois le travail terminé, une requête de fusion (ou requête de retrait) est créée, qui lance automatiquement le pipeline CI. Si toutes les vérifications ont réussi et que la révision du code est terminée, la branche est fusionnée dans develop.
Pour créer une version à partir de develop, une branche release est créée, sur laquelle les vérifications finales et les corrections de bogues sont effectuées. Après un test réussi, la branche de sortie est fusionnée dans le master, marquée avec le numéro de version et le déploiement sur le système productif démarre automatiquement.
Déploiement et annulation des modifications
Le processus de déploiement de la configuration 1C a ses propres nuances. Vous ne pouvez pas simplement prendre et remplacer des fichiers : vous devez mettre à jour correctement la base d'informations, traiter les modifications de la structure des données et vérifier la compatibilité. Pour automatiser ce processus, on utilise des scripts qui mettent à jour la base de données via une connexion COM ou en mode /C.
Il est essentiel de sauvegarder la base de données avant de procéder à la mise à jour. Dans le script de déploiement, la première étape consiste à créer une sauvegarde, qui est enregistrée avec un horodatage et un numéro de version. Si quelque chose ne va pas après la mise à jour, cette sauvegarde vous permettra de revenir rapidement à la version précédente.
Après la mise à jour de la configuration, il est recommandé d'exécuter des tests de fumée, un petit ensemble de contrôles qui vérifient rapidement les performances des fonctions principales du système. Par exemple, vous pouvez essayer d'ouvrir le formulaire principal, créer un document simple, effectuer un calcul typique. Si les tests de fumée échouent, le déploiement doit être considéré comme un échec et une restauration automatique doit être effectuée.
Surveillance et notifications
Une partie importante de tout pipeline CI/CD est le système de notification. Les développeurs doivent immédiatement savoir si leur validation a cassé la compilation ou n'a pas réussi les tests. La plupart des systèmes CI/CD s'intègrent aux messageries telles que Telegram, Slack ou aux systèmes d'entreprise.
Configurez les notifications pour qu'elles soient informatives, mais pas de spam. Par exemple, vous pouvez envoyer des messages uniquement lorsque les tests échouent ou que le déploiement en production est réussi. La notification doit contenir des informations de base : quelle branche, qui est l'auteur de la validation, quelle étape du pipeline est tombée, un lien vers les journaux détaillés.
Il est également utile de collecter des métriques : combien de temps dure l'exécution complète du pipeline, à quelle fréquence les tests échouent, combien de temps s'écoule entre la validation et le déploiement en production. Ces données aident à identifier les goulots d'étranglement et à améliorer les processus de développement.
Conseils pratiques pour les débutants
Commencez petit. N'essayez pas de construire immédiatement un CI/CD parfait avec toutes les vérifications possibles. Commencez par une vérification de syntaxe de base et une configuration de compilation automatique. Lorsque cela fonctionne de manière stable, ajoutez quelques tests simples. Ensuite, automatisez le déploiement sur un serveur de test. Et seulement lorsque toute la chaîne est terminée, procédez au déploiement automatique en production.
Documentez les processus. Créez un fichier README à la racine du projet, où vous décrivez comment fonctionne votre CI/CD, quelles commandes doivent être exécutées pour le développement local, comment créer des versions. Ceci est particulièrement important s'il y a plusieurs développeurs dans l'équipe ou si le projet est transféré à une autre équipe.
N'ignorez pas les tests échoués. Si le pipeline est rouge, cela devrait être la priorité numéro un. Le pipeline « rouge » normalise la situation lorsque les tests échouent et, au fil du temps, l'équipe cesse d'y prêter attention. La règle est simple : si le test échoue, soit vous devez corriger le code, soit vous devez corriger le test, mais le pipeline doit redevenir vert.
Prenez le temps de former votre équipe. La mise en œuvre de CI/CD modifie les processus de développement, et tous les développeurs ne sont pas forcément prêts à cela. Organisez plusieurs réunions pour expliquer pourquoi cela est nécessaire, comment cela fonctionne, montrez des exemples. Il vaut mieux passer quelques heures à se former que de lutter pendant des mois contre la résistance au changement.
Problèmes typiques et leurs solutions
L'un des problèmes courants est la lenteur du pipeline. L'assemblage complet et les tests de la configuration 1C peuvent prendre des dizaines de minutes. Pour accélérer le processus, utilisez la mise en cache : enregistrez les configurations et les bases de données compilées entre les exécutions du pipeline. Divisez les tests en tests de fumée rapides qui sont toujours exécutés et en un ensemble complet de tests qui ne sont exécutés que pour les branches importantes.
Un autre problème est celui des conflits lors de la fusion des fichiers de configuration XML. Git ne résout pas toujours correctement les conflits dans XML, surtout si deux développeurs ont modifié le même objet de métadonnées. La solution consiste à utiliser des outils spécialisés pour fusionner les configurations 1C, tels que gitsync ou EDT (1C : Enterprise Development Tools), qui comprennent la structure des métadonnées.
Parfois, il y a des problèmes avec les licences 1C sur le serveur CI. Pour les processus automatisés, vous avez besoin de licences qui permettent l'exécution sans interface graphique. Discutez avec votre gestionnaire de licences des options disponibles pour votre configuration. Comme alternative, vous pouvez utiliser les versions de démonstration de la plate-forme pour les tests, bien que cela ait ses limites.
Conclusion
La construction d'un CI/CD pour 1C n'est pas un processus rapide, mais l'investissement en temps est rentabilisé plusieurs fois. L'automatisation élimine la routine, réduit les erreurs et rend le processus de développement plus prévisible et professionnel. Votre équipe sera en mesure de publier des mises à jour plus souvent et avec plus de confiance, et la qualité du code augmentera inévitablement.
Commencez simplement : configurez Git pour stocker les configurations, ajoutez une vérification de syntaxe de base à CI, écrivez les premiers tests automatisés. Développez progressivement les fonctionnalités du pipeline en ajoutant de nouvelles vérifications et en automatisant davantage de processus. Et rappelez-vous : l'objectif principal de CI/CD n'est pas de mettre en place des technologies complexes, mais d'améliorer la qualité du développement et la vie des développeurs.
Vous voulez en savoir plus ?
Vous pouvez étudier les approches modernes du développement, de l'automatisation des processus, du CI/CD et de nombreuses autres technologies sur la plateforme éducative Code. Nous créons des cours pratiques pour les développeurs de tous niveaux, des débutants aux professionnels expérimentés.
Et nous avons aussi un super chaîne Telegram avec une communauté amicale où vous pouvez discuter de problèmes techniques, partager des expériences et trouver des personnes partageant les mêmes idées. Rejoignez-nous ! 🚀
