Skip to main content

Übersicht

Standardmäßig ist jeder Snapshot-Build ein vollständiger Build — er startet mit einem sauberen Basis-Image, klont alle Repositorys und führt jedes Blueprint von Grund auf neu aus. Das gewährleistet eine vollständig reproduzierbare Umgebung, kann aber langsam sein, wenn Sie nur eines von vielen Blueprints geändert haben. Differenzielle Builds optimieren diesen Prozess, indem sie den Snapshot des vorherigen erfolgreichen Builds als Ausgangspunkt wiederverwenden. Nur Workspaces, deren Blueprints tatsächlich geändert wurden, werden neu gebaut; unveränderte Workspaces werden unverändert aus dem übergeordneten Build übernommen. Dadurch lassen sich die Build-Zeiten deutlich verkürzen, insbesondere für Organisationen mit vielen Repositorys.

Aktivieren von differenziellen Builds

1

Zu den Umgebungseinstellungen gehen

Gehen Sie zu Settings > Environment > Erweitert.
2

Den Schalter aktivieren

Aktivieren Sie den Schalter differenzielle Builds. Die Beschreibung lautet: „Schnellere Builds durch Wiederverwendung unveränderter Workspaces.“
3

Einen Build auslösen

Speichern Sie eine Blueprint-Änderung oder klicken Sie auf Build snapshot. Beim nächsten Build wird ein differenzieller Build verwendet, sofern ein gültiger übergeordneter Build vorhanden ist.
Das Aktivieren von differenziellen Builds erzwingt keinen vollständigen Build. Wenn bereits ein erfolgreicher oder teilweise erfolgreicher Build für dieselbe Plattform und Maschinenkonfiguration existiert, kann der nächste Build ihn als übergeordneten Build verwenden und dessen Zustand vererben. Nur in den unter Wann stattdessen ein vollständiger Build läuft aufgeführten Situationen läuft der nächste Build als vollständiger Build. Um von einer sauberen Ausgangsbasis zu starten, wählen Sie Vollständiger Build im Dropdown Build snapshot.

So funktioniert es

Wenn bei aktivierten differenziellen Builds ein Build ausgelöst wird, folgt das System diesem Ablauf:

  1. Einen übergeordneten Build finden

Das System sucht nach dem zuletzt erfolgreichen Build (Status success oder partial) mit einem Snapshot-Image für dieselbe Plattform und Maschinenkonfiguration, um ihn als übergeordneten Build zu verwenden. Wenn kein geeigneter übergeordneter Build vorhanden ist, fällt der Build automatisch auf einen vollständigen Build zurück.

  1. Blueprints vergleichen

Die Konfiguration jedes Workspaces wird mit dem übergeordneten Build verglichen. Das System berechnet für jeden Workspace einen Hashwert seiner Eingaben — einschließlich der Blueprint-Inhalte, angehängten Dateien und Secrets — und prüft, was sich geändert hat.

  1. Workspace-Aktionen zuweisen

Auf Grundlage des Vergleichs erhält jeder Workspace eine von drei Aktionen:
Bei vererbten Workspaces wird initialize nicht erneut ausgeführt. Schreiben Sie maintenance so, dass es in sich geschlossen ist und nach dem Abrufen des neuesten Codes eigenständig ausgeführt werden kann. Es kann Tools und Runtimes verwenden, die bereits im übergeordneten Snapshot installiert sind, darf aber nicht voraussetzen, dass initialize unmittelbar davor ausgeführt wurde, oder sich auf Umgebungsvariablen verlassen, die initialize zuvor in $ENVRC geschrieben hat.

  1. Build ausführen

Der Build startet vom Snapshot-Image des übergeordneten Builds statt von einer sauberen Basis. Das bedeutet:
  • Vererbte Workspaces haben ihre Tools, Runtimes und Abhängigkeiten bereits installiert. Das System holt den neuesten Code (git pull) und führt maintenance aus, um Abhängigkeiten zu aktualisieren.
  • Neu erstellte Workspaces werden von Grund auf eingerichtet — frisch geklont und mit der vollständigen Sequenz aus initialize + maintenance.
  • Entfernte Workspaces werden aus ihren Verzeichnissen bereinigt.
Organisations- und Enterprise-Blueprints überspringen initialize bei differenziellen Builds (da die Tools bereits im übergeordneten Image vorhanden sind) und führen nur maintenance aus.
$ENVRC wird zu Beginn jedes Builds zurückgesetzt, einschließlich differenzieller Builds. Umgebungsvariablen und PATH-Einträge, die von einem vorherigen Build in $ENVRC geschrieben wurden, werden nicht übernommen. Wenn maintenance sie benötigt, muss es sie selbst konfigurieren.

Wann stattdessen ein vollständiger Build ausgeführt wird

Auch bei aktivierten differenziellen Builds wird ein Build in diesen Situationen als vollständiger Build ausgeführt:
  • Sie fordern einen vollständigen Build an — Sie wählen im Dropdown Build snapshot die Option Vollständiger Build aus
  • Der neueste vollständige Build ist zu alt — ein automatischer Build, etwa ausgelöst durch das Speichern eines Blueprints, läuft als vollständiger Build, wenn für seine Plattform kein vollständiger Build vorhanden ist oder der neueste älter ist als das Intervall Aktualisierung vollständiger Builds unter Settings > Environment > Advanced (standardmäßig alle 7 Tage)
  • Es ist kein wiederverwendbarer übergeordneter Build vorhanden — es gibt keinen Build mit dem Status success oder partial mit einem Snapshot-Image für dieselbe Plattform und Maschinenkonfiguration
  • Der übergeordnete Build ist inkompatibel — Plattform, Maschinenkonfiguration, Basis-Image oder die Einstellung Clone repositories on all platforms haben sich seit dem übergeordneten Build geändert, oder der übergeordnete Build hat keine Secret-Ausgangsbasis für den Vergleich
  • Die Organisations- oder Enterprise-Konfiguration hat sich geändert — ein Organisations- oder Enterprise-Blueprint, eine Blueprint-Datei oder ein Secret hat sich seit dem übergeordneten Build geändert
Änderungen, die sich nur auf einzelne Repositorys beziehen, lassen den Build differenziell bleiben. Neue Repositorys, Blueprint- oder Secret-Änderungen für ein Repository sowie Repositorys, die im übergeordneten Build fehlgeschlagen sind, werden innerhalb des differenziellen Builds neu gebaut. Das Neuanordnen von Repositorys löst keinen vollständigen Build aus. Wenn ein als differenziell angeforderter Build stattdessen als vollständiger Build ausgeführt wird, nennt der Tooltip Build kind auf der Build-Detailseite den Grund.

Build-Typ anzeigen

Nachdem ein Build abgeschlossen ist, können Sie sehen, ob es sich um einen Differential- oder vollständiger Build-Build handelt:
  1. Gehen Sie zu Settings > Environment > Snapshots
  2. Klicken Sie im Verlauf auf einen Build
  3. Das Badge Build kind zeigt entweder Differential (blau) oder vollständiger Build (Standard) an
Bewegen Sie den Mauszeiger auf das Badge, um in einem Tooltip zu sehen, was die einzelnen Typen bedeuten:
  • Differential: “Nur geänderte Workspaces werden neu gebaut; unveränderte werden vom letzten erfolgreichen Build mit derselben Konfiguration übernommen”
  • vollständiger Build: “Alle Workspaces werden von Grund auf neu gebaut”

Vorteile

Vollständigen Build manuell auslösen

Auch wenn differenzielle Builds aktiviert sind, können Sie über die Schaltfläche Build snapshot einen vollständigen Build erzwingen. Verwenden Sie das Dropdown-Menü, um vollständiger Build statt der standardmäßigen differenziellen Option auszuwählen. Wir empfehlen, regelmäßig einen vollständigen Build auszuführen, um übernommenen Zustand zu verwerfen und zu überprüfen, ob Ihre Blueprints die Umgebung weiterhin von Grund auf erstellen können. Führen Sie außerdem einen solchen Build aus, nachdem Sie Setup entfernt oder ersetzt haben, das möglicherweise veraltete Dateien, Tools oder Abhängigkeiten im Snapshot hinterlassen hat. Ein vollständiger Build führt alle initialize- und maintenance-Schritte erneut aus.

FAQ

Nein. Sitzungen starten immer vom finalen Snapshot, unabhängig davon, wie er erstellt wurde. Der einzige Unterschied ist die Build-Geschwindigkeit.
Pinnen Sie unter Settings > Environment > Snapshots einen zuvor als funktionierend bekannten Build an und starten Sie dann einen vollständigen Build, um einen sauberen Snapshot zu erhalten. Sie können differenzielle Builds auch komplett deaktivieren, um wieder zu vollständigen Builds zurückzukehren.
Ja. Ein Build mit dem Status partial (einige Workspaces waren erfolgreich, andere sind fehlgeschlagen) kann als übergeordneter Build dienen. Das System übernimmt nur von Workspaces, die im übergeordneten Build erfolgreich waren.