如何删除 Jenkins 中的 build 11 到 1717?

Aar*_*lla 60 jenkins

由于配置错误,我在 Jenkins 作业中有超过 1700 次失败的构建。

我怎样才能有效地清洁它们?

Dan*_*eck 89

您有多种选择:

  • 临时设置要保留在作业配置中的构建数量(丢弃旧构建),以便在下一次构建完成时删除这些构建。如果下一个版本是 1800,请将其设置为保留最近的 85 左右。在开始下一个构建之前,所有较旧的构建(即 1 到 10)标记为“永久保留此构建”。如果您有一个阻止上游构建被删除的下游作业,则此选项将无法删除某些构建(尽管它们都失败了,但在您的情况下这不是问题)。

  • 使用脚本控制台管理詹金斯。如果它是顶级工作(不在文件夹中),则以下方法可以解决问题:

    Jenkins.instance.getItemByFullName('JobName').builds.findAll { it.number > 10 && it.number < 1717 }.each { it.delete() }

    当然,这种方法一般需要良好的备份。使用脚本控制台可以打破很多东西。

  • 从磁盘中删除构建的文件夹(默认情况下$JENKINS_HOME/jobs/JobName/builds/,使用开始时间戳作为文件夹名称)并重新启动 Jenkins,或从磁盘重新加载配置。此选项将不允许通过将任何更改移动到后续构建来保持 SVN 历史记录的插件来完成它们的工作。

  • 我找到了另一个解决方案:使用`jenkins-cli.jar -s ... delete-builds envjs 11-1717` (10认同)

hel*_*rry 22

只需进行 API 调用:

curl -X POST http://jenkinUser:jenkinAPIToken@yourJenkinsURl.com/job/theJob/[11-1717]/doDelete

要获取 APIToken:登录 Jenkins > 配置 > 显示 API 令牌。


jal*_*tek 17

正如Aaron正确指出的那样,您也可以为此目的使用Jenkins CLI

java -jar jenkins-cli.jar -s http://yourserver.com delete-builds <JobName> 11-1717
Run Code Online (Sandbox Code Playgroud)


Aar*_*lla 7

在 Jenkins 脚本控制台中运行的脚本模板。reallyDelete在实际删除之前使用该标志对其进行测试:

// Jenkins job
def jobName = 'foo'
// Range of builds to delete
def rs = Fingerprint.RangeSet.fromString("11-1717", false);
// Set to true to actually delete. Use false to test the script.
def reallyDelete = false;

// ----------------------------------
def job = Jenkins.instance.getItemByFullName(jobName);
println("Job: ${job.fullName}");

def builds = job.getBuilds(rs);
println("Found ${builds.size()} builds");
builds.each{ b-> 
  if (reallyDelete) {
    println("Deleting ${b}");
    b.delete();
  } else {
    println("Found match ${b}");
  }
}
Run Code Online (Sandbox Code Playgroud)