[JAVA] AoneFlow présente de nouveaux outils d'automatisation et de gestion des succursales

AoneFlow intègre les atouts de Trunk Based et de ** Git Flow ** tout en introduisant de nouveaux outils d'automatisation et de gestion des succursales pour la publication rapide de produits logiciels de qualité.

** L'automatisation et les nouveaux processus de gestion des succursales révolutionnent le développement logiciel. ** ** image.png

Alors que TrunkBased et GitFlow peuvent répondre aux besoins de gestion des succursales de la plupart des développeurs en termes d'intégration facile et de fonctionnalités gérables, Alibaba est plus efficace sans les tracas d'une intervention manuelle. J'avais besoin d'un système et d'outils de gestion de succursale améliorés. En réponse, l'équipe technique d'Alibaba a développé un nouveau mode de gestion de succursale, AoneFlow. AoneFlow intègre les atouts de Trunk Based et de Git Flow, tout en introduisant de nouveaux outils d'automatisation et de gestion des succursales pour garantir la publication rapide de produits logiciels de qualité.

Infrastructure de gestion des succursales: TrunkBased et GitFlow

AoneFlow est en partie basé sur la structure et les fonctionnalités de TrunkBased et GitFlow, les techniques de gestion de succursales les plus couramment utilisées par les développeurs de logiciels. Les deux systèmes offrent des fonctionnalités utiles et AoneFlow, qui est basé sur des systèmes existants, a l'avantage d'être familier aux développeurs de logiciels.

TrunkBased L'avantage de TrunkBased est l'intégration continue. Sa structure se compose d'une seule branche de tronc et de nombreuses branches de libération. Chaque branche de version est créée à partir du tronc à une version spécifique du point de validation pour le déploiement en ligne et le correctif. Il n'y a pas de branche de fonctionnalité explicite. Alors que GitFlow permet à chaque développeur d'avoir une branche locale, TrunkBased n'exclut pas les branches de fonctionnalités de courte durée. Cependant, cette fonctionnalité n'est pas largement utilisée par les développeurs TrunkBased.

TrunkBased est devenu moins populaire avec GitFlow ces dernières années en raison de certains inconvénients. Premièrement, si trop d'équipes codent sur le même tronc, vous pouvez obtenir une erreur à la sortie. FeatureToggle a été implémenté en tant que solution, mais il nécessite une intégration fréquente et une couverture de test appropriée, ce qui dépasse les capacités de l'équipe de développement. Par conséquent, TrunkBased est souvent utilisé dans les projets SaaS où vous n'avez pas besoin de gérer plusieurs versions antérieures en même temps. Ces projets sont principalement des services à petite échelle qui ont subi une transformation de microservices.

Le mode TrunkBased a deux évolutions. OneFlow et Multi-Trunk. OneFlow utilise plusieurs des mêmes fonctionnalités que TrunkBased, mais avec des définitions de flux opérationnel plus strictes et des fonctionnalités supplémentaires telles que la branche Hotfix. Multi-Trunk utilise une branche de version fixe en plus de la branche de développement double et fixe.

GitFlow GitFlow a une structure différente de celle de TrunkBased. Il se compose d'une branche principale et d'un certain nombre de branches de fonctionnalités, de branches de version et de branches de correctif. GitFlow était auparavant le plus utilisé par les entreprises axées sur les processus en raison de sa définition opérationnelle claire à chaque étape. Cependant, GitFlow n'est pas convivial et contient de nombreuses règles de fusion fastidieuses. Les conflits de fusion et les problèmes de test d'intégration font souvent l'objet de critiques.

Une méthode de gestion de succursale moins connue est Github Flow, qui est essentiellement basée sur le tronc avec l'ajout d'un entrepôt personnel et une opération de fusion de code de demande d'extraction. Ce processus est similaire à l'ajout de succursales individuelles au même entrepôt, ce qui le rend idéal pour les équipes réparties. GithubFlow a également sa propre évolution, GitlabFlow tirant parti des déploiements dans plusieurs environnements, associant des entrepôts et des succursales au sein de ces environnements.

Nouvelle évolution: AoneFlow

La structure, la fonctionnalité et le processus d'AoneFlow diffèrent de ceux de Trunk Based et de GitHub dans plusieurs domaines importants.

Comme son prédécesseur, AoneFlow vise à fournir une intégration continue simple (TrunkBased) et des fonctionnalités d'exigences gérables (GitFlow). Il maintient également la structure de base des trois types de branches: branche de tronc, branche de fonctionnalité et branche de version.

Cependant, AoneFlow commence avec son prédécesseur en établissant trois règles de base pour les flux de travail de gestion des succursales.

  1. Avant de commencer, créez une branche fonctionnelle à partir du tronc.
  2. Combinez les branches de fonctionnalités pour former une branche de version.
  3. Après la publication dans l'environnement formel en ligne, fusionnez la branche de version correspondante dans le tronc, ajoutez des balises au tronc et supprimez la branche de fonctionnalité associée à la branche de publication.

Règle 1. Créer une branche d'objets

La branche de fonctionnalités d'AoneFlow a été adoptée à partir de GitFlow. Lorsqu'un nouveau travail est démarré (création d'une nouvelle fonction, résolution d'une erreur, etc.), une branche de fonctionnalité avec le préfixe «fonctionnalité /» est créée à partir du tronc représentant la dernière version de la version. Les modifications de code sont validées dans cette branche. Chaque travail correspond à une branche de fonctionnalité et les modifications ne peuvent pas être validées directement dans le tronc, comme illustré dans la figure ci-dessous.

image.png Créer une branche d'objets

Règle 2. Déformer la branche

Cette règle est la réalisation la plus innovante d'AoneFlow.

Avec les méthodes de gestion de branche existantes, GitFlow récupère la branche de fonctionnalité terminée dans la ligne principale commune (branche de développement), la fusionne et extrait la branche de publication de la ligne principale commune. De même, TrunkBased attend que la fonctionnalité requise soit développée sur la branche de tronc et extrait la branche de libération d'un emplacement spécifique sur la branche de tronc.

En revanche, AoneFlow extrait une nouvelle branche du tronc et fusionne toutes les branches de fonctionnalités en attente de publication ou d'intégration pour créer une branche de publication (généralement indiquée par le préfixe «release /». ).

Bien que simple, il a un large éventail d'utilisations. Les branches de version sont flexibles et peuvent être associées à un environnement particulier à l'aide d'outils de ligne d'assemblage (par exemple, une branche de version / test est associée à un environnement de test de déploiement). Cet outil connecte l'analyse de la qualité du code et les niveaux de test automatisés à une grande variété d'environnements. Enfin, le package de déploiement de sortie est publié directement dans l'environnement approprié.

image.png

Formation de la branche de libération

À un niveau supérieur, les branches de publication peuvent être associées à plusieurs environnements pour des tâches telles que l'enchaînement des versions graduelles et officielles. Cela ajoute une étape d'inspection humaine pour assurer la fiabilité. Vous pouvez également créer une ligne d'assemblage intégrée continue en associant des branches fonctionnelles selon un plan itératif, en créant une branche de version fixe par évolution itérative et en liant un ensemble d'environnements à la ligne d'assemblage de la branche de version. Vous pouvez également implémenter les effets de TrunkBased en associant toutes les branches fonctionnelles et en consacrant tous les commits aux tests d'intégration.

De plus, la configuration des fonctionnalités de la branche Release est dynamique et facile à ajuster.

Par exemple, une petite entreprise qui utilise des «opérations agiles» peut devoir abandonner les versions de fonctionnalités en raison de changements dans la stratégie de marché ou supprimer des fonctionnalités à la dernière minute en raison d'une erreur. Cela nécessite généralement de "vérifier le code" manuellement ou de supprimer les engagements associés qui ont été fusionnés un par un dans les branches de développement ou de tronc.

En revanche, AoneFlow vous permet de créer une branche de publication en moins d'une minute. Cela se fait en supprimant la branche de version d'origine, en extrayant une nouvelle branche de version avec le même nom de la branche de tronc et en fusionnant les branches de fonctionnalités qui doivent être conservées. Cette série d'opérations peut être automatisée et est propre et sans contamination.

Enfin, les branches de version faiblement couplées vous permettent d'intégrer et de tester plusieurs environnements intégrés basés sur une combinaison de différentes fonctionnalités. Il est également utile pour gérer le déploiement des fonctionnalités dans différents environnements. Bien qu'il soit faiblement couplé, il existe une corrélation entre les branches de publication. Les étapes de publication des environnements formels de test, intégrés, de pré-lancement, par phases et en ligne sont généralement exécutées de manière séquentielle. Cela signifie que les utilisateurs peuvent définir des exigences et que seules les caractéristiques qui ont réussi la validation dans l'environnement précédent peuvent être transférées et déployées dans l'environnement suivant. Le résultat est un flux de publication de fonctionnalités en forme d'entonnoir.

En outre, Alibaba a créé une plate-forme unifiée pour automatiser et migrer la combinaison de fonctionnalités entre les branches de publication, comme décrit dans la section suivante.

Règle 3. Libérez le déploiement en ligne de la succursale

Lorsque la chaîne d'assemblage de la branche de publication termine le déploiement de l'environnement formel en ligne, cela signifie que la fonctionnalité correspondante a été publiée. Dans ce cas, la branche de version doit être fusionnée dans le tronc. Pour éviter une accumulation importante de branches de fonctionnalités passées dans votre entrepôt de code, vous devez également nettoyer les branches de fonctionnalités qui sont déjà en ligne.

Dans AoneFlow, la dernière version de la branche trunk est toujours la même que la version en ligne (similaire à GitFlow). Si l'utilisateur souhaite retracer les versions antérieures, il lui suffit de trouver l'étiquette de version correspondante sur la branche du tronc.

image.png

Structure: règle 3

Règles supplémentaires

AoneFlow ajoute quelques opérations pratiques aux règles 1-3. Par exemple, lorsque le correctif est en ligne, la méthode de traitement normale consiste à créer une nouvelle branche de version (correspondant à la branche de correctif) correspondant à l'environnement en ligne. Il crée ensuite une ligne d'assemblage temporaire pour la branche de sortie afin que les inspections avant la libération et les tests de fumée puissent être effectués automatiquement.

AoneFlow vous permet de trouver l'emplacement de l'étiquette de version sur la branche du tronc et de créer une branche Hotfix directement là. Cela permet à l'utilisateur d'effectuer efficacement certaines opérations importantes.

Optimisation de l'expérience utilisateur

Alibaba cherche constamment à optimiser le processus de gestion des succursales. Récemment, nous avons documenté les meilleures pratiques de développement Java et les avons compilées dans le manuel de développement Java d'Alibaba. Cela a permis à toute l'équipe de standardiser le développement Java et d'améliorer la qualité et l'efficacité de leur travail.

La normalisation a également aidé à résoudre des problèmes liés aux tâches, tels que la reconstruction de la branche de publication. La reconstruction de la branche de version nécessite une fusion, après quoi le code doit être compilé pour générer un nouveau package de déploiement. Cependant, si la fonctionnalité du logiciel repose sur un progiciel tiers, le comportement du logiciel peut être incohérent.

En guise de solution, nous avons ajouté une règle à nos directives de codage selon laquelle le code de version en ligne ne doit pas utiliser de packages dépendants qui incluent des «versions SNAPSHOT» ou des versions non officielles. Ces directives donnent à notre équipe plus de contrôle sur la qualité des produits qu'elle fabrique.

Nous avons également ajouté un certain nombre d'outils pour faciliter la tâche des développeurs. Par exemple, la plate-forme AoneFlow n'exige plus que les développeurs créent, fusionnent et modifient manuellement les branches à l'aide des commandes Git. Le travail manuel est sujet aux erreurs et prend du temps. La plate-forme AoneFlow nie ces problèmes en contrôlant l'ensemble du processus de R & D et en ajoutant un certain nombre de composants de service intégrés pour augmenter l'efficacité de la R & D. Cette plateforme offre plusieurs avantages importants.

Automatisation complète des processus

La plateforme AoneFlow propose des propositions d'exigences, la division des exigences en tâches, la création en ligne de branches fonctionnelles, la génération de branches de release par agrégation de branches fonctionnelles, la création automatique d'environnements de test basés sur des modèles, une opération et une maintenance en retard (O&M), etc. Introduit l'automatisation du processus de gestion des succursales pour la fonctionnalité de.

Sur le front-end, AoneFlow garantit la normalisation des noms de branche de fonctionnalité en contrôlant l'association de branche de fonctionnalité et les exigences de surveillance. Le backend gère les associations de branches de publication et les déploiements pour garantir la fiabilité de la version source. Dans l'ensemble, AoneFlow gère environ 80% des déploiements en ligne du groupe Alibaba.

Amélioration de la chaîne d'assemblage de la branche de lancement

Il existe de nombreuses branches de code dans le cycle de vie d'AoneFlow. La création et la mise à jour de ces branches implique des actions complexes. En automatisant ce processus, la qualité et l'efficacité ne sont pas perdues en raison d'une erreur humaine.

AoneFlow utilise une ligne d'assemblage CI / CD automatisée pour créer et mettre à jour des branches de code. Cette ligne d'assemblage relie toutes les branches indépendantes du code dans le cycle de vie et les oriente plus efficacement vers la fonctionnalité prévue (par exemple le code de validation pour les tests d'intégration). .. Cela est particulièrement vrai pour les branches de version, qui peuvent être associées à un environnement de déploiement particulier. Vous pouvez vérifier le nouveau code fusionné dans la branche et le déployer plus efficacement.

Dans un scénario de gestion de succursale idéal, chaque succursale doit être associée à une ligne d'assemblage qui correspond à son rôle. La branche de version d'AoneFlow est relativement fixe par rapport à GitFlow et est facile à intégrer, de sorte que presque tous les outils de ligne d'assemblage disponibles sont compatibles avec AoneFlow.

AoneFlow comprend également des fonctionnalités supplémentaires telles que des révisions de code, des contrôles de sécurité et des déploiements de chaînes de montage en ligne pour améliorer et optimiser l'expérience utilisateur de l'équipe de développement.

Amélioration de la maintenance des associations de succursales

Le maintien de l'association entre la branche de fonctionnalité et la branche de recherche est un problème unique résolu par AoneFlow.

Lorsque vous modifiez une combinaison de fonctionnalités existante, il est important de se rappeler de quelle branche de fonctionnalité provient la branche de version. Par exemple, si une fonctionnalité est supprimée d'une branche de version particulière, plusieurs branches de fonctionnalités, y compris celles qui ne contiennent pas cette fonctionnalité, seront fusionnées et remplacées par la branche de version d'origine. Il est difficile et chronophage d'enregistrer manuellement les branches qui ont été fusionnées.

AoneFlow comprend plusieurs fonctionnalités d'automatisation qui améliorent ce processus. Lorsqu'une combinaison de fonctionnalités particulière est validée dans un environnement de version de bas niveau (tel que des tests d'intégration), le contenu est migré directement vers la branche de version correspondante dans l'environnement de haut niveau (comme la pré-version). Cela garantit que la version en ligne a passé la validation préalable à la version, la version préliminaire a réussi la validation intégrée et d'autres processus importants. Cela connecte toutes les branches de publication d'une série. Ce processus peut être complété avec une commande Git normale, mais il peut être fait de manière plus intuitive avec les outils visuels d'AoneFlow.

De plus, AoneFlow peut afficher de manière uniforme l'état des succursales dans l'entrepôt de code, comme les informations sur la machine et les enregistrements d'opération de l'environnement de déploiement de la succursale correspondante.

Aperçu

AoneFlow d'Alibaba est une évolution de la gestion des succursales qui exploite les forces de TrunkBased et GitFlow.

Les avantages de cette nouvelle méthode de gestion d'agence sont:

AoneFlow fournit une plate-forme flexible permettant aux développeurs de logiciels de s'adapter au cycle de vie de la gestion dynamique des succursales, de travailler efficacement et de publier des produits logiciels de haute qualité. Vous permet d'avoir plus de contrôle sur.

Alibaba Tech Première main, détails, informations détaillées sur les dernières technologies d'Alibaba → Recherchez "Alibaba Tech" sur Facebook

Recommended Posts

AoneFlow présente de nouveaux outils d'automatisation et de gestion des succursales
Mécanisme de commande et outils de gestion