web-dev-qa-db-de.com

Ausführen von git-Befehlen innerhalb eines Build-Jobs in Visual Studio Team Services (früher VSO)

[Umgebung: Team Services, GIT, gehosteter Build-Agent]

Ich möchte eine Team Services-Builddefinition erstellen, mit der Folgendes möglich ist:

  1. Ausführen eines Skripts zum Generieren neuer Dateien basierend auf vorhandenen Dateien im Repo

  2. Commit/Push diese generierten Dateien zurück zum Repo

Ich kann Nr. 1 ohne Probleme machen. Aber ich bin nicht sicher, wie ich # 2 machen kann.

Ich entdeckte, dass ich git.exe tatsächlich in einem Build-Job ausführen konnte. Aber ich bin mir nicht sicher, wie ich das Zeugnis an git weitergeben kann. Basierend auf den Build-Protokollen schlägt das fehl, weil versucht wird, den Benutzernamen von stdin abzurufen.

Ich habe versucht, einen Schritt in der Build-Definition mit etwas wie "git config --global user.name xxxx" hinzuzufügen, aber es hat trotzdem nicht geholfen.

Ist das überhaupt ein unterstütztes Szenario? Irgendwelche Vorschläge?

Vielen Dank!


Bearbeiten

Ich habe den folgenden Ansatz in meinem Build-Skript ausprobiert:

git -c http.extraheader="AUTHORIZATION: bearer %SYSTEM_ACCESSTOKEN%" pull ...

Es schien für Befehle wie z. B. Pull zu funktionieren. Als ich jedoch die Änderungen pushen wollte, bekam ich den folgenden Fehler:

fatal: unable to access 'https://example.visualstudio.com/SampleTeam/_git/SampleRepo/': SSL read: error:00000000:lib(0):func(0):reason(0), errno 10054

Gedanken?

21
Yutao Huang

Tut mir leid, meine eigene Frage hier zu beantworten ...

Ich habe gerade einen Hinweis von einem TFS-Experten erhalten, der mich auf diesen Artikel verwies: https://www.visualstudio.com/en-us/docs/build/scripts/git-commands , der perfekt ist mein problem gelöst.

Ich denke, ich sollte es teilen, um jedem zu helfen, der in die gleiche Situation gerät wie ich.

Hier zitiere ich die wichtigsten Schritte (etwas umformatiert):

Erteilen Sie dem Build-Service Versionskontrollberechtigungen

Wechseln Sie zur Registerkarte Versionskontrolle

  • Teamdienste: https: // {Ihr-Konto} .visualstudio.com/DefaultCollection/{Ihr-Team-Projekt}/_admin/_versioncontrol

  • Vor Ort: https: // {Ihr-Server}: 8080/tfs/DefaultCollection/{Ihr-Team-Projekt}/_admin/_versioncontrol

Wählen Sie auf der Registerkarte Versionskontrolle das Repository aus, in dem Sie Git-Befehle ausführen möchten, und wählen Sie dann Project Collection aus Build Service (account_name) . Erteilen Sie die erforderlichen Berechtigungen für die Git-Befehle, die Sie ausführen möchten. In der Regel möchten Sie Folgendes gewähren:

  • Erstellung von Zweigen : Zulassen
  • Mitmachen : Zulassen
  • Read : Inherited allow
  • Tag-Erstellung : Geerbt erlauben

Wenn Sie die Berechtigungen erteilt haben, klicken Sie auf Änderungen speichern .

Aktivieren Sie Ihre Build-Definition, um Git.exe auszuführen

  • Stellen Sie auf der Registerkarte Variablen diese Variable ein: system.prefergit = true
  • Wählen Sie auf der Registerkarte Optionen Skriptzugriff zulassen OAuth Token .

Mit diesen Einstellungen ist es nicht erforderlich, die Git Build Tools-Erweiterung zu installieren oder den Anmeldeinformations-Manager zu optimieren. Sie müssen den zusätzlichen Header für OAuth token auch nicht explizit setzen. Ich denke, es ist in der Tat eine sehr saubere Lösung. :)

Aber danke für die Hilfe von Eddie und VonC!

38
Yutao Huang

Visual Studio Team Services (VSTS) verfügt jetzt über eine integrierte Funktionalität, um dies auszuführen:

  1. Gewähren Sie dem Konto Project Collection Build Service (Kontoname) Zugriff auf das entsprechende Repository in VSTS.
  2. Aktivieren Sie in der Agentenphase das Kontrollkästchen Skripts für den Zugriff auf das OAuth-Token zulassen.
  3. Innerhalb der Task können Sie nun auf die Variable SYSTEM_ACCESSTOKEN verweisen, um auf das git-Repository zuzugreifen: git clone https://randomusername:${SYSTEM_ACCESSTOKEN}@instance.visualstudio.com/proj1/_git/repo

Ref: https://github.com/Microsoft/vsts-tasks/issues/962

4
PotatoFarmer

Sie können Git Build Tools extension installieren und dann die Task "Erlaube Git-Fernzugriff" in Ihre Build-Definition einfügen. Stellen Sie sicher, dass die Funktion "Skripts für den Zugriff auf OAuth-Token zulassen" auf der Registerkarte "Optionen" aktiviert ist.

Aktivieren Sie Git Remote Access

Bestimmte Vorgänge erfordern den Zugriff auf das Remote-Repository von ein Build Diese Task aktualisiert ein Remote des Git-Repositorys auf dem Agenten So ermöglichen Sie den Zugriff auf das Upstream-Repository in Visual Studio Team Dienstleistungen.

Bedarf

Damit dieser Build-Task ausgeführt werden kann, müssen die Skripts zulassen Die Option "Zugriff auf OAuth-Token" wird in den Builddefinitionsoptionen festgelegt.

Parameter

Aktivieren Sie Git Remote Access

Name der Fernbedienung: Name der Fernbedienung, die aktualisiert werden soll. Voreinstellung ist Ursprung.

Verwandte Aufgaben

Wiederherstellen Git Remote sollte am Ende der Build-Definition aufgerufen werden um die Fernbedienung auf ihren ursprünglichen Wert zurückzusetzen.

Bekannte Probleme

Git-Lfs-Operationen wie git lfs fetch funktionieren damit immer noch nicht. Sehen diese Git-Lfs Ausgabe

Fügen Sie die Schritte für die Verwendung des Powershell-Skripts in der Erweiterung hinzu:

  1. Erstellen Sie ein Power-Shell-Skript mit dem Code im Skript "EnableGitRemoteAccess.ps1", und fügen Sie das Skript der Quellcodeverwaltung hinzu.
  2. Aktivieren Sie in der Build-Definition die Option "Skripts für den Zugriff auf OAuth-Token zulassen".
  3. Fügen Sie der Build-Definition eine PowerShell-Aufgabe hinzu, und legen Sie den Skriptpfad für das Skript fest, um den git-Remotezugriff zu aktivieren  enter image description here
  4. Fügen Sie in der Build-Definition eine weitere PowerShell-Aufgabe hinzu, um die Änderungen zu bestätigen und zu übernehmen.

Der Code, den ich für Commit- und Push-Änderungen verwende:

git add .
git commit -m "changesinbuild"
git Push Origin master 2>&1 | Write-Host
3

Jede Datei, die Sie aus der Quelle generieren können, wird im Allgemeinen als Build-Artefakt betrachtet, und not fügte/zu einem Git-Repo hinzu.

Das heißt, wenn Sie können, sollten Sie eine ssh-URL anstelle einer https-URL verwenden: ssh würde einen ssh-Schlüssel benötigen. Wenn Ihr privater ssh-Schlüssel ohne Passphrasen ist, muss git nichts über stdin abfragen.

Eine andere Möglichkeit ist die Verwendung von Microsoft GCH (Git Credential Helper) , die in Git für Windows enthalten ist (seit Git 2.7.3 , März 2016).
Siehe diese Antwort für ein Beispiel. Das würde Ihren Benutzernamen/Ihr Passwort im Windows-Anmeldeinformationsspeicher zwischenspeichern.

1
VonC

Dies ist nur eine Fortsetzung von Tonys Blues-Antwort.

Ich kann leider keine Links posten, da meine Reputation unter 10 liegt, aber alle sind auf der visualstudio-Website zu finden. Ich bin mir also sicher, dass Sie das selbst herausfinden können.

Um GIT-Beiträge in einem Skript zuzulassen, müssen Sie

  1. Stellen Sie sicher, dass Sie alle in den VSTS Agent-Voraussetzungen genannten Dinge erledigt haben

  2. Stellen Sie sicher, dass Sie die Anweisungen unter/de-de/docs/build/scripts/git-commands befolgt haben

    • Fügen Sie insbesondere die erforderlichen Berechtigungen zu Project Build Service-Konto in Ihrem Repository hinzu - mindestens Contribute (Sie können auch andere Berechtigungen entsprechend Ihren Anforderungen in Betracht ziehen) - Dies ist das echte Ursache für "SSL-Lesefehler"

Der Unterschied zwischen diesem Beitrag und dem von Tony besteht darin, dass wir in unserer Konfiguration (TFS 2015; VSTS Agent auf Mac OS Sierra installiert) die Berechtigung "Contribute" für das Konto "Project Build Service" hinzufügen mussten. also nicht das Konto mit der im Namen genannten Wort "Sammlung". Seien Sie auch vorsichtig und verwechseln Sie es nicht mit der Gruppe mit dem Namen Project Collection Build Service Accounts - Ich glaube, dass sie unter bestimmten Bedingungen verwendet werden kann, aber standardmäßig nicht funktioniert. Ich weise darauf hin, da ich dies versehentlich getan habe und daher zusätzliche Zeit damit verbracht habe, das Problem zu beheben.

Bitte überprüfen Sie folgendes Bild Sie finden es in Ihrem Projekt -> Systemsteuerung -> Versionskontrolle -> GIT-Repository

Seien Sie auch vorsichtig mit den Systemanforderungen, da in meinem Fall (unter MacOS Sierra) der Teil mit den symbolischen Links für zwei bestimmte Verzeichnisse kritisch wurde. Spezifische Systemanforderungen für OSX finden Sie unter [github] /Microsoft/vsts-agent/blob/master/docs/start/envosx.md und states

Installiere openssl

$ brew update
$ brew install openssl

Erstelle symbolische Links zu openssl libs - dies wird unter MacOS (Sierra) benötigt

$ mkdir -p /usr/local/lib/
$ ln -s /usr/local/opt/openssl/lib/libcrypto.1.0.0.dylib /usr/local/lib/
$ ln -s /usr/local/opt/openssl/lib/libssl.1.0.0.dylib /usr/local/lib/

Finden Sie Ihre Version von GIT heraus

$ git --version

pdate GIT für den Fall, dass Sie weniger als 2.9.0 haben

$ brew update
$ brew install git
0
T. Tiscalli

Ich hatte das gleiche Problem. Die Lösung bestand darin, die git config-Optionen in den Skriptteil des yaml zu stellen. In dieser GitHub-Ausgabe finden Sie Beispiele:

https://github.com/Microsoft/Azure-pipelines-agent/issues/1925

0
mwilson