Eseguire i comandi Git in uno script

Azure DevOps Services | Azure DevOps Server 2022 - Azure DevOps Server 2019

Per alcuni flussi di lavoro, è necessario che la pipeline di compilazione esegua comandi Git. Ad esempio, al termine di una compilazione CI in un ramo di funzionalità, il team potrebbe voler unire il ramo a al ramo principale.

Git è disponibile in agenti ospitati da Microsoft e in agenti locali.

Abilitare gli script per eseguire comandi Git

Nota

Prima di iniziare, assicurarsi che l'identità predefinita dell'account sia impostata con il codice seguente. Questa operazione deve essere eseguita come primo passaggio dopo aver estratto il codice.

git config --global user.email "you@example.com"
git config --global user.name "Your Name"

Concedere le autorizzazioni di controllo della versione al servizio di compilazione

  1. Passare alla pagina delle impostazioni del progetto per l'organizzazione in Organization Impostazioni> General>Projects (Progetti generali).

    Selezionare le impostazioni dell'organizzazione.

  2. Selezionare il progetto da modificare.

    Selezionare il progetto.

  3. In Project Impostazioni selezionare Repository. Selezionare il repository in cui si vogliono eseguire i comandi Git.

  4. Selezionare Sicurezza per modificare la sicurezza del repository.

    Scegliere Sicurezza per modificare la sicurezza del repository.

  5. Cercare Project Collection Build Service( Servizio di compilazione raccolta progetti). Scegliere l'identità {{nome progetto}} Build Service ({organizzazione}) (non gli account del servizio di compilazione raccolta progetti ({organizzazione})). Per impostazione predefinita, questa identità può leggere dal repository, ma non può eseguire il push delle modifiche. Concedere le autorizzazioni necessarie per i comandi Git da eseguire. In genere si vuole concedere:

    • Crea ramo: Consenti
    • Contribuire: Consenti
    • Lettura: Consenti
    • Crea tag: Consenti

Passare alla scheda Controllo della versione

  • Azure Repos: https://dev.azure.com/{your-organization}/{your-project}/_admin/_versioncontrol

  • Locale: https://{your-server}:8080/tfs/DefaultCollection/{your-project}/_admin/_versioncontrol

gestire il progetto

Se viene visualizzata questa pagina, selezionare il repository e quindi selezionare il collegamento:

pannello di controllo dall'alto al progetto

Scheda controllo della versione del progetto del pannello di controllo

Nella scheda Controllo della versione selezionare il repository in cui si desidera eseguire i comandi Git e quindi selezionare Project Collection Build Service (Servizio compilazione raccolta progetti). Per impostazione predefinita, questa identità può leggere dal repository, ma non può eseguire il push delle modifiche.

autorizzazioni

Concedere le autorizzazioni necessarie per i comandi Git da eseguire. In genere si vuole concedere:

  • Crea ramo: Consenti
  • Contribuire: Consenti
  • Lettura: Consenti
  • Crea tag: Consenti

Al termine della concessione delle autorizzazioni, assicurarsi di selezionare Salva modifiche.

Consentire agli script di accedere al token di sistema

Aggiungere una checkout sezione con persistCredentials impostato su true.

steps:
- checkout: self
  persistCredentials: true

Altre informazioni su checkout.

Nella scheda opzioni selezionare Consenti agli script di accedere al token OAuth.

Assicurarsi di pulire il repository locale

Alcuni tipi di modifiche al repository locale non vengono puliti automaticamente dalla pipeline di compilazione. Assicurarsi quindi di:

  • Eliminare i rami locali creati.
  • Annullare le modifiche alla configurazione Git.

Se si verificano problemi con un agente locale, assicurarsi che il repository sia pulito:

Assicurarsi di checkout aver clean impostato su true.

steps:
- checkout: self
  clean: true
  • Nella scheda repository impostare Pulisci su true.

  • Nella scheda variabili creare o modificare la Build.Clean variabile e impostarla su source

Esempi

Elencare i file nel repository

Nella scheda Compilazione aggiungere questa attività:

Attività Argomenti

Utilità: riga di comando
Elencare i file nel repository Git.
Strumento: git

Argomenti: ls-files

Unire un ramo di funzionalità a main

Se la compilazione ha esito positivo, si vuole che una compilazione CI venga unione a main.

Nella scheda Trigger selezionare Integrazione continua (CI) e includere i rami da compilare.

Creare merge.bat nella radice del repository:

@echo off
ECHO SOURCE BRANCH IS %BUILD_SOURCEBRANCH%
IF %BUILD_SOURCEBRANCH% == refs/heads/main (
   ECHO Building main branch so no merge is needed.
   EXIT
)
SET sourceBranch=origin/%BUILD_SOURCEBRANCH:refs/heads/=%
ECHO GIT CHECKOUT MAIN
git checkout main
ECHO GIT STATUS
git status
ECHO GIT MERGE
git merge %sourceBranch% -m "Merge to main"
ECHO GIT STATUS
git status
ECHO GIT PUSH
git push origin
ECHO GIT STATUS
git status

Nella scheda di compilazione aggiungere questa opzione come ultima attività:

Attività Argomenti

Utilità: Script batch
Eseguire merge.bat.
Percorso: merge.bat

Domande frequenti

È possibile eseguire comandi Git se il repository remoto si trova in GitHub o in un altro servizio Git, ad esempio Bitbucket Cloud?

Quali attività è possibile usare per eseguire comandi Git?

Script Batch

Riga di comando

PowerShell

Script della shell

Ricerca per categorie evitare di attivare una compilazione CI quando lo script esegue il push?

Aggiungere ***NO_CI*** al messaggio di commit. Ecco alcuni esempi:

  • git commit -m "This is a commit message ***NO_CI***"
  • git merge origin/features/hello-world -m "Merge to main ***NO_CI***"

Aggiungere [skip ci] al messaggio o alla descrizione del commit. Ecco alcuni esempi:

  • git commit -m "This is a commit message [skip ci]"
  • git merge origin/features/hello-world -m "Merge to main [skip ci]"

È anche possibile usare una di queste varianti per i commit in Git Azure Repos, Bitbucket Cloud, GitHub ed GitHub Enterprise Server.

  • [skip ci] oppure [ci skip]
  • skip-checks: true oppure skip-checks:true
  • [skip azurepipelines] oppure [azurepipelines skip]
  • [skip azpipelines] oppure [azpipelines skip]
  • [skip azp] oppure [azp skip]
  • ***NO_CI***

È necessario un agente?

È necessario almeno un agente per eseguire la compilazione o il rilascio.

Ho problemi. Come è possibile risolvere i problemi?

Vedere Risolvere i problemi di compilazione e rilascio.

Non è possibile selezionare un pool di agenti predefinito e non è possibile accodamento della build o del rilascio. Come lo risolvo?

Vedere Pool di agenti.

L'attività push NuGet ha esito negativo con l'errore seguente: "Errore: impossibile ottenere il certificato dell'autorità di certificazione locale". Come si risolve questo problema?

Questo errore può essere corretto mediante l'aggiunta di un certificato radice attendibile. È possibile aggiungere la variabile di ambiente NODE_EXTRA_CA_CERTS=file all'agente di compilazione oppure aggiungere la variabile di attività NODE.EXTRA.CA.CERTS=file nella pipeline. Per altre informazioni su questa variabile, vedere la documentazione di Node.js. Per istruzioni sull'impostazione di una variabile nella pipeline, vedere Impostare le variabili in una pipeline.

Si usano TFS in locale e alcune di queste funzionalità non vengono visualizzate. Perché no?

Alcune di queste funzionalità sono disponibili solo in Azure Pipelines e non sono ancora disponibili in locale. Alcune funzionalità sono disponibili in locale se è stato eseguito l'aggiornamento alla versione più recente di TFS.