5

是否可以在构建完成后为构建设置构建结果?

我已经找不到任何可以做到这一点的插件,我正在考虑编写自己的插件,但我想在走这条路之前看看这是否可能。

(我已经查看了现有代码以及“Fail The Build”插件如何工作作为示例,但我对 Jenkins 代码库的理解还不够先进,无法理解所有可能性。)

用例:我们有一个构建管道,在管道末端附近有一个部署到 qa 步骤,用于将工件部署到 QA 环境。在此步骤之前,我们进行了自动化测试,以尝试发现工件的任何问题,但我们的测试覆盖率在某些领域不是很高,因此错误仍然可能从裂缝中溜走。我希望能够在事后将 deploy-to-qa 构建标记为 FAILED,以表示该特定管道无效并且不是生产发布的候选者。(与此 Build Pipeline Plugin 问题基本相同)

4

5 回答 5

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/.

于 2012-10-23T01:27:35.230 回答
2

我有一个未经测试的建议:进行参数化构建,其中参数确定构建是否会失败(例如简单的 bat / shell 脚本从它设置的环境变量测试参数,并执行退出 0 或退出 1)。这假设构建管道手动触发的步骤将询问参数,而不是使用默认值。

如果它不支持交互式构建参数,那么需要一些其他方式来告诉这个额外的构建步骤它是否应该失败。也许编辑上游构建描述或显示名称以指示失败,然后允许构建管道继续这个额外的构建步骤,这可能必须使用系统 groovy 脚本来挖掘上游构建描述或显示名称。

于 2012-10-19T07:16:35.987 回答
1

我面临同样的要求。我还没有找到合适的插件,改变构建状态不仅仅是一个标志,而且对链接有其他影响(例如最新成功的构建等)。因此,我没有改变构建的状态,而是寻找一种可能对构建进行限定。升级的构建插件应用标志来构建以定义例如不同的质量阶段。构建提升可以手动执行,也可以基于下游项目成功构建。任何成功的构建都可以根据促销进行限定,可以执行附加构建和构建后操作,例如标记或归档。

于 2012-10-19T14:19:15.070 回答
1

我之前看到过关于这个主题的几次辩论,结果总是理论上可以这样做,但是代码库并不是为了允许这样做而设计的,它必须是一个非常hacky的解决方法。

也有人说这通常是一种不好的做法,尽管我不记得反对它的论点是什么。

于 2012-10-18T20:58:19.853 回答
0

实际上,我可以通过将build.xml手动更改为<result>FAILURE</result>.

然后我玩了一下mklink创建一些符号链接并将 lastSuccessfulBuild 重命名为 lastFailedBuild 并且它起作用了。如果允许您从 Jenkins 插件中访问文件系统,则可以编写一个。

如果您可以删除当前构建并使用版本号启动相同的构建并将下一个 BUILD_NUMBER 设置为已删除的构建,那么您可以使用此插件告诉它失败而不是成功:

构建插件失败

于 2015-08-06T07:03:07.773 回答