Freigeben über


Ausführen von Git-Befehlen in Pipelineskripts

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

Git-Befehle stehen für Erstellungsworkflows auf von Microsoft gehosteten und selbst gehosteten Agents zur Verfügung. Beispielsweise können Sie die Verzweigung zusammenführen, nachdem ein CI-Build (Continuous Integration) für einen Featurezweig abgeschlossen ist. 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 GitHub die Standardidentität Ihres Azure DevOps-Kontos verwendet. Legen Sie bei Bedarf den GitHub-Benutzer als ersten Schritt nach dem Auschecken fest.

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

Erteilen von Berechtigungen für den Builddienst

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 in den Projekteinstellungen für Ihr Projekt Repositorys unter "Repositorys" 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 Builddienstidentität aus. Achten Sie darauf, den Projektnamen< Builddienst (>Organisation<) unter "Benutzer" und nicht unter "Project Collection Build Service Accounts" auszuwählen>. Standardmäßig kann diese Identität aus dem Repository gelesen werden, aber keine Änderungen daran senden.

  4. Wählen Sie in der Liste neben den für die Git-Befehle erforderlichen Git-Befehlen die Option "Zulassen" aus, in der Regel "Verzweigung erstellen", "Mitwirken", " Lesen" und " Erstellen".

    Screenshot der Gewährung der Identitätsberechtigungen für Repositorys.

Zulassen, dass Skripts auf das Systemtoken zugreifen

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

Fügen Sie ihrer YAML-Pipeline einen checkout Schritt hinzu, der persistCredentials auf " festgelegt" truefestgelegt ist.

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, z. B. 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 von Microsoft gehostete Agents nicht wirksam, da sie jedes Mal einen neuen Agent verwenden. Weitere Informationen finden Sie unter Bereinigen des lokalen Repositorys für den Agent.

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

Legen Sie clean diese true Einstellung im Schritt festcheckout. Diese Option wird vor dem Abrufen ausgeführt git clean -ffdxgit reset --hard HEAD .

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 Pipelinebeispiel wird ein CI-Build zusammengeführt, zu main dem der Build erfolgreich ist.

  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 auf 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 Agent zum Ausführen von Pipelines?

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

Wie kann ich Probleme beheben?

Siehe Problembehandlung bei Pipelineausführungen.

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

Siehe Erstellen und Verwalten von Agentpools.

Wie kann ich meinen NuGet-Pushvorgang mit "Fehler: Kann kein lokales Ausstellerzertifikat abrufen" beheben?

Sie können dieses Problem beheben, indem Sie ein vertrauenswürdiges Stammzertifikat hinzufügen. Fügen Sie der Build-Agent entweder die NODE_EXTRA_CA_CERTS=file Umgebungsvariable hinzu, oder fügen Sie die NODE.EXTRA.CA.CERTS=file Aufgabenvariable in Ihrer Pipeline 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 nicht in meinem lokalen Azure DevOps-Server angezeigt?

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