在构建完成后是否可以为构建设置构建结果?
我找不到任何已经执行此操作的插件,我正在考虑编写自己的插件,但我想看看这是否可能在走这条路之前。
(我已经看过现有的代码以及“失败的构建”插件如何作为一个例子,但我对Jenkins代码库的理解还不够先进,无法理解所有可能性。)
用例:我们有一个构建管道,在管道的末端附近有一个deploy-to-qa步骤,它将工件部署到QA环境。我们在此步骤之前进行了自动化测试以尝试捕获工件的任何问题,但是我们的测试覆盖率在某些区域并不是很高,因此错误仍然可以通过裂缝。我希望能够在事后标记部署到qa的构建为FAILED,以表示该特定管道无效且不是生产发布的候选者。 (基本上与this Build Pipeline Plugin issue)
相同答案 0 :(得分:3)
在对代码进行更多调查后,我认为这是不可能的。
来自hudson.model.Run
:
public void setResult(Result r) {
// state can change only when we are building
assert state==State.BUILDING;
// snip
...
}
因此,除了处于“建筑”状态时,构建结果不会改变。
我可以尝试使用lastSuccessful和lastStable符号链接(与delete()
中的hudson.model.AbstractBuild
函数一样),但是一旦Jenkins重新加载jobs/JOBNAME/builds/
的构建结果,就会重置这些符号链接。 {1}}。
答案 1 :(得分:2)
我有一个未经测试的建议:进行参数化构建,其中参数确定构建是否会失败(例如,简单的bat / shell脚本从它设置的环境变量测试参数,并执行exit 0或exit 1) 。这假设构建管道手动触发步骤将询问参数,而不是使用默认值。
如果它不支持交互式构建参数,那么需要一些其他方法来告诉这个额外的构建步骤是否应该失败。也许编辑上游构建描述或显示名称以指示失败,然后允许构建管道继续这个额外的构建步骤,这可能必须使用系统groovy脚本来挖掘上游构建描述或显示名称。
答案 2 :(得分:1)
我之前已经看过几个关于这个主题的争论,结果始终是理论上可以这样做,但代码库不是为了允许这个而且它必须是一个非常hacky的解决方法。
也有人说这是一种不好的做法,虽然我不记得反对它的论点是什么。
答案 3 :(得分:1)
我面临同样的要求。我还没有找到合适的插件,更改构建状态不仅仅是一个标志,还会对链接产生其他影响(例如最新的成功构建等)。因此,我没有改变构建的状态,而是寻找合格构建的可能性。 Promoted Builds Plugin应用标记来构建以定义例如不同的质量阶段。构建促销可以手动执行或基于例如下游项目成功建设。任何成功的构建都可以被限定,基于促销额外的构建和后期构建操作可以执行,例如标记或存档。
答案 4 :(得分:0)
实际上,我可以通过手动将build.xml
更改为<result>FAILURE</result>
来实现此目的。
然后我用mklink
玩了一点来创建一些符号链接,并将lastSuccessfulBuild重命名为lastFailedBuild并且它有效。如果允许您从Jenkins插件中访问文件系统,则可以编写一个。
如果您可以删除当前版本并使用版本号启动相同的版本并将下一个BUILD_NUMBER设置为已删除版本,那么您可以使用此插件告诉它失败而不是成功: