我正在自动化一个点网核心构建
给定Jenkins文件中的以下代码片段,我将为我拥有的每个测试项目生成一个XML文件。在接下来的步骤中,我要处理这些XML文件。
詹金斯提供了两种选择。我很困惑使用哪个选项。我使用“过程”还是“发布”?两者都为阈值提供了相同的选项,两者似乎都执行相同的操作。他们俩都标记了构建失败,他们都向詹金斯提供了一份测试报告。这是遗产吗?还是他们有自己目的的完全不同的步骤?
顺便说一句,这种失败检查并引发错误是阻止Jenkins继续构建的唯一方法吗?当将构建标记为“
FAILED”以仅继续其余步骤时,这似乎有点奇怪。如果我想继续,我还可以将stopProcessingIfError设置为false,还是我错过了要点?
stage('Test') {
def testScript = ""
def testProjects = findFiles(glob: 'test/**/project.json')
if (!fileExists('reports/xml')) {
if (!fileExists('reports')) {
sh "mkdir reports"
}
sh "mkdir reports/xml"
}
for(prj in testProjects) {
println "Test project located, running tests: " + prj.path
def matcher = prj.path =~ 'test\\/(.+)\\/project.json'
testScript += "dotnet test --no-build '${prj.path}' -xml 'reports/xml/${matcher[0][1]}.Results.xml' || true\n"
}
sh testScript
step([
$class: 'XUnitBuilder',
thresholdMode: 1,
thresholds: [[$class: 'FailedThreshold', failureThreshold: '1']],
tools: [[
$class: 'XUnitDotNetTestType',
deleteOutputFiles: true,
failIfNotNew: true,
pattern: 'reports/xml/*.Results.xml',
skipNoTestFiles: false,
stopProcessingIfError: true
]]
])
if (currentBuild.result.equals("FAILURE")) {
throw "Test results did not pass thresholds"
}
}
在查看源代码之后,它们似乎在功能上相同,除了XUnitPublisher
具有一个额外的方法(目的是我不明白(!))之外,并且该类在implements
列表中声明了更多接口。
关键的区别似乎是XUnitPublisher
class扩展了hudson.tasks.Recorder
类,而XUnitBuilder
扩展了hudson.tasks.Builder
。
我认为,面对用户的不同之处在于,构建器的失败将Jenkins作业标记为“失败”,而发布者的失败将作业标记为“不稳定”。(来源:https
:
//wiki.jenkins.io/display/JENKINS/Terminology)
考虑到所有这些,我建议您使用xUnitPublisher。如果编译通过但某些测试失败,我将构建命令设置为返回0。这样,Jenkins为我提供了失败状态(对于失败的编译)和不稳定状态(对于正常工作但测试失败的状态)。我喜欢这种方式。
提交历史并不能解释为什么会有如此荒谬的代码重复。我想知道一个是否按照另一个实现,就像在弃用时通常这样做的那样……可能是因为每个必须具有不同的超类。
XUnitBuilder.java,XUnitPublisher.java
问题内容: Java8引入了这些不错的方法和,从而允许编写如下代码: 现在,我想知道是否有充分的事实理由可以这样做: 要么 两者都可以工作: 当 将元素添加到列表 时,选项1可能会进行很多不必要的“ put”调用 选项2可能做了很多不必要的“的containsKey”呼叫时 对新的密钥添加新条目 是主导 SO:“总是”选择选项1或选项2的充分理由是吗? 问题答案: 如果您想对替代值使用缺席值而不修
问题内容: 我对于应该使用javascript创建对象的方式感到困惑。似乎至少有两种方法。一种是使用对象文字符号,而另一种是使用构造函数。有一个相对于另一个的优势吗? 问题答案: 如果您没有与对象相关联的行为(即,如果对象只是数据/状态的容器),则可以使用对象文字。 运用KISS原则。如果除了简单的数据容器之外不需要任何其他内容,请使用简单的文字。 如果要向对象添加行为,则可以使用构造函数并在构造
我正在启动一个JavaScript项目,它的父目录包含两个文件夹:和。这两个都需要Javascript包,但我不知道是应该在它们各自的依赖项中创建一个文件夹,还是应该只创建一个并在其中安装所有包。基本上我问的是我是否应该这样做: 或者这个:
问题内容: 我正在使用c / c 为osx和linux开发命令行界面可执行文件。该项目将链接到opencv。我应该使用libc 还是libstdc ++? 问题答案: 我会为每个操作系统使用本机库,即GNU / Linux上的libstdc 和Mac OS X上的libc 。 libc 在GNU / Linux上不是100%完整的,而libstdc 更完整时使用libc并没有真正的优势。另外,如果
问题内容: 和CSS 和有什么不一样?我应该使用哪一个?为什么? 问题答案: 所有这些答案似乎都是不正确的。与直觉相反,在CSS 中不是pixel 。至少不是在简单的物理意义上。 从W3C,EM,PX,PT,CM,IN…阅读本文,了解如何为CSS发明一个“神奇的”单元。的含义因硬件和分辨率而异。(该文章是最新的,最新更新为2014-10。) 我自己的思考方式: px单位是CSS的魔术单位。它与当前
问题内容: 我正在一个将Angular和Underscore都作为依赖项的项目。 当我需要创建对象的副本时,根据当时的心情,我可以使用或 在我看来,这些方法中的一种可能比另一种更快速/可靠/健壮。 假设已经包含两个库,那么这两个函数中的任何一个是否存在使另一个函数更好或更坏使用的已知问题? 问题答案: 关于您的问题: angular.copy和_.clone是不同的。这不是哪个更好的问题,而是关于