我有以下 Groovy 脚本,它删除给定 Jenkins 作业的所有构建,除了用户提供的一个构建号(即想要保留)。
/*** BEGIN META {
"name" : "Bulk Delete Builds except the given build number",
"comment" : "For a given job and a given build number, delete all build except the user provided one.",
"parameters" : [ 'jobName', 'buildNumber' ],
"core": "1.409",
"authors" : [
{ name : "Arun Sangal" }
]
} END META **/
// NOTE: Uncomment parameters below if not using Scriptler >= 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 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);
println("Keeping Job_Name: ${jobName} and build Number: ${buildNumber}");
println ""
def setBuildRange = "1-${lastBuildNumber}"
def range = RangeSet.fromString(setBuildRange, true);
jij.getBuilds(range).each { it.delete() }
println("Builds have been deleted - Range: " + setBuildRange)
setBuildRange = "${nextBuildNumber}-5000"
range = RangeSet.fromString(setBuildRange, true);
jij.getBuilds(range).each { it.delete() }
println("Builds have been deleted - Range: " + setBuildRange)
这适用于任何 Jenkins 工作。例如:如果您的 Jenkins 作业名称是“TestJob”并且您有 15 个构建,即构建#1 在 Jenkins 中构建 15,并且您想要删除所有构建但保留构建#13,那么此脚本将删除构建(构建#1 -12 和 14-15 - 即使您将任何构建标记为“永远保留此构建”)并且只保留构建#13。
现在,我想要的是:
我应该在此脚本中更改什么以不删除构建 - 如果构建在 Jenkins 中标记为“永久保留此构建”。我尝试了脚本,它也删除了保持永远构建的内容。
可以说,如果我在 Jenkins 中使用“构建名称设置器插件”,它可以给我构建名称作为我想要的名称,而不是仅仅构建为 build#1 或 #2 或 #15,我将得到 build作为 build# 2.75.0.1, 2.75.0.2, 2.75.0.3, ..... , 2.75.0.15 (因为我会将构建名称/描述设置为使用一些包含 2.75.0 的变量(作为发布版本值) 并以实际 Jenkins 作业的内部版本号作为后缀,即最后 4 位数字 - 例如:将名称设置为:
${ENV,var="somepropertyvariable"}.${BUILD_NUMBER}
在这种情况下,我将开始将 Jenkins 构建为 2.75.0.1 到 2.75.0.x(其中 x 是该版本 (2.75.0) 的最后一个构建#)。同样,当我将属性发布版本更改为下一个版本,即 2.75.1 或 2.76.0 时,相同的 Jenkins 工作将开始为我提供 2.75.1.0、2.75.1.1、......、2.75.1 的构建版本。 x 或 2.76.0.1、2.76.0.2、.....、2.76.0.x 等等。在发布版本更改期间,假设我们的构建将再次从 1 开始(正如我在上面提到的 2.75.1 和 2.76.0 发布版本)。
在这种情况下,如果我的 Jenkins 作业的构建历史记录(显示 2.75.0.x、2.75.1.x 和 2.76.0.x 的所有构建),那么我应该在此脚本中进行哪些更改以包含第三个参数/参数. 这第三个参数将采用版本/版本值,即 2.75.0 或 2.75.1 或 2.76.0,然后此脚本应仅删除该版本上的构建号(并且不应删除其他版本的构建)。