2017-09-28 2 views
0

Ich frage mich, ob es möglich ist, eine Build-Reihenfolge/Priorität innerhalb eines einzelnen Commits in VSTS zu setzen.VSTS - Build Order innerhalb eines einzelnen Git-Commits

Das Szenario, das ich habe, ist dies:

ich eine Lösung (ein Repository) mit mehreren Projekten.

  • Verlag
  • Subscriber1
  • Teilnehmer2
  • Nachrichten

Jeder von diesen (erwarten Nachrichten) haben eine Build-Definition mit Pfad-Filter auf die jeweilige Projekt (Continuous Integration), und das wird freigegeben (Continuous deployment trigger) und danach initialisiert.

Die Projekte sind nicht voneinander abhängig, erwarten Nachrichten, die verwendet werden, um zu kommunizieren.

Also, wenn ich Änderungen am Publisher-Projekt und alle Subscriber-Projekte, dann commit, möchte ich immer zuerst das Publisher-Projekt erstellen und veröffentlichen.

Weil der Publisher jetzt benötigt, wenn es neu erstellte Nachrichten gibt, die die Abonnenten abonnieren möchten.

Ist so etwas möglich?

Antwort

1

VSTS kann jetzt nicht die Reihenfolge für die CI-Builds angeben, die durch denselben Code ausgelöst wurden.

Ich postete eine Benutzerstimme Specify queue builds order if there has multiple CI builds are triggered by the same code, Sie können abstimmen und folgen.

Vorerst können Sie unter Abhilfen verwenden:

  1. Bauen für alle Projekte, auch wenn es nur Änderungen haben für ein bestimmtes Projekt (Publisher oder Subscriber)

    Wenn es für Sie in Ordnung, Um alle Projekte zu erstellen, auch wenn nur Änderungen für ein Projekt vorhanden sind, können Sie eine Builddefinition definieren, um alle darin enthaltenen Projekte zu erstellen. Und dann verwenden Sie diesen Build als CI-Build, um die mehreren CI-Builds zu ersetzen.

  2. Set individuelle Bedingungen für alle damit verbundenen Aufgaben

    Sie müssen noch alle Aufgaben in einer Builddefinition definieren, und zwei Variablen hinzufügen publisher und subscriber mit Standardwert 0.

    Fügen Sie zu Beginn Ihres Builds eine PowerShell-Aufgabe hinzu, um zu prüfen, welche Projekte geändert wurden. Wenn das Publisher-Projekt geändert wird, setzen Sie publisher Variable mit Wert 1. Wenn das Abonnentenprojekt geändert wird, setzen Sie subscriber Variable mit dem Wert 1.

    Verwenden Sie dann c ustom conditions für verwandte Projekte. Verwenden Sie wie in Build Publisher-Projektaufgabe die benutzerdefinierte Bedingung: and(succeeded(), eq(variables['publisher'], '1')).

    enter image description here

    dann nur noch die Aufgabe ausgeführt wird, wenn die publisher Variable 1 ist. Sie können auch auf this post verweisen, um benutzerdefinierte Bedingungen zu verwenden.

+0

Thx für die Antwort, viel gelernt. Mein aktueller "Workaround" besteht darin, sicherzustellen, dass der Publisher Build-Def die niedrigste Build-Def-ID hat, da es so aussieht, als würde vsts immer innerhalb einer Commit von der niedrigsten zur höchsten ID bauen. –

0

Eine Abhilfe ist Ihre Priorität Build zu setzen, indem Continuous Integration ausgelöst werden und die anderen ausgelöst in Roll Modus baut. Die Rolling Builds warten auf das CI vor Beginn

+0

Thx für die Freigabe, aber würde das funktionieren, wenn nur die Abonnenten geändert wurden (dh Herausgeber hatte keine Änderungen und wurde nicht ausgelöst)? –