如何删除 Jenkins 中的版本 11 至 1717?

如何删除 Jenkins 中的版本 11 至 1717?

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

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

答案1

您有多种选择:

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

  • 使用脚本控制台管理 Jenkins。如果它是一项顶级作业(不在文件夹中),则可以使用以下命令:

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

    当然,这种方法通常需要良好的备份。使用脚本控制台可能会破坏很多东西。

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

答案2

只需进行 API 调用:

curl -X POST http://jenkinUser:[email protected]/job/theJob/[11-1717]/doDelete

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

答案3

作为亚伦正确表述你也可以使用Jenkins 命令行以此目的:

java -jar jenkins-cli.jar -s http://yourserver.com delete-builds <JobName> 11-1717

答案4

当我接管 Jenkins 服务器时,我也面临着同样的任务,其中有 150 多个作业,最多有 3000 个旧构建,所以我编写了一个小型 bash 脚本,只保留最后 10 个构建:

#! /bin/bash

initialPath=$(pwd);

find /var/lib/jenkins/ -type d -name builds | while read jobs
 do

    #############################################################
    ## Enter build-directory of current job and get some numbers
    #############################################################
    cd "$jobs" ;
    ls -d [[:digit:]]* &>/dev/null ;
    rc=$? ;
    if [[ $rc -eq 0 ]] ;
     then
        buildName=$(ls -d [[:digit:]]*)  ;
        latestBuild=$(echo $buildName | awk '{print $NF}') ; # highest number
        oldestBuild=$(echo $buildName | awk '{print $1}') ; # lowest number
        amountOfBuilds=$(echo $buildName | wc -w ) ;
        lastBuildToKeep=$(echo "${latestBuild} 9" | awk '{print $1 - $2}') ;

        ############################################################
        ## Skip Folder if it contains less than 10 builds
        ############################################################
        if [ ${amountOfBuilds} -le 10 ] ;
         then
            echo "Skipping $(pwd) --> less than 10 builds";
         else
            ############################################################
            ## Delete all build-directories except the last 10
            ############################################################
            for (( i=$oldestBuild; i<$lastBuildToKeep; i++))
             do
                echo "Deleting $(pwd)/${i} ..."
                rm -r "$i" ;
            done ;
        fi ;
     else
        echo "Skipping $(pwd) --> Zero builds";
    fi ;
done ;

############################################################
## go back to $initialPath
############################################################
cd "$initialPath" ;

强烈建议随后重新启动 Jenkins 以避免出现问题。谢谢@Aaron Digulla

相关内容