【问题标题】:TFS Build (2013) - Build Stop HandlingTFS 构建 (2013) - 构建停止处理
【发布时间】:2015-10-07 15:01:10
【问题描述】:

我在 TFS Build 中有自定义代码活动。其中之一是 TFS Build 不知道的后台线程。

我想知道这个线程是否有办法检查是否已请求“停止构建”。 (即在不需要 CodeActivityContext 的情况下检查当前的构建状态)

(注意:我不能使用 AsyncCodeActivity(及其取消机制),因为这仍然会阻止后续任务) 我目前正在使用心跳系统并依赖于 TFS 构建流程循环中的心跳超时,但这并不是万无一失的。 IBuildDetail.BuildFinished 存在,但是如果构建完成,你如何获得 iBuildDetail?

因为代码活动是“无状态的”,所以使用以前的“CodeActivityContext”来获取 iBuildDetail 不起作用,即上下文不再存在。 我可以访问 _buildServer.GetBuild(_buildUri) 的代码路径 但不知道如何建立您当前的 builduri(不要与构建定义、服务器、代理或编号混淆)

谢谢

【问题讨论】:

    标签: tfs build


    【解决方案1】:

    好消息,我找到了解决办法

    我陷入了BuildUri术语,原来在iBuildDetails的底部,是“Uri”

    原来是 BuildUri

    因此这样的代码可以工作...... 静态私有 Uri _buildUri; 静态私有 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;
    

    …… 在后台线程中

                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();
                }
    

    【讨论】:

      猜你喜欢
      • 2019-12-20
      • 2018-01-23
      • 2020-04-24
      • 2013-11-14
      • 1970-01-01
      • 1970-01-01
      • 2013-09-18
      • 2016-04-18
      • 1970-01-01
      相关资源
      最近更新 更多