Freigeben über


Ausführen von Git-Befehlen in Pipelineskripts

Azure DevOps Services | Azure DevOps Server | Azure DevOps Server 2022

Git-Befehle sind für Buildworkflows auf Microsoft-hosted und self-hosted Agents verfügbar. Beispielsweise können Sie den Feature-Branch nach Abschluss eines CI-Builds (Continuous Integration) in den Haupt-Branch zusammenführen. In diesem Artikel wird erläutert, wie Git-Befehle in Azure Pipelines Buildskripts ausgeführt werden.

Aktivieren von Skripts zum Ausführen von Git-Befehlen

Stellen Sie sicher, dass Git die Standardidentität Ihres Azure DevOps Kontos verwendet. Legen Sie bei Bedarf den Git-Benutzer als ersten Schritt nach dem Auschecken fest.

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

Berechtigungen für den Build-Service erteilen

Der Projektbuilddienst muss über Berechtigungen zum Schreiben in das Quell-Repository verfügen. Legen Sie die erforderlichen Berechtigungen wie folgt fest:

  1. Wählen Sie im Project Settings für Ihre project Repositories unter Repos aus.

  2. Wählen Sie auf der Seite "Alle Repositorys " die Option "Sicherheit " aus, um Berechtigungen für alle Repositorys im Projekt festzulegen. Oder wählen Sie das Repository aus, auf dem Git-Befehle ausgeführt werden sollen, und wählen Sie dann auf der Seite dieses Repositorys "Sicherheit " aus.

    Sreenshot, der zeigt, dass

  3. Wählen Sie auf der Seite Benutzerberechtigungen die Build-Service-Identität aus. Wählen Sie unbedingt <Projektname> Builddienst (<organization>) unter Benutzer aus, nicht Project Collection Build-Dienstkonten. Standardmäßig kann diese Identität aus dem Repository lesen, aber keine Änderungen daran pushen.

  4. Wählen Sie in der Liste neben jeder für die Git-Befehle erforderlichen Berechtigung die Option "Zulassen" aus, in der Regel Branch erstellen, Mitwirken, Lesen und Tag erstellen.

    Screenshot vom Gewähren von Identitätsberechtigungen für Repositories.

Zulassen, dass Skripts auf das Systemtoken zugreifen

So ermöglichen Sie Skripts den Zugriff auf das GitHub OAuth-Token:

Fügen Sie Ihrer YAML-Pipeline einen checkout-Schritt mit persistCredentials auf true festgelegt hinzu.

steps:
- checkout: self
  persistCredentials: true

Weitere Informationen zum checkout Schritt finden Sie in der steps.checkout Definition.

Bereinigen des lokalen Repositorys

Die Buildpipeline bereinigt bestimmte Änderungen am lokalen Repository nicht automatisch, wie zum Beispiel das Löschen lokaler Verzweigungen oder das Rückgängigmachen lokaler git config Änderungen. Wenn Bei der Verwendung eines selbst gehosteten Agents Probleme auftreten, können Sie das Repository bereinigen, bevor Sie den Build ausführen.

Im Allgemeinen müssen Sie das Repository nicht bereinigen, um die Leistung von selbst gehosteten Agents zu beschleunigen. Die Reinigung ist für Microsoft gehostete Agents nicht wirksam, da sie jedes Mal einen neuen Agent verwenden. Weitere Informationen finden Sie unter Bereinigung des lokalen Repositories des Agenten.

So bereinigen Sie das Repository, bevor Sie den Build ausführen:

Legen Sie clean auf true im Schritt checkout fest. Diese Option führt git clean -ffdx gefolgt von git reset --hard HEAD aus, bevor abgerufen wird.

steps:
- checkout: self
  clean: true

Wählen Sie Variablen im Pipeline-Editor aus, erstellen oder ändern Sie die Build.Clean Variable, und legen Sie den Wert auf source.

Git-Befehlsbeispiele

In den folgenden Beispielen werden Git-Befehle in einer Befehlszeilenaufgabe und einer Batchskriptaufgabe ausgeführt.

Auflisten der Dateien in Ihrem Repository

Um die Dateien im Git-Repository auflisten zu können, verwenden Sie die Befehlszeilenaufgabe in einer YAML-Pipeline wie folgt:

- task: CmdLine@2
  inputs:
    script: 'git ls-files'

Zusammenführen einer Feature-Verzweigung zum Hauptteil

Im folgenden klassischen Pipeline-Beispiel wird ein CI-Build zusammengeführt, wenn der Build erfolgreich ist, zu main.

  1. Erstellen Sie eine Datei namensmerge.bat im Stammverzeichnis Ihres Repositorys mit dem folgenden Inhalt:

    @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
    
  2. Aktivieren Sie auf der Registerkarte "Trigger" in Ihrer klassischen Pipeline das Kontrollkästchen, um die kontinuierliche Integration zu aktivieren.

  3. Wählen Sie unter "Verzweigungsfilter " und "Pfadfilter" Verzweigungen und Pfade aus, die aus dem Build eingeschlossen oder ausgeschlossen werden sollen.

  4. Fügen Sie ein Batchskript als letzte Aufgabe in Ihrer Pipeline hinzu.

  5. Geben Sie unter "Pfad " in der Aufgabenkonfiguration den Speicherort und den Namen der merge.bat Datei ein.

Häufig gestellte Fragen

Kann ich Git-Befehle ausführen, wenn sich mein Remote-Repository in GitHub oder einem anderen Git-Dienst wie Bitbucket Cloud befindet?

Ja, Sie können Git-Befehle ausführen, wenn sich Ihr Remote-Repository in GitHub oder einem anderen Git-Dienst wie Bitbucket Cloud befindet.

Welche Aufgaben kann ich zum Ausführen von Git-Befehlen verwenden?

Sie können die folgenden Azure Pipelines Aufgaben verwenden, um Git-Befehle auszuführen:

Wie kann ich vermeiden, einen CI-Build auszulösen, wenn das Skript pusht?

Um zu vermeiden, dass ein CI-Build ausgelöst wird, wenn das Skript pusht, fügen Sie [skip ci] Ihrer Commit-Nachricht oder -Beschreibung hinzu. Beispiel:

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

Sie können auch eine der folgenden Variationen für Commits für Azure Repos Git, Bitbucket Cloud, GitHub oder GitHub Enterprise Server verwenden:

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

Benötige ich einen Agenten für das Ausführen von Pipelines?

Ja, Sie benötigen mindestens einen Agent , um Ihre Build- oder Releasepipeline auszuführen.

Wie kann ich Probleme beheben?

Siehe Fehlerbehebung bei Pipelineausführungen.

Wie kann ich das Problem beheben, dass ich keinen Standard-Agentpool auswählen kann oder dass ich meine Pipeline nicht in die Warteschlange einreihen kann?

Siehe Erstellen und Verwalten von Agentpools.

Wie kann ich das Problem bei meinem NuGet-Pushvorgang "Fehler: Kann kein lokales Ausstellerzertifikat abrufen" lösen?

Sie können dieses Problem beheben, indem Sie ein vertrauenswürdiges Stammzertifikat hinzufügen. Fügen Sie dem Build-Agenten entweder die NODE_EXTRA_CA_CERTS=file Umgebungsvariable hinzu, oder fügen Sie in Ihrer Pipeline die NODE.EXTRA.CA.CERTS=file Aufgabenvariable hinzu.

Weitere Informationen zu dieser Variablen finden Sie in der Node.js-Dokumentation unter NODE_EXTRA_CA_CERTS=datei . Anweisungen zum Festlegen einer Variablen in Ihrer Pipeline finden Sie unter Festlegen von Variablen in einer Pipeline.

Warum werden einige dieser Features in meinem lokalen Azure DevOps Server nicht angezeigt?

Einige dieser Features sind nur für Azure DevOps Services und nicht für lokale Azure DevOps Server verfügbar. Einige Features sind nur in der neuesten Version von Azure DevOps Server verfügbar.