La sincronizzazione Git (Git sync) è una funzionalità di PowerShell Universal. Crea commit in base alle modifiche nel repository di configurazione di PowerShell Universal e le invia e riceve da un remote git. Git sync garantisce coerenza di configurazione in un cluster PowerShell Universal ad alta disponibilità, oppure può spostare le modifiche da un ambiente di sviluppo alla produzione tramite pull request e branch. Anche in un ambiente a nodo singolo è utile per conservare una cronologia delle modifiche.
Come funziona Git sync?
Git sync funziona emettendo i comandi git pull e git push a intervalli regolari per mantenere i file di configurazione allineati al repository git remoto. Per impostazione predefinita, ogni minuto il processo Git sync viene eseguito per ricevere le modifiche dal remote git. Per quanto riguarda l’interazione dell’utente, Git sync opera in due modalità.
Modalità manuale
La modalità predefinita è la modalità manuale. In questa modalità, il server PowerShell Universal è di fatto in sola lettura finché un utente non fa clic sul pulsante Edit nella console di amministrazione. L’utente può quindi apportare modifiche in tutta la console. Al termine, può fornire un messaggio di commit e inviare le modifiche al remote; il server torna in sola lettura. Mentre l’utente modifica i file di configurazione, il processo Git sync non esegue il pull dal remote.
Si noti che il processo della modalità manuale cambia lo stato dell’intero server. Se più amministratori stanno apportando modifiche al server in quel momento, devono sapere che le loro modifiche non sono isolate al proprio account.
Modalità automatica
La seconda modalità è la modalità automatica. In questa modalità, il server PowerShell Universal è scrivibile e qualsiasi modifica viene confermata e inviata direttamente al remote git. In questa modalità, l’utente non può fornire un messaggio di commit, ma non deve entrare e uscire dalla modalità di modifica.
Opzioni di Git sync
Oltre a come l’utente interagisce con git, il processo Git sync può anche essere configurato per interagire con un remote git in tre modi.
Use Database
L’impostazione Use Database memorizza il repository git direttamente nel database PSU. Può semplificare Git sync evitando di configurare un remote git come GitHub o Bitbucket e di gestire rete e credenziali. Use Database richiede che lo strumento da riga di comando git.exe, o una versione git specifica della piattaforma, sia installato sul sistema PowerShell Universal. L’impostazione sfrutta git bundle per creare e archiviare bundle direttamente nel database. Lo svantaggio di questo tipo di configurazione è che il repository git non è facilmente accessibile agli strumenti di terze parti.
Può saperne di più su git bundle.
Client git interno
PowerShell Universal include un client git interno che può inviare e ricevere da repository remoti. Questo client, LibGit2Sharp, avvolge una libreria client git in C. Non offre tutte le funzionalità di git.exe, ma non richiede l’installazione di un client git sul server PSU. Può includere le credenziali nelle impostazioni git di PowerShell Universal, che verranno usate con la libreria client git.
Poiché la libreria client git interna richiede implementazioni specifiche nel server PSU, è più limitata rispetto al client git esterno. Detto questo, per la maggior parte degli utenti dovrebbe bastare. Alcune limitazioni includono:
- Mancanza di supporto SSH
- Nessuna integrazione con gli helper di credenziali git
- Uso limitato di git config
Per configurare il client git interno, deselezioni l’impostazione Use Database e inserisca l’URL del remote git e le credenziali.
Client git esterno
PowerShell Universal si integra anche con il processo da riga di comando del client git esterno. Comandi git come git push, git pull e git commit vengono invocati direttamente tramite un processo git.exe esterno. Con l’integrazione del client git esterno, PowerShell Universal non passa le credenziali ai comandi git, quindi deve specificarle in un altro modo.
Può specificare le credenziali nei modi seguenti.
URL
Può usare un nome utente e una password (o un token di accesso personale) direttamente nell’URL con la sintassi seguente. Questo formato non richiede configurazione git aggiuntiva, ma memorizza l’URL in testo in chiaro nel database.
https://adam:PAT@github.com/ironmansoftware/shiny-octowaffle.git
Helper di credenziali git
Può anche usare un helper di credenziali git per memorizzare le credenziali di repository specifici in git. PowerShell Universal non si integra direttamente con gli helper di credenziali, ma può configurarli fuori dall’ambiente PSU e, quando viene eseguito il processo Git sync, le credenziali verranno usate da git.exe stesso.
Può saperne di più sulle credenziali git. Si noti che qualsiasi impostazione di configurazione git specifica dell’utente deve essere definita nel profilo dell’account di servizio PSU.
Chiave privata SSH
In modo simile all’helper di credenziali git, può anche memorizzare una chiave privata SSH git per il client git PSU. La maggior parte dei repository git consente di caricare chiavi pubbliche personalizzate per accedere ai repository invece di usare le credenziali.
Come esempio, può seguire la documentazione di configurazione SSH per GitHub.
Impostazioni aggiuntive
Oltre alle credenziali, qualsiasi modifica alle impostazioni git locali dell’utente o globali verrà caricata dal processo Git sync di PowerShell Universal. Queste impostazioni possono includere opzioni come il backend crittografico SSL, i fine riga e gli spazi.
Configurare Git sync
Git sync si configura impostando le impostazioni git nel file appsettings.json oppure con la finestra di dialogo Git Settings in Settings > Git. Ci sono diverse opzioni di configurazione di cui deve essere a conoscenza quando configura Git sync. Consigliamo il database, quando possibile. Rende più semplice configurare più nodi con le stesse impostazioni git quando condividono un database.
Informazioni sulle credenziali
La maggior parte dei repository git impiega qualche forma di token di accesso personale. I token di accesso personale possono essere usati come password, e trattati come tali, ma possono anche essere limitati nello scope e revocati dal server quando necessario. Questo è il nostro metodo preferito per le credenziali.
È anche possibile usare direttamente nome utente e password.
Prima sincronizzazione
Per prima cosa, deve conoscere il primo push o pull da un remote git. Si noti che, sebbene esista un comportamento init, questa impostazione non è più richiesta e può essere ignorata. Verrà rimossa in una versione futura.
File in locale
Se non ha ancora configurato Git sync, questo è lo scenario più comune. Ha file di configurazione locali che desidera archiviare in un remote git. Il remote git deve essere bare. Non devono esserci branch creati, ma il repository deve esistere. In questo scenario, PowerShell Universal inizializza un repository git locale, crea il branch specificato e poi inizializza il remote tramite un git push.
Dopo la prima sincronizzazione, i file locali esisteranno nel remote.
File nel remote
Se ha un remote git che ha già un branch creato con file, deve assicurarsi che il repository di configurazione di PowerShell Universal sia vuoto sul server locale. Se esistono file, la prima Git sync fallirà. Se la directory non esiste, verrà chiamato un git clone sul branch specificato e i file verranno ricevuti in locale. PowerShell Universal si riconfigurerà quindi in base ai file ricevuti.
Intervallo di Git sync
Per impostazione predefinita, il processo Git sync viene eseguito ogni minuto per verificare le modifiche che potrebbero essere state inviate al remote git. Viene eseguito un git pull e poi il commit HEAD corrente del branch viene confrontato con lo SHA dell’ultimo commit Git sync. Se lo SHA del commit HEAD è diverso dallo SHA precedente, il sistema di configurazione di PowerShell Universal ricaricherà i file modificati.
Comportamento di sincronizzazione
Esistono tre comportamenti di sincronizzazione in PowerShell Universal. Cambiano il modo in cui PowerShell Universal interagisce con il repository git remoto.
Bidirezionale
In modalità bidirezionale, un git pull e un git push vengono emessi a ogni Git sync. L’istanza PowerShell Universal è in lettura-scrittura.
Unidirezionale
In modalità unidirezionale, un git pull viene emesso a ogni Git sync. L’istanza PowerShell Universal è in sola lettura. È utile per gli ambienti di produzione in cui le modifiche arrivano tramite pull request e non vengono fatte direttamente sul server PowerShell Universal.
Solo push
In modalità solo push, un git push viene emesso se esistono modifiche a ogni Git sync. L’istanza PowerShell Universal è in lettura-scrittura ma non riceve modifiche dal remote. È utile quando si modificano file in un ambiente di debug e non si desidera gestire conflitti di merge provenienti dal remote.
Problemi comuni
Di seguito alcuni problemi comuni che può incontrare con Git sync.
Conflitti di merge
PowerShell Universal non gestisce i conflitti di merge e richiedono un intervento manuale. Per questo motivo, può essere desiderabile avere gli ambienti di produzione in modalità Git sync unidirezionale per evitare modifiche locali. Tutte le modifiche e i merge verranno eseguiti con gli strumenti git disponibili nel repository o in altri ambienti di sviluppo locali.
Se desidera un ambiente di produzione in lettura/scrittura con più nodi, si raccomanda di configurare più nodi unidirezionali e un singolo nodo bidirezionale.
Se incontra un conflitto di merge, dovrà modificare i file direttamente sul server PSU per risolverlo.
Problemi di autenticazione
Ogni server remote git è un po’ diverso. Ad esempio, Bitbucket ha diversi livelli di token HTTP e deve assicurarsi che siano configurati correttamente per i propri repository. Consigliamo di verificare di poter clonare i repository con un client git standard prima di tentare di usare un token in PowerShell Universal. Se desidera testare le credenziali in PowerShell Universal, può usare il pulsante Synchronize Now nella pagina Git per verificare l’accesso senza attendere la Git sync pianificata.
Problemi SSL
Il client git interno non consente di accettare certificati non attendibili. Se il server ha problemi con le connessioni SSL, potrebbe dover configurare un client git esterno e impostare le impostazioni git config appropriate per evitare errori e accettare eventuali insicurezze derivanti da tali modifiche.
Git si blocca
Per impostazione predefinita, il processo Git sync di PowerShell Universal attende 60 secondi che il processo git.exe termini. In alcuni sistemi, git può aprire un’interfaccia per le credenziali. Questo può far sì che Git sync si blocchi e fallisca.
Pronto a iniziare a creare? Scarichi PowerShell Universal.

Adam Driscoll