Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/jenkins/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/clojure/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Jenkins:使用命令行删除旧版本_Jenkins - Fatal编程技术网

Jenkins:使用命令行删除旧版本

Jenkins:使用命令行删除旧版本,jenkins,Jenkins,我删除了带有rm的旧jenkins构建,其中包含作业宿主: my_job/builds/$ rm -rf [1-9]* 这些旧版本在作业页面中仍然可见。 如何使用命令行删除它们? (在每个生成用户界面中没有“删除”按钮)看起来这已经添加到CLI,或者至少正在处理: 语法如下:java-jar-jenkins-cli.jar-shttp://my.jenkins.host 删除构建我的项目“1-7499”-username$user--password$password您需要手动执行此操作,而不

我删除了带有
rm
的旧jenkins构建,其中包含作业宿主:

my_job/builds/$ rm -rf [1-9]*
这些旧版本在作业页面中仍然可见。 如何使用命令行删除它们?

(在每个生成用户界面中没有“删除”按钮)

看起来这已经添加到CLI,或者至少正在处理:


语法如下:
java-jar-jenkins-cli.jar-shttp://my.jenkins.host 删除构建我的项目“1-7499”-username$user--password$password

您需要手动执行此操作,而不是让Jenkins为您删除旧的构建吗

您可以更改作业配置,根据天数或生成数自动删除旧生成。不用再担心,也不用跟踪,詹金斯只是为你做的

  • 查看您的主页jenkins目录:
    • “管理Jenkins”==>“配置系统”
    • 选中字段“主目录”(通常为/var/lib/jenkins
  • 用于删除所有jenkins作业生成的命令

    /jenkins_home/jobs> rm -rf */builds/*
    
  • 删除后应重新加载配置:

    • “管理Jenkins”==>“从磁盘重新加载配置”

  • 这里还有另一个选项:使用cURL远程删除构建。(将URL的开头替换为使用浏览器访问Jenkins的内容。)

    上面删除了job myJob的构建#1到#56

    如果在Jenkins实例上启用了身份验证,则必须提供用户名和API令牌,如下所示:

    $ curl -u userName:apiToken -X POST http://jenkins-host.tld:8080/jenkins/job/myJob/[1-56]/doDeleteAll
    
    API令牌必须从Jenkins中的/me/configure页面获取。只需单击“显示API令牌…”按钮即可显示用户名和API令牌


    编辑:正如yegeniy在下面的评论中指出的那样,可能需要将上面URL中的
    doDeleteAll
    替换为
    doDelete
    ,才能实现这一点,具体取决于配置。

    您可以通过使用Hudson API的Groovy脚本来实现。。访问你的詹金斯装置

    http://localhost:38080/script.
    
    例如,使用以下脚本删除所有项目的所有旧版本: 注意:如果使用指纹,请小心,您将丢失所有历史记录

    导入hudson.model*
    //对于每个项目
    for(Hudson.instance.items中的项){
    //检查作业是否未生成
    如果(!item.isBuilding()){
    System.out.println(“删除作业的所有生成”+item.name)
    for(内置项.getBuilds()){
    build.delete()
    }  
    }
    否则{
    System.out.println(“正在跳过作业”+item.name+”,当前正在生成)
    }
    }
    
    或用于清洁所有工作区:

    导入hudson.model*
    //对于每个项目
    for(Hudson.instance.items中的项){
    //检查作业是否未生成
    如果(!item.isBuilding()){
    println(“清除作业的工作区”+item.name)
    项目.doDoWipeOutWorkspace()
    }
    否则{
    println(“正在跳过作业”+项.名称+”,当前正在生成)
    }
    }
    

    Jenkins Scriptler控制台中的

    上有许多示例运行以下Groovy脚本删除视图下列出的所有作业构建:

    import jenkins.model.Jenkins
    
    hudson.model.Hudson.instance.getView('<ViewName>').items.each() {
        println it.fullDisplayName
    
    
        def jobname = it.fullDisplayName
        def item = hudson.model.Hudson.instance.getItem(jobname)
        def build = item.getLastBuild()
        if (item.getLastBuild() != null) {
            Jenkins.instance.getItemByFullName(jobname).builds.findAll {
                it.number <= build.getNumber()
            }.each {
                it.delete()
            }
    
        }
    }
    
    导入jenkins.model.jenkins
    hudson.model.hudson.instance.getView(“”).items.each(){
    println it.fullDisplayName
    def jobname=it.fullDisplayName
    def item=hudson.model.hudson.instance.getItem(作业名)
    def build=item.getLastBuild()
    if(item.getLastBuild()!=null){
    Jenkins.instance.getItemByFullName(jobname.builds.findAll){
    
    it.number以下脚本清除旧版本的作业。如果手动删除版本,则应从磁盘重新加载配置:

    import hudson.model.*
    
    for(item in Hudson.instance.items) {
        if (!item.isBuilding()) {
            println("Deleting old builds of job " + item.name)
            for (build in item.getBuilds()) {
                //delete all except the last
                if (build.getNumber() < item.getLastBuild().getNumber()) {
                    println "delete " + build
                    try {
                        build.delete()
                    } catch (Exception e) {
                        println e
                    }
                }
            }
        } else {
            println("Skipping job " + item.name + ", currently building")
        }
    }
    
    导入hudson.model*
    for(Hudson.instance.items中的项){
    如果(!item.isBuilding()){
    println(“删除作业的旧版本”+item.name)
    for(内置项.getBuilds()){
    //删除除最后一个之外的所有
    if(build.getNumber()
    从脚本控制台运行此操作,但您需要更改作业名称:

    def jobName = "name"
    def job = Jenkins.instance.getItem(jobName)
    job.getBuilds().each { it.delete() }
    job.nextBuildNumber = 1
    job.save()
    
    def jobName=“我的工作名称”
    def job=Jenkins.instance.getItem(作业名)
    job.getBuilds().findAll{it.number<10}.each{it.delete()}
    

    如果您有12个版本,这将清除0-9个版本,剩下12、11、10个版本。只需打开脚本控制台,此脚本将配置所有Jenkins作业的版本保留设置。

    将值从30和200更改为您需要的套件,运行脚本,然后重新启动Jenkins服务

    #!/bin/bash
    
    cd $HOME
    for xml in $(find jobs -name config.xml)
    do
        sed -i 's#<daysToKeep>.*#<daysToKeep>30</daysToKeep>#' $xml
        sed -i 's#<numToKeep>.*#<numToKeep>200</numToKeep>#' $xml
    done
    
    !/bin/bash
    cd$HOME
    对于$中的xml(find jobs-name config.xml)
    做
    sed-i的#.*30#'$xml
    sed-i的#.*200#'$xml
    完成
    
    我发现,当您创建一个项目时,此选项非常有用。在正确设置之前,您会遇到多次失败。完成后,我想清除旧的错误版本,因为它们最终会发出噪音。此选项在哪里?我在Jenkins-1.5的版本中找不到它。它位于每个作业的配置中。请选择“放弃旧版本”lds复选框和选项可用于控制删除旧版本的方式。@ziggy您找不到它,因为它是一个需要首先安装的插件。我想使用此功能“”“更改作业配置以自动删除旧版本”。但它不起作用。我已经设置好了,保留了数千个旧版本。您没有提到从何处获取
    jenkins cli.jar
    :您的jenkins安装将告诉您此页面上的位置:
    http://localhost:8080/cli/
    。我应该在哪里安装jar文件?不能安装jar。只需将其放在文件中的某个位置即可stem并输入带有完整路径的命令(或在该目录中输入命令
    def jobName = "MY_JOB_NAME"
    def job = Jenkins.instance.getItem(jobName)
    job.getBuilds().findAll { it.number < 10 }.each { it.delete() }
    
    #!/bin/bash
    
    cd $HOME
    for xml in $(find jobs -name config.xml)
    do
        sed -i 's#<daysToKeep>.*#<daysToKeep>30</daysToKeep>#' $xml
        sed -i 's#<numToKeep>.*#<numToKeep>200</numToKeep>#' $xml
    done