如何根据完成状态丢弃 Jenkins 中的旧构建?
How to discard old builds in Jenkins, based on their completion status?
我有一个 Jenkins 作业设置为每 10 分钟轮询一次 git 存储库中的更改。如果找不到(99/100 次,这就是发生的情况),它会提前中止构建并将其标记为 UNSTABLE 。如果它发现一个变化,它会检查它并将其标记为成功,并存储它的工件。我知道我可以使用插件来丢弃旧版本,但它只允许这些选项:
如您所见,没有按完成状态过滤的选项。
理想情况下,我想丢弃除最新的 UNSTABLE 构建之外的所有构建,并保留所有 SUCCESS 或 FAILED 构建及其工件。如果这不可能,简单地丢弃 所有 不稳定的构建也可以。
注意:我使用的是声明式管道
一种可能是以编程方式放弃构建。使用
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
我有一个 Jenkins 作业设置为每 10 分钟轮询一次 git 存储库中的更改。如果找不到(99/100 次,这就是发生的情况),它会提前中止构建并将其标记为 UNSTABLE 。如果它发现一个变化,它会检查它并将其标记为成功,并存储它的工件。我知道我可以使用插件来丢弃旧版本,但它只允许这些选项:
理想情况下,我想丢弃除最新的 UNSTABLE 构建之外的所有构建,并保留所有 SUCCESS 或 FAILED 构建及其工件。如果这不可能,简单地丢弃 所有 不稳定的构建也可以。
注意:我使用的是声明式管道
一种可能是以编程方式放弃构建。使用
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