如果 Jenkins 构建标记为“永远保留此构建”,请勿删除它 - 用于删除 Jenkins 构建的 Groovy 脚本

2024-05-05

我有以下 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 个构建,即 Jenkins 中的 build# 1 到 build 15,并且您想要删除所有构建但保留 build# 13,则此脚本将删除构建(build# 1 -12 和 14-15 - 即使您将任何构建标记为“永远保留此构建”)并且仅保留构建#13。


现在,我想要的是:

  1. 如果构建在 Jenkins 中被标记为“永远保留此构建”,我应该在此脚本中更改什么才能不删除构建。我尝试了该脚本,它也删除了永久保留的构建。

  2. 可以说,如果我在 Jenkins 中使用“构建名称设置器插件”,它可以为我提供构建名称作为我想要的名称,即而不是仅构建为 build#1 或 #2 或 #15,我将获得构建作为 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,然后此脚本应仅删除该版本上的内部版本号(并且不应删除其他版本的内部版本)。


如果您想测试构建是否已标记为永久,请使用

if (!build.isKeepLog()) {
    // Build can be deleted
} else {
    // Build is marked permanent
}

我认为你应该能够使用getName() 方法 http://javadoc.jenkins-ci.org/hudson/model/Item.html#getName%28%29在每个构建上检查是否应该删除给定的构建。 API JavaDoc 可能相当晦涩,所以我经常继续下去GitHub https://github.com/jenkinsci并查看 Jenkins 插件的代码,该插件正在执行与我需要的类似的操作。这公共脚本存储库 https://github.com/jenkinsci/jenkins-scripts/tree/master/scriptler也可能有用。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如果 Jenkins 构建标记为“永远保留此构建”,请勿删除它 - 用于删除 Jenkins 构建的 Groovy 脚本 的相关文章

随机推荐