2015-01-28 10 views
6

Ich habe einige lange laufende Integrationstests, die automatisch vom TeamCity-Server ausgeführt werden, wenn ich die Quellcodeverwaltung festlege.TeamCity - Kann ich aktuell laufende Builds derselben Konfiguration abbrechen, wenn ich einen neuen Build starte?

Mit TeamCity kann ich verhindern, dass diese Aufgaben alle Build-Agenten gleichzeitig durch Begrenzen der simultanen Builds aufnehmen. Ich frage mich jedoch, ob es möglich ist, dass TeamCity gerade laufende Aufgaben dieser Konfiguration abbricht, wenn eine neue gestartet wird.

In dieser Umgebung, sobald ein neues Commit zur Quellcodeverwaltung vorliegt, sind alte Läufe der Integrationstests irrelevant, deshalb möchte ich nicht, dass der Server Zeit damit verschwendet, Tests für alte Versionen auszuführen.

Antwort

1

Ich glaube nicht, dass dies möglich ist, und ich würde sagen, das ist von Entwurf.

Stellen Sie sich vor, eine Welt, in der dies erlaubt ist, würden Sie nie wissen, welche Festschreibung einen Test zum Fehlschlagen veranlasst hat. Wenn Sie genug überlappende Commits hatten, könnten Sie 50 Builds haben, bevor Sie wissen, dass der abschließende Test fehlschlägt, und keine Ahnung haben, ob es das letzte Commit oder das davor war, was dazu führte, dass es fehlschlug.

IMHO Sie wäre besser Anstrengungen in die Herstellung, so dass mehrere Durchläufe Fokussierung gleichzeitig auf verschiedenen Servern passieren kann, um die Geschwindigkeit zu bekommen Sie wollen, nicht das Kind mit dem Bade auszuschütten

UPDATE

Während ich glaube nicht, dass dies out-of-the-Box unterstützt wird, wenn ich dies tun würde, denke ich würde ich getting a notification when a build starts (scheint es keine Benachrichtigungen für Builds in die Warteschlange, so müssen Sie mehrere Builds zu ermöglichen gleichzeitig laufen lassen) und dann Sie can use the API to do cancel the other builds:.

können Sie eine list of builds mit Hilfe der API sowie zu bekommen, so sollten alle diejenigen löschen können, die

+0

Erstmal Danke für Ihren Kommentar . Bei den fraglichen Tests handelt es sich jedoch um Integrationstests, die durch Umweltprobleme außerhalb der Codebasis (Think Database Changes) unterbrochen werden können, so dass diese Art von Tracking möglicherweise nutzlos ist.Ich verstehe die Design-Bedenken des TeamCity-Teams und dass dies ein Grenzfall ist, aber zu diesem Zweck wäre es in der Tat nützlich, einen Build abzubrechen. Ich stimme zu, dass das Problem irrelevant wäre, wenn ich in der Lage wäre, die Zeit zu verkürzen, die die Tests in einem vernünftigen Zeitrahmen benötigen, aber ich bin mir nicht sicher, ob das hier möglich und sicherlich nicht nachhaltig ist. –

+0

@LiamFlanagan Ich verstehe, dass jeder Randfälle hat, und manchmal gewinnt Pragmatismus, unabhängig von der Hässlichkeit. Am Ende des Tages ist teamcity eine Webapp, und die Löschung geschieht, weil jemand eine Methode auf TC aufruft. Du könntest das fälschen. Ich aktualisiere meine Antwort mit dem, was ich auf –

1

Nein, nicht das letzte sind, ist es nicht möglich ist. Sie können es manuell abbrechen. Oder Sie können einen stillen Zeitraum hinzufügen (Standard ist 60 Sekunden), damit ein Build nicht sofort startet, wenn etwas gedrückt wurde. Wenn einige Commits nach ein paar Sekunden oder Minuten eintreffen, werden sie in den TeamCity-Build aufgenommen.

+0

schauen würde, wie Sie es "manuell abbrechen" – tofutim

+0

Ich nehme an, @gerald bezog sich entweder auf: - Abbrechen von dem laufenden Build-Agent: - Agenten (an der Spitze der Armaturenbrett) - finden sie die entsprechenden Lauf Build - Durch Drücken der Stopp-Taste auf der rechten Seite oder aus dem Build-Warteschlange zu entfernen: - Build-Queue (am oberen Rand des Armaturenbretts): - Finden sie die relevanten Build in der Queue - Drücken Sie die Entfernen-Taste auf der rechten Seite (bearbeitet, weil ich die Eingabe zu schnell gedrückt!) –

-1

Meine Lösung ähnelt Sam's update, aber ich würde eine "Präambel" -Konfiguration verwenden, die durch Commits zur Quellcodeverwaltung ausgelöst wird. Dieser Job ist allein dafür zuständig, zu überprüfen, ob einer Ihrer Integrationstestjobs bereits ausgeführt wird, und stopping them with a REST API call, falls erforderlich.

Die wichtigsten Integrationstests werden von einer dedizierten Jobkonfiguration ausgeführt, die einen Build-Finish-Trigger verwendet, der der Präambelkonfiguration zugeordnet ist.

Diese Einstellung macht es recht einfach abzufragen, welche Jobs ausgeführt werden und möglicherweise abgebrochen werden müssen, wenn neue Aufgaben zu erledigen sind. So werden die Schritte werden:

  1. Präambel - Abbrechen Job alle laufenden Integrationstest, ausgelöst durch VCS
  2. Test Integration - ausgelöst durch Abschluss einer "Präambel" bauen
Verwandte Themen