首页 > 解决方案 > 如何根据完成状态丢弃 Jenkins 中的旧版本?

问题描述

我有一个 Jenkins 作业设置为每 10 分钟轮询一次 git 存储库中的更改。如果它没有找到(99/100 次,这就是发生的情况)它会提前中止构建并将其标记为 UNSTABLE 。如果它发现一个变化,它会处理它并将其标记为成功,并存储它的工件。我知道我可以使用插件来丢弃旧版本,但它只允许以下选项: 詹金斯参数 如您所见,没有按完成状态过滤的选项。

理想情况下,我想丢弃除最新的 UNSTABLE 构建之外的所有构建,并保留所有 SUCCESS 或 FAILED 构建及其工件。如果这是不可能的,那么简单地丢弃所有UNSTABLE 构建也可以。

注意:我使用的是声明式管道

标签: jenkins

解决方案


一种可能性是以编程方式丢弃构建。获取您的作业对象
def job = Jenkins.instance.getItem("JobName")
由于您使用的是声明性管道,job因此属于WorkflowJob[1] 类型,您可以使用
job.getBuilds(). 现在您可以检查每个构建的结果(WorkflowRun对象 [2])并决定是否要删除它。像下面这样的东西应该工作

def job = Jenkins.instance.getItem("JobName")
job.getBuilds().each { 
  if(it.result.toString() == "UNSTABLE") {
    it.delete()
    job.save()
  }
}

您可以创建一个执行上述代码并YourJob在构建后触发的新作业。

[1] https://javadoc.jenkins.io/plugin/workflow-job/org/jenkinsci/plugins/workflow/job/WorkflowJob.html
[2] https://javadoc.jenkins.io/plugin/workflow-job /org/jenkinsci/plugins/workflow/job/WorkflowRun.html


推荐阅读