kiryakov
kiryakov

Reputation: 145

How to discard old builds in Jenkins, based on their completion status?

I have a Jenkins job set up to poll for a change in a git repository every 10 minutes. If it doesn't find one (99/100 times, this is what happens) it aborts the build early and marks it as UNSTABLE . If it finds a change, it goes through with it and marks it as SUCCESS, storing its artifacts. I know I can use a plugin to discard old builds, but it only allows for these options: Jenkins parameters As you can see, there is no option to filter by completion status.

Ideally, I want to discard all but the latest UNSTABLE build and keep all SUCCESS or FAILED builds and their artifacts. If this is not possible, simply discarding all UNSTABLE builds would also work.

Note: I am using a declarative Pipeline

Upvotes: 0

Views: 1466

Answers (1)

Melkjot
Melkjot

Reputation: 518

One possibility would be to discard builds programmatically. Get your job object with
def job = Jenkins.instance.getItem("JobName")
Since you are using declarative pipeline, job is of type WorkflowJob [1] and you can get all its builds with
job.getBuilds(). Now you can check the result of each build (WorkflowRun objects [2]) and decide if you want to delete it or not. Something like follows should work

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

You could create a new job that executes the code above and is triggered after YourJob has been built.

[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

Upvotes: 2

Related Questions