我正在构建一个解决方案,需要在构建之后运行批处理文件(工作流程中有一个序列)。 TFS将构建标记为部分成功,但即使在完全详细模式(“诊断”)中,日志中也没有错误。我在批处理文件中的每一行之后检查错误级别,它总是为0.我还测试了重定向标准输出和标准符每行后都有文件,那里没有线索。
这与单元测试没有关系,因为我暂时正在跳过它们。
我注意到通常在批处理文件中发生错误(例如找不到文件)时,会有一个可视提示来指示错误,这与部分成功的状态相匹配。但我没有看到任何视觉提示。
那么TFS如何确定构建只是部分成功?
谢谢,
答案 0 :(得分:2)
解决。
事实证明 GetImpactedTests 活动正在抛出异常(我可以在TFS机器的事件查看器中看到它),但它在构建日志中根本没有显示。
我猜这个异常会使构建部分成功(因为编译部分成功了)但是我无法在buid日志中明确看到该分配。当我绕过影响分析时(通过将Analyze Test Impact设置为False或完全删除GetImpactedTests活动),不会发生错误。
答案 1 :(得分:0)
我们使用Lab Workflow(尝试我们的CodedUI测试)在这里尝试类似的东西。不同的构建模板,相同的症状。
我注意到构建过程报告它部分成功,突出显示部署脚本(批处理文件)中的成功步骤。
命令问题是在移动设备上安装我们的移动应用程序的命令(为了在晚上测试它):
adb install -d -r test.apk
我想在运行adb命令后立即查看errorlevel,但errorlevel为0。
然后我想也许命令将其输出发送到 stderr 并在android open source project上找到了这篇文章,这证实了我的假设。
以下是我的修复:
adb install -r -d test.apk 2>&1
附加 2>& 1 只是将stderr重定向到stdout,现在我的部署脚本不再报告错误,现在构建成功(所有测试都通过!)。
结论:当脚本向 stderr 写入任何内容时,构建工作流会将其报告为错误(部分成功,因为它不会阻止执行工作流)。
我知道这不是你的特殊问题,但由于我们有相同的症状,我认为 stderr 信息可以帮助其他人找出他们的构建过程报告部分成功的原因,即使一切似乎都有效。