Verbessern Sie die Leistung der Azure-Pipeline, indem Sie die Checkout-Zeit verkürzen

Lesezeit: 3 Minuten

Wir verwenden Azure Devops schon seit einiger Zeit und haben eine sehr große Suite in einem Repository mit einer umfangreichen Yaml-Pipeline. Es hat alle Arten von parallelen Jobs, und wir haben mehrere gehostete Agenten zur Verfügung, um die Jobs parallel auszuführen. Um Builds zu beschleunigen, führe ich alle Arten von Optimierungen durch (wie das Zwischenspeichern von Nuget-Paketen). Aufgrund der Größe unseres Repositorys werden die Pipeline-Jobs jedoch etwa zweieinhalb Minuten ausgeführt, bevor überhaupt eine Aufgabe gestartet wird, da die Checkout-Aufgabe ausgeführt wird, um die Quelle zum gehosteten Agenten zu bringen.

Wir haben wahrscheinlich zu Beginn unseres Projekts einige große unnötige Dateien zum Repository hinzugefügt, und dies hat wahrscheinlich dazu geführt, dass das Repository ein wenig aufgebläht wurde. Ich habe eine Dokumentation darüber gefunden, wie man große Dateien aus dem Repository entfernt, aber das Dokument ist ziemlich vage darüber. Ist dies ein geeigneter Weg, um zu versuchen, die Checkout-Zeit zu verbessern? Wenn ja, gibt es jemanden, der mir eine detaillierte Beschreibung geben kann, wie ich unerwünschte Dateien aus einem Git-Repository entfernen und diese an Azure Devops weitergeben kann?

Wenn es noch andere Dinge gibt, die ich tun kann, um die Checkout-Geschwindigkeit zu verbessern (abgesehen von der Verwendung privater Agenten), bin ich offen für Ideen

Danielorns Benutzeravatar
danielorn

Das Checkout-Verhalten kann durch die angepasst werden checkout Stichwort. Insbesondere ist es möglich, die fetchDepth (standardmäßig unbegrenzt), um einen flachen Abruf durchzuführen, der die Leistung verbessern könnte.

Ab der Azure-Entwicklerdokumentation Flacher Abruf:

Wenn Ihr Repository groß ist, kann diese Option Ihre Build-Pipeline effizienter machen. Ihr Repository kann groß sein, wenn es schon lange verwendet wird und eine beträchtliche Historie hat. Es kann auch groß sein, wenn Sie große Dateien hinzugefügt und später gelöscht haben.

Beispiel einer Yaml-Pipeline:

steps:
- checkout: self
  clean: true
  fetchDepth: 1 # Fetch only one commit
  path: PutMyCodeHere

Azure-Entwicklerdokumentation für wie man fetchDepth angibt in Yaml-Pipelines

  • Das klingt wirklich vielversprechend. Ich werde es ausprobieren, um zu sehen, wie die Wirkung ist

    – PaulVrugt

    10. April 2020 um 18:48 Uhr

  • Gibt es irgendwelche Nachteile, wenn man nur 1 Commit von Git bekommt? Für die Erstellung eines Builds.

    – Rik de Peuter

    29. Januar 2021 um 13:20 Uhr


  • Nein, solange Sie nur mit dem aktuellen Commit interagieren, was in der Regel bei einem Build der Fall ist, gibt es keine Nachteile. Was Sie nicht tun können, ist zum Beispiel, den Git-Verlauf anzuzeigen oder mit anderen Commits oder Branches zu checken oder zu vergleichen. (Vergleich mit dem vorherigen Commit kann leicht gelöst werden, indem angegeben wird fetchDepth: 2aber um mit einem beliebigen Commit oder Zweig auszuchecken oder zu vergleichen, müssen Sie das gesamte Repo klonen, aber das sind keine Aktionen, die normalerweise in einem Build durchgeführt werden.

    – danielorn

    29. Januar 2021 um 16:39 Uhr

  • @danielorn Wissen Sie, ob Tools wie GitVersion in der Lage sein werden, die richtige Versionsnummer zu ermitteln? ZB beim Erstellen des Entwicklungszweigs muss es wahrscheinlich Tags aus dem Master-/Hauptzweig lesen?

    – huysentruitw

    17. Januar 2022 um 13:59 Uhr

  • @Eccentropy, Ja, jede Operation, die den vergangenen Verlauf und nicht nur den ausgewählten Commit erfordert, wird durch die Angabe von beeinflusst fetchDepth

    – danielorn

    26. September 2022 um 7:06 Uhr

Wenn Sie die akzeptierte Antwort ergänzen, finden Sie möglicherweise fetchTags sehr hilfreich, wenn Ihr Repo viele Tags hat und Sie sie nicht in Ihrer Pipeline benötigen.

Während unser Checkout-Schritt mit nur 6 Minuten dauerte fetchDepth: 1als wir hinzufügten fetchTags: falsewurde der Klonschritt auf 30 Sekunden reduziert. Unser Checkout-Schritt sieht jetzt so aus.

  - checkout: self
    fetchDepth: 1
    fetchTags: false

1445640cookie-checkVerbessern Sie die Leistung der Azure-Pipeline, indem Sie die Checkout-Zeit verkürzen

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy