2016-08-19 5 views
0

Wir haben einen TeamCity-Server auf einem Mac, wir haben mehrere Agenten auf Mac und Windows, die verschiedene Arten von Builds ausführen.Ausführen von Skripten auf einem TeamCity-Server, nachdem ein Agent-Build abgeschlossen wurde

Obwohl die Builds selbst anders sind (Build mit xcode/build mit msbuild), gibt es eine Reihe von Skripten am Ende jeder Konfiguration, die gleich sind. Sie beinhalten das Kopieren von Dateien auf eine bestimmte Netzwerkfreigabe, die Benachrichtigung von Teammitgliedern und einige andere Dinge.

Was wäre toll, wenn ich die plattformspezifischen Aufgaben auf dem jeweiligen Build-Agent ausführen könnte, aber den tatsächlichen Server die endgültigen Skripts danach ausführen lassen.

Der Grund dafür ist zu vermeiden, alles in bash und Batch-Dateien zu schreiben (ich kann es für den Server schreiben, und stellen Sie sicher, dass es irgendwelche Abhängigkeiten hat), sondern auch, wenn wir ein audio/visuelles/Physische Warnung für einen Build-Fehler, das Skript, das ausgeführt wird, sollte nur auf dem Server ausgeführt werden (keine Lautsprecher/Lichter/Nerf-Kanone auf den Agenten).

Irgendwelche Ideen, wie ich einfach ein Skript auf dem Server selbst ausführen und die Eigenschaften aus dem Build übergeben kann?

Benötigt dies ein Plugin, kann ich etwas mit dem Abhängigkeitssystem tun, oder muss ich in die REST-API eintauchen und andere Konfigurationen auf diese Weise auslösen?

Antwort

0

Die Lösung, zu der wir am Ende kamen, war Meta-runners mit Python Runner zu verwenden. Dies ermöglicht uns plattformübergreifende Python-Skripte, die wir mithilfe der Team City-Variablen einrichten können. Es erlaubt uns auch, diese Skripte in mehreren Konfigurationen zu verwenden.

Wenn jemand versucht, dies selbst zu tun, ist die platform module in Python nützlich, wenn Sie noch einige plattformspezifische Dinge in Ihrem Skript tun müssen.

Zum Beispiel der folgende Code ermöglicht es uns, uns Wege Netzwerkfreigabe verwenden bereits das Setup auf den Build-Agenten:

if platform.system() == 'Windows': 
    network_folder = "//server_pc/builds" 
else: 
    network_folder = "/Volumes/builds" 
Verwandte Themen