MAIN MENU
Le blogue Devolutions

Annonces, mises à jour et analyses de Devolutions

Devolutions PowerShell Universal Git Sync illustration for the blog.

Réussir avec Git Sync dans PowerShell Universal : fonctionnalités, modes et options de configuration

Parcourez les modes Git sync de PowerShell Universal, les options de distant, les identifiants, le premier push et le premier pull, l’intervalle, les modes bidirectionnel, unidirectionnel et push uniquement, puis les problèmes courants de fusion, d’authentification, SSL et de blocage.

La synchronisation Git (Git sync) est une fonctionnalité de PowerShell Universal. Elle crée des commits à partir des changements dans le dépôt de configuration de PowerShell Universal, puis les pousse et les tire depuis un distant git. Git sync assure la cohérence de configuration dans une grappe PowerShell Universal haute disponibilité, ou peut déplacer des changements d’un environnement de développement vers la production via des demandes de tirage et des branches. Même dans un environnement à un seul nœud, c’est aussi utile pour conserver un historique des changements.

Comment fonctionne Git sync?

Git sync fonctionne en lançant les commandes git pull et git push à intervalle régulier pour garder les fichiers de configuration à jour avec le dépôt git distant. Par défaut, chaque minute, le processus Git sync s’exécute pour tirer les changements depuis le distant git. Côté interaction utilisateur, Git sync fonctionne selon deux modes.

Mode manuel

Le mode par défaut est le mode manuel. Dans ce mode, le serveur PowerShell Universal est en pratique en lecture seule jusqu’à ce qu’un utilisateur clique sur le bouton Edit dans la console d’administration. L’utilisateur peut ensuite modifier la configuration dans toute la console. Une fois les changements terminés, l’utilisateur peut fournir un message de commit et pousser les changements vers le distant, puis le serveur redevient en lecture seule. Pendant que l’utilisateur modifie les fichiers de configuration, le processus Git sync ne tire pas depuis le distant.

Notez que le processus du mode manuel change l’état de tout le serveur. Si plusieurs administrateurs font des changements sur le serveur à ce moment, ils doivent savoir que leurs changements ne sont pas isolés à leur compte.

Mode automatique

Le second mode est le mode automatique. Dans ce mode, le serveur PowerShell Universal est en écriture et tout changement est commité puis poussé directement vers le distant git. Dans ce mode, l’utilisateur ne peut pas fournir de message de commit, mais n’a pas à se soucier d’entrer et de sortir du mode d’édition.

Options de Git sync

Outre la façon dont l’utilisateur interagit avec git, le processus Git sync peut aussi être configuré pour interagir avec un distant git de trois façons.

Use Database

Le paramètre Use Database stocke le dépôt git directement dans la base de données PSU. Cela peut simplifier Git sync en évitant de configurer un distant git comme GitHub ou Bitbucket et de gérer le réseau et les identifiants. Use Database exige que l’outil en ligne de commande git.exe, ou une version git propre à la plateforme, soit installé sur le système PowerShell Universal. Le paramètre s’appuie sur git bundle pour créer et stocker des bundles directement dans la base de données. L’inconvénient de ce type de configuration est que le dépôt git n’est pas facilement accessible aux outils tiers.

Vous pouvez en apprendre plus sur git bundle.

Client git interne

PowerShell Universal inclut un client git interne qui peut pousser et tirer depuis des dépôts distants. Ce client, LibGit2Sharp, encapsule une bibliothèque git en C. Il n’offre pas toutes les fonctions de git.exe, mais n’exige aucune installation de client git sur le serveur PSU. Vous pouvez inclure des identifiants dans les paramètres git de PowerShell Universal, qui seront utilisés avec la bibliothèque cliente git.

Parce que la bibliothèque cliente git interne exige des implémentations précises dans le serveur PSU, elle est plus limitée que le client git externe. Cela dit, pour la plupart des utilisateurs, elle devrait suffire. Certaines limites comprennent :

  • Absence de prise en charge SSH
  • Aucune intégration avec les assistants d’identifiants git
  • Usage limité de git config

Pour configurer le client git interne, décochez le paramètre Use Database et insérez l’URL de votre distant git ainsi que les identifiants.

Client git externe

PowerShell Universal s’intègre aussi au processus en ligne de commande du client git externe. Des commandes git comme git push, git pull et git commit sont invoquées directement via un processus git.exe externe. Avec l’intégration du client git externe, PowerShell Universal ne transmet pas les identifiants aux commandes git, vous devez donc les spécifier autrement.

Vous pouvez spécifier les identifiants de la façon suivante.

URL

Vous pouvez utiliser un nom d’utilisateur et un mot de passe (ou un jeton d’accès personnel) directement dans l’URL avec la syntaxe suivante. Ce format n’exige aucune configuration git supplémentaire, mais stocke l’URL en texte clair dans la base de données.

https://adam:PAT@github.com/ironmansoftware/shiny-octowaffle.git

Assistant d’identifiants git

Vous pouvez aussi utiliser un assistant d’identifiants git pour stocker les identifiants de dépôts précis dans git. PowerShell Universal ne s’intègre pas directement aux assistants d’identifiants, mais vous pouvez les configurer hors de l’environnement PSU, et lorsque le processus Git sync s’exécute, les identifiants seront utilisés par git.exe lui-même.

Vous pouvez en apprendre plus sur les identifiants git. Notez que tout paramètre de configuration git propre à l’utilisateur doit être défini dans le profil du compte de service PSU.

Clé privée SSH

Comme pour l’assistant d’identifiants git, vous pouvez aussi stocker une clé privée SSH git pour le client git PSU. La plupart des dépôts git permettent de téléverser des clés publiques personnalisées pour accéder aux dépôts plutôt qu’avec des identifiants.

Par exemple, vous pouvez suivre la documentation de configuration SSH pour GitHub.

Paramètres supplémentaires

En plus des identifiants, tout changement apporté aux paramètres git locaux à l’utilisateur ou globaux sera chargé par le processus Git sync de PowerShell Universal. Ces paramètres peuvent inclure des options comme le backend cryptographique SSL, les fins de ligne et les espaces.

Configurer Git sync

Git sync se configure en définissant les paramètres git soit dans le fichier appsettings.json, soit via la boîte de dialogue Git Settings sous Settings > Git. Plusieurs options de configuration doivent être prises en compte lors de la mise en place de Git sync. Nous recommandons la base de données, lorsque c’est possible. Il est plus simple de configurer plusieurs nœuds avec les mêmes paramètres git lorsqu’ils partagent une base de données.

Informations d’identifiants

La plupart des dépôts git utilisent une forme de jeton d’accès personnel. Les jetons d’accès personnels peuvent servir de mots de passe, et être traités comme tels, mais peuvent aussi être limités en portée et révoqués depuis le serveur au besoin. C’est notre méthode d’identifiants privilégiée.

Il est aussi possible d’utiliser directement votre nom d’utilisateur et votre mot de passe.

Première synchronisation

D’abord, vous devez connaître le premier push ou pull depuis un distant git. Notez que, même s’il existe un comportement init, ce paramètre n’est plus requis et peut être ignoré. Il sera retiré dans une version future.

Fichiers en local

Si vous n’avez jamais configuré Git sync, c’est le scénario le plus courant. Vous avez des fichiers de configuration locaux que vous souhaitez stocker dans un distant git. Le distant git doit être nu (bare). Aucune branche ne doit être créée, mais le dépôt doit exister. Dans ce scénario, PowerShell Universal initialise un dépôt git local, crée la branche spécifiée, puis initialise le distant via un git push.

Après la première synchro, les fichiers locaux existeront dans le distant.

Fichiers dans le distant

Si vous avez un distant git qui a déjà une branche créée avec des fichiers, vous devez vous assurer que le dépôt de configuration PowerShell Universal est vide sur le serveur local. Si des fichiers existent, la première Git sync échouera. Si le répertoire n’existe pas, un git clone sur la branche spécifiée sera appelé et les fichiers seront tirés en local. PowerShell Universal se reconfigurera ensuite à partir des fichiers tirés.

Intervalle de Git sync

Par défaut, le processus Git sync s’exécute chaque minute pour vérifier les changements qui ont pu être poussés vers le distant git. Un git pull est exécuté, puis le commit HEAD actuel de la branche est comparé au SHA du dernier commit Git sync. Si le SHA du commit HEAD diffère du SHA précédent, le système de configuration de PowerShell Universal rechargera les fichiers changés.

Comportement de synchronisation

Il existe trois comportements de synchronisation dans PowerShell Universal. Ils changent la façon dont PowerShell Universal interagit avec le dépôt git distant.

Bidirectionnel

En mode bidirectionnel, un git pull et un git push sont lancés à chaque Git sync. L’instance PowerShell Universal est en lecture-écriture.

Unidirectionnel

En mode unidirectionnel, un git pull est lancé à chaque Git sync. L’instance PowerShell Universal est en lecture seule. C’est utile pour les environnements de production où les changements arrivent via des demandes de tirage et ne sont pas faits directement sur le serveur PowerShell Universal.

Push uniquement

En mode push uniquement, un git push est lancé si des changements existent à chaque Git sync. L’instance PowerShell Universal est en lecture-écriture, mais ne tire pas les changements depuis le distant. C’est utile lorsque vous modifiez des fichiers dans un environnement de débogage et que vous ne voulez pas gérer les conflits de fusion provenant du distant.

Problèmes courants

Voici quelques problèmes courants que vous pouvez rencontrer avec Git sync.

Conflits de fusion

PowerShell Universal ne gère pas les conflits de fusion : ils exigent une intervention manuelle. Pour cette raison, il peut être souhaitable de mettre les environnements de production en mode Git sync unidirectionnel afin d’éviter les changements locaux. Tous les changements et fusions se feront avec les outils git du dépôt ou d’autres environnements de développement locaux.

Si vous souhaitez un environnement de production en lecture-écriture avec plusieurs nœuds, il est recommandé de configurer plusieurs nœuds unidirectionnels et un seul nœud bidirectionnel.

Si vous rencontrez un conflit de fusion, vous devrez modifier les fichiers directement sur le serveur PSU pour le résoudre.

Problèmes d’authentification

Chaque serveur distant git est un peu différent. Par exemple, Bitbucket a plusieurs niveaux de jetons HTTP et vous devez vous assurer qu’ils sont bien configurés pour vos dépôts. Nous recommandons de vérifier que vous pouvez cloner des dépôts avec un client git standard avant d’essayer un jeton dans PowerShell Universal. Si vous voulez tester les identifiants dans PowerShell Universal, vous pouvez utiliser le bouton Synchronize Now sur la page Git pour vérifier l’accès sans attendre la Git sync planifiée.

Problèmes SSL

Le client git interne n’accepte pas les certificats non approuvés. Si votre serveur a des problèmes de connexions SSL, vous pourriez devoir configurer un client git externe et définir les paramètres git config appropriés pour éviter les erreurs, tout en acceptant les éventuelles failles de sécurité qui en découlent.

Git se bloque

Par défaut, le processus Git sync de PowerShell Universal attend 60 secondes que le processus git.exe se termine. Sur certains systèmes, git peut ouvrir une interface pour les identifiants. Cela peut faire bloquer et échouer Git sync.

Prêt à construire? Téléchargez PowerShell Universal.