Verwendung von Git auf einem Continuous Integration Build Server

8

Wir haben einen Build-Server, der entworfen wurde, um eine Version des Codes von git auszuchecken und zu bauen. Im Allgemeinen wird der Server den Zweig develop auschecken und erstellen, aber er kann von einer GUI gesteuert werden, um einen bestimmten Zweig oder ein bestimmtes Tag zu erstellen.

Unser Git-Archiv ist groß, also wollen wir nur einmal ein git clone durchführen. Meine Frage ist also: Welche Sequenz von Git-Befehlen sollte ausgegeben werden, um das aktuelle Arbeitsverzeichnis bezüglich des Remote-Git-Archivs auf den neuesten Stand zu bringen.

Mein anfänglicher naive Versuch wurde gerade durchgeführt git checkout <branch> , gefolgt von git pull . Dies berücksichtigte jedoch nicht alle Artefakte, die durch den vorherigen Build erzeugt wurden, der gelöscht werden musste, sowie einige automatische Code-Modifikationen, die durch den Build-Prozess vorgenommen wurden, z. zu den Versionsnummern in Assembly-Dateien.

Was wir also brauchen, ist die Befehlsfolge nach

  1. Entfernen Sie alle Änderungen am lokalen Verzeichnis
  2. Aktualisieren Sie das lokale Repository, um ALLE Commits vom Remote-Server
  3. einzuschließen
  4. Überprüfen Sie den benannten Zweig oder das angegebene Tag

Bitte beachten Sie, dass der benannte Zweig oder Tag möglicherweise nicht bereits im lokalen Repository bekannt ist. Wenn beispielsweise auf dem Remote-Server ein neuer Zweig release/xxx erstellt wird, ist dies dem lokalen Erstellungscomputer nicht a priori bekannt. Dies ist ein weiteres Problem, auf das meine naive Einstellung gestoßen ist.

Und schließlich ist es möglich, dass der git-Server gelegentlich seine Geschichte korrigiert hat. Ich bin sicher, dass dies ein seltenes Ereignis sein wird, aber es wäre wünschenswert, wenn der Integrationsserver keine Anpassung nach einem Historienumschreiben benötigt.

Vielen Dank

    
Rob 09.05.2016, 18:05
quelle

2 Antworten

2

Dies ist der Mechanismus, den wir derzeit verwenden. % Co_de% wird nur einmal als Teil des Setups ausgeführt, und dann wird für jeden Build das Folgende ausgeführt.

Ich habe die Fehlerbehandlung aus Gründen der Übersichtlichkeit entfernt.

%Vor%

Wir haben neue Tags / Zweige auf einem Entwicklungscomputer erstellt, diese auf den Server übertragen und dieses Skript ruft sie korrekt ab und erstellt die Ergebnisse. Wir haben mit dem Hinzufügen des Präfix git clone zu den Zweig- oder Markennamen experimentiert, aber dieser Ansatz funktionierte nicht für uns (die Markennamen wurden nicht erkannt).

Ich denke, der Hauptunterschied zwischen diesem Skript und der viel einfacheren Antwort von @Yasser ist, dass der Git HEAD auf die richtige Stelle zeigt und der Befehl origin/ eine vernünftige Antwort gibt. Ob das wichtig ist - ich bin mir nicht sicher.

    
Rob 12.05.2016, 09:17
quelle
4

Wenn Sie Ihre .gitignore korrekt eingerichtet haben, sollten Sie einfach

tun können %Vor%

Das sollte einen sauberen Build erzeugen.

    
yelsayed 09.05.2016 22:00
quelle

Tags und Links