Note that there are some explanatory texts on larger screens.

plurals
  1. PO
    text
    copied!<p>OK - Solution for my question 2 is here: I'm still working on fixing question 1.</p> <p><a href="http://scriptlerweb.appspot.com/script/show/102001" rel="nofollow noreferrer">http://scriptlerweb.appspot.com/script/show/102001</a></p> <p><strong>bulkDeleteJenkinsBuildsExceptOne_OfAGivenRelease.groovy</strong></p> <pre><code>/*** BEGIN META { "name" : "Bulk Delete Builds except the given build number", "comment" : "For a given job and a given build numnber, delete all builds of a given release version (M.m.interim) only and except the user provided one. Sometimes a Jenkins job use Build Name setter plugin and same job generates 2.75.0.1 and 2.76.0.43", "parameters" : [ 'jobName', 'releaseVersion', 'buildNumber' ], "core": "1.409", "authors" : [ { name : "Arun Sangal" } ] } END META **/ // NOTE: Uncomment parameters below if not using Scriptler &gt;= 2.0, or if you're just pasting the script in manually. // ----- Logic in this script takes 5000 as the infinite number, decrease / increase this value from your own experience. // The name of the job. //def jobName = "some-job" // The release / version of a Jenkins job - i.e. in case you use "Build name" setter plugin in Jenkins for getting builds like 2.75.0.1, 2.75.0.2, .. , 2.75.0.15 etc. // and over the time, change the release/version value (2.75.0) to a newer value i.e. 2.75.1 or 2.76.0 and start builds of this new release/version from #1 onwards. //def releaseVersion = "2.75.0" // The range of build numbers to delete. //def buildNumber = "5" def lastBuildNumber = buildNumber.toInteger() - 1; def nextBuildNumber = buildNumber.toInteger() + 1; import jenkins.model.*; import hudson.model.Fingerprint.RangeSet; def jij = jenkins.model.Jenkins.instance.getItem(jobName); //def build = jij.getLastBuild(); println "" println("- Jenkins Job_Name: ${jobName} -- Version: ${releaseVersion} -- Keep Build Number: ${buildNumber}"); println "" println " -- Range before given build number: ${buildNumber}" println "" def setBuildRange = "1-${lastBuildNumber}" def range = RangeSet.fromString(setBuildRange, true); jij.getBuilds(range).each { if ( it.getDisplayName().find(/${releaseVersion}.*/)) { println " ## Deleting &gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;: " + it.getDisplayName(); // Trying to find - how to NOT delete a build in Jenkins if it's marked as "keep this build forever". If someone has an idea, please update this script with a newer version in GitHub. //if ( !build.isKeepLog()) { it.delete(); //} else { // println "build -- can't be deleted as :" + build.getWhyKeepLog(); //} } } println "" println " -- Range after given build number: ${buildNumber}" println "" setBuildRange = "${nextBuildNumber}-5000" range = RangeSet.fromString(setBuildRange, true); jij.getBuilds(range).each { if ( it.getDisplayName().find(/${releaseVersion}.*/)) { println " ## Deleting &gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;: " + it.getDisplayName(); it.delete(); } } println "" println("- Builds have been successfully deleted for the above mentioned release: ${releaseVersion}") println "" </code></pre> <p><img src="https://i.stack.imgur.com/NHvVm.jpg" alt="enter image description here"></p> <p>One can also call this script via a Jenkins job (requires 3 parameters as mentioned in the scriptler script) -OR call it from browser as well: using the following link:</p> <p>http ://YourJenkinsServerName:PORT/job/Some_Jenkins_Job_That_You_Will_Create/buildWithParameters?jobName=Test_AppSvc&amp;releaseVersion=2.75.0&amp;buildNumber=15</p>
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload