Wie würden Sie manuell zusätzliche Teambuilds von einem Teambuild auslösen? Zum Beispiel, wenn wir in CC.Net waren, würden andere Builds ausgelöst, wenn bestimmte Builds erfolgreich waren. Der zweite Build könnte entweder Projekte sein, die diese Komponente verwenden, oder zusätzliche, lang laufende Testbibliotheken für die gleiche Komponente.Manuelles Auslösen eines TFS-Teambuilds
Antwort
Eine Möglichkeit, wie Sie es tun könnten, ist ein AfterEndToEndIteration-Ziel für Ihre TFSBuild.proj-Datei, das die TfsBuild.exe-Befehlszeile ausführen würde, um andere Builds zu starten. Ich bin so etwas wie diese zu denken (obwohl ich es nicht getestet)
<Target Name="AfterEndToEndIteration">
<GetBuildProperties TeamFoundationServerUrl="$(TeamFoundationServerUrl)"
BuildUri="$(BuildUri)"
Condition=" '$(IsDesktopBuild)' != 'true' ">
<Output TaskParameter="Status" PropertyName="Status" />
</GetBuildProperties>
<Exec Condition=" '$(Status)'=='Succeeded' "
Command="TfsBuild.exe start /server:$(TeamFoundationServerUrl) /buildDefinition:"Your Build Definition To Run"" />
</Target>
Ich habe das gleiche getan Martin auf einer Reihe von Gelegenheiten vorgeschlagen (sein Blog über hilfreich ist, BTW). Allerdings musste ich Cascading Builds (basierend auf einigen anderen komplizierten Regeln) genug auslösen, um eine benutzerdefinierte Aufgabe zu erstellen. Halten Sie Ihre Build-Skripte schön und schlank und erhalten Sie mehr Flexibilität und Einkapselungsmöglichkeiten.
public override bool Execute()
{
IBuildDefinition[] buildDefinitions = BuildServer.QueryBuildDefinitions(ProjectName);
foreach (IBuildDefinition build in buildDefinitions)
{
if(build.Enabled) //I did a bunch of custom rules here
{
Log.LogMessage(String.Concat("Queuing build: ", build.Name));
BuildServer.QueueBuild(build);
}
}
return true;
}
Es gibt einige weitere gute Sachen auf Aaron Hallberg Blog zu:
http://blogs.msdn.com/aaronhallberg/archive/2007/04/24/team-build-object-model-queueing-a-build.aspx
- 1. Manuelles Auslösen der Zellenauswahl TableView
- 2. Manuelles Instanziieren eines DataTemplate?
- 3. Manuelles Einstellen eines UIButton Zustand
- 4. Manuelles Erstellen eines Symfony UploadedFile
- 5. Manuelles Auslösen des Anzeigens/Ausblendens in angularstrap datepicker
- 6. Manuelles Auslösen der Änderung von Eigenschaften in ember.js
- 7. Programmgesteuertes Auslösen eines Ereignisses?
- 8. Manuelles Erstellen eines Apache Windows-Dienstes
- 9. Manuelles Rendern von Teilfeldern eines MultiValueFields
- 10. Manuelles Hinzufügen eines Symbols in der Navigationsleiste
- 11. Manuelles Zeichnen eines Farbverlaufs in iPhone-Apps?
- 12. Manuelles Zuordnen eines Objekts mit AlamoFireObjectMapper
- 13. Manuelles Definieren der Farben eines Drahtmodells
- 14. Manuelles Sortieren eines Arrays in aufsteigender Reihenfolge
- 15. Rails: schlechte Idee: manuelles Erstellen eines Sitzungscookies
- 16. Manuelles Registrieren eines Benutzers in Laravel
- 17. Auslösen eines Ereignisses mit Prototyp
- 18. Auslösen eines JS in JS?
- 19. C# Manuelles Threading
- 20. Fehler beim Auslösen eines [tableView reloadData]
- 21. Auslösen eines benutzerdefinierten jQuery-Ereignisses ohne Sprudeln
- 22. jQuery Datepicker zum Auslösen eines POSTs
- 23. Auslösen eines Ereignisses, wenn Benutzer weg navigiert
- 24. Auslösen eines internen ServletRequest in Tomcat
- 25. Auslösen eines "Click" -Ereignisses ohne Benutzereingabe
- 26. Auslösen eines Basisereignisses in einem anderen Prozess
- 27. Manuelles Erstellen eines Frameworks aus der statischen Bibliothek
- 28. Manuelles Analysieren eines Teils einer Antwort bei Verwendung von Retrofit
- 29. Manuelles Erstellen/Verwenden eines DI-Containers in PHP?
- 30. Manuelles Hinzufügen eines Titels zu Mediastore als Musiktitel