Hintergrund:
Ich habe einen vor Ort TFS 2015 Update 1 Server. Im neuen TFS-Build-Stil werden Builds erstellt, die über eine Netzwerkfreigabe are not deleted when the build is deleted aus ablaufenden Aufbewahrungsrichtlinien erfolgen. Unser Setup kann keine serverbasierten Drops verwenden und wir müssen Netzwerkfreigaben verwenden.Wie werde ich von einem BuildDestroyedEvent benachrichtigt
Als eine Umgehung versuche ich einen Dienst zu schreiben, der benachrichtigt wird, wenn ein Build abläuft und gelöscht wird und es dann die zugehörige Netzwerkfreigabe für mich löschen kann.
Ausgabe:
Ich entdeckte die .NET TFS client libraries, in der Microsoft.TeamFoundationServer.Client NuGet Paket eine Microsoft.TeamFoundation.Build.WebApi.Events.BuildDestroyedEvent
Klasse ist, die genau aussieht, was ich brauche. Ich kann jedoch nicht herausfinden, wie ich mich diesem Event "unterzeichne".
Ich fand a good tutorial mit der Microsoft.TeamFoundationServer.ExtendedClient API, die ein Abonnement für eine WorkItemChangedEvent
mit einem Web-Callback zeigt. Wenn ich jedoch eine BuildDestroyedEvent
versuchte, erhalte ich einen Fehler.
const string collectionUri = "https://tfs.example.com:8081/tfs/MyCollection";
static void Main(string[] args)
{
using (TfsTeamProjectCollection tpc = new TfsTeamProjectCollection(new Uri(collectionUri)))
{
tpc.Authenticate();
tpc.EnsureAuthenticated();
var eventService = tpc.GetService<IEventService>();
DeliveryPreference del = new DeliveryPreference();
del.Address = "http://srchamberlain.example.com/TestWebApp/api/destroyEventSink";
del.Schedule = DeliverySchedule.Immediate;
del.Type = DeliveryType.Soap;
var id = eventService.SubscribeEvent("BuildDestroyedEvent", "", del);
Console.WriteLine(id);
}
Console.ReadLine();
}
Der Fehler, den ich auf der SubscribeEvent
Linie bekommen, ist
Microsoft.TeamFoundation.Framework.Client.TeamFoundationServiceException was unhandled ErrorCode=0 EventId=3000 HResult=-2146232832 IsRemoteException=true LogException=false Message=Event type BuildDestroyedEvent does not exist. ReportException=false Source=Microsoft.TeamFoundation.Client StackTrace: at Microsoft.TeamFoundation.Client.Channels.TfsHttpClientBase.HandleReply(TfsClientOperation operation, TfsMessage message, Object[]& outputs) at Microsoft.TeamFoundation.Client.Channels.TfsHttpClientBase.Invoke(TfsClientOperation operation, Object[] parameters, TimeSpan timeout, Object[]& outputs) at Microsoft.TeamFoundation.Client.Channels.TfsHttpClientBase.Invoke(TfsClientOperation operation, Object[] parameters, Object[]& outputs) at Microsoft.TeamFoundation.Client.Channels.TfsHttpClientBase.Invoke(TfsClientOperation operation, Object[] parameters) at Microsoft.TeamFoundation.Framework.Client.EventWebService.SubscribeEvent(String userId, String eventType, String filterExpression, DeliveryPreference preferences, String projectName) at Microsoft.TeamFoundation.Framework.Client.TeamFoundationEventService.SubscribeEvent(String eventType, String filterExpression, DeliveryPreference preferences) at SandboxConsole.Program.Main(String[] args) in D:\Code\SandboxConsole\SandboxConsole\Program.cs:line 33 at System.AppDomain._nExecuteAssembly(RuntimeAssembly assembly, String[] args) at System.AppDomain.ExecuteAssembly(String assemblyFile, Evidence assemblySecurity, String[] args) at Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly() at System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx) at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx) at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state) at System.Threading.ThreadHelper.ThreadStart() InnerException: Actor="" HResult=-2146233087 Lang=en Message=Event type BuildDestroyedEvent does not exist. Node="" Role="" InnerException:
Frage:
Was ist der richtige Weg, um eine Benachrichtigung über die Microsoft.TeamFoundation.Build.WebApi.Events.BuildDestroyedEvent
Brennen erhalten?
Möchten Sie Builds in Echtzeit löschen? Wenn nicht, würde ein täglicher Job funktionieren, der nur einen Aufruf ausführt, um Builds zu erhalten, um zu prüfen, ob sie gelöscht sind oder nicht. –
Gute Idee, ich denke, ich werde das als Backup-Plan verwenden –