Blog

Lösen Sie nur eine Freigabe aus, wenn sich der Build geändert hat

Rene van Osnabrugge

Aktualisiert Oktober 21, 2025
2 Minuten

In den Anfängen, als wir XAML-Builds in TFS verwendeten (wow, das scheint eine Ewigkeit her zu sein!), hatten wir die Möglichkeit, einen Build NICHT auszuführen, wenn sich im Quellcode-Repository nichts geändert hat. Dieses Kontrollkästchen "Bauen, auch wenn sich nichts geändert hat" gibt es in VSTS nicht mehr. Für mich ist das kein wirkliches Problem, denn wenn Sie Ihren Quellcode bauen, ist das auch eine Validierung, ob Ihr zugrunde liegendes System in Ordnung ist. Es ist eher ein Problem, wenn Sie nach einem nächtlichen Build automatisch eine Release-Pipeline auslösen. Warum sollten Sie eine neue Version Ihrer Anwendung freigeben, wenn es sich nicht um eine neue Version, sondern um genau dieselbe Version handelt. Natürlich können wir darüber diskutieren, dass es kein Problem sein sollte, dass Sie immer in der Lage sein sollten, zu veröffentlichen, aber trotzdem. Es ist unnötig und manchmal sogar unerwünscht.

Um dieses Problem zu lösen, habe ich ein kleines Skript und einen Prozess entwickelt, um dieses Problem zu lösen.

  • Der Build wird jede Nacht ausgelöst. Ich kann dies nur durch einen manuellen Trigger stoppen.
  • In diesem Build prüfe ich, ob die CommitID, die den Build ausgelöst hat, mit der CommitID des letzten erfolgreichen Builds der gleichen Definition übereinstimmt
  • Wenn dies nicht der Fall ist, versehe ich mein Build mit einem Tag. In meinem Fall "Release".
  • Ich habe meine Veröffentlichungspipeline so eingerichtet, dass nur der Build mit diesem Tag veröffentlicht wird

Das Skript In meinem GitHub Repository finden Sie das gesamte Skript, aber ich werde Ihnen einige Teile erläutern. In diesem Ausschnitt sehen Sie, dass ich zunächst die Details meines aktuellen Builds abrufe. Ich rufe diesen Build anhand seiner ID ab. Diese habe ich aus meiner Build-Pipeline gesendet, wo ich die vordefinierte Build-Variable $(Build.BuildID) verwende.

1

Dann verwende ich die Build-Definitions-ID, um alle Builds mit der gleichen Definition abzurufen und filtere nur erfolgreiche Builds heraus und nehme die neuesten. Dann überprüfe ich die Quellversion, die die CommitID ist, und prüfe, ob sie gleich ist. Wenn nicht, versehe ich den Build mit einem Release-Tag Richten Sie die Pipeline ein Dann richte ich in der Release Pipeline, die diesen Build bereitstellt, das Trigger-Tag ein, so dass nur Builds mit dem richtigen Trigger freigegeben werden. Das habe ich in meinem früheren Blogbeitrag beschrieben. Das war's! Jetzt können Sie sicher ein geplantes Build erstellen und müssen sich keine Sorgen mehr über doppelte Veröffentlichungen machen! Die vollständige Quelle finden Sie hier!

Verfasst von

Rene van Osnabrugge

As Global Consulting Director, Rene enables consultants to help organizations and leadership teams to build an engineering culture that allows them to build, deliver, and operate software in a secure and compliant way. With a focus on both the technical and cultural aspects of a company, Rene helps clients transform their work processes, operating model, and culture to become high-speed, innovative, and productive. Rene is passionate about learning new technologies and exploring the cultural and people aspects of companies. He believes that by focusing on both technical implementation and cultural development, we can drive our industry forward. He loves sharing his knowledge and insights at conferences and training events. As a frequently asked speaker at well-known industry events like GitHub Universe, NDC, Techorama, AllDayDevOps, NDC, and Visual Studio Live!, Rene is known for his expertise in Microsoft Azure, DevOps, and DevOps Culture. In addition to being a Microsoft MVP since 2012, he is also the founder of the popular community events Global DevOps Bootcamp and Global DevOps Experience.

Contact

Let’s discuss how we can support your journey.