我在TFS Build中有自定义代码活动。其中一个是TFS Build不知道的后台线程。
我想知道此线程是否有办法检查是否已请求“停止构建”。 (即检查当前构建状态而不需要CodeActivityContext)
(注意:我不能使用AsyncCodeActivity(及其取消机制),因为这仍会阻止后续任务) 我目前正在使用心跳系统并依赖于TFS Build流循环的热量超时,但这不是万无一失的。 IBuildDetail.BuildFinished存在但是如果构建完成则有捕获22,你如何得到iBuildDetail?
因为代码活动是“无状态的”,所以使用先前的“CodeActivityContext”来获取iBuildDetail不起作用,即上下文不再存在。 我可以到_buildServer.GetBuild(_buildUri)的代码路径 但无法找到如何建立您当前的builduri(不要与构建定义,服务器,代理或数字混淆)
由于
答案 0 :(得分:1)
好消息,我找到了解决方案
我陷入了BuildUri术语,它发现在iBuildDetails的底部,是" Uri"
原来是BuildUri
因此这样的代码有效...... static private Uri _buildUri; static private IBuildServer _buildServer;
...
protected override void Execute(CodeActivityContext context)
{
// Obtain the runtime value of the Text input argument
string ScriptPath = context.GetValue(this.InScriptPath);
_thisContext = context;
IBuildDetail buildDetail = _thisContext.GetExtension<IBuildDetail>();
_buildUri = buildDetail.Uri; // This is the complete string
_buildServer = buildDetail.BuildServer;
...... 在后台tthread
try
{
IBuildDetail buildDetail = _buildServer.GetBuild(_buildUri); // this does not work as it is not the BuildUri
if (buildDetail != null)
{
if (buildDetail.Status == BuildStatus.Stopped)
{
TerminateProcess();
}
}
}
catch (Exception Ex)
{
TerminateProcess();
}