【问题标题】:How to reset build number in jenkins?如何在詹金斯重置内部版本号?
【发布时间】:2014-01-21 00:19:02
【问题描述】:

我正在使用 Jenkins 和 Gradle 来构建我的 java 项目。

每次构建项目时,我都会在 Jenkins 屏幕上获得一个新的构建号。

以下是我的 Jenkins 构建信息:

Success > Console Output  #96   03-Jan-2014 15:35:08    
Success > Console Output  #95   03-Jan-2014 15:27:29     
Failed > Console Output  #94    03-Jan-2014 15:26:16     
Failed > Console Output  #93    03-Jan-2014 15:25:01     
Failed > Console Output  #92    03-Jan-2014 15:23:50     
Success > Console Output  #91   03-Jan-2014 12:42:32    
Success > Console Output  #90   03-Jan-2014 12:02:45

我想重置 Jenkins 内部版本号,例如:

Success > Console Output  #1    03-Jan-2014 12:02:45

如何在 Jenkins 中重置内部版本号?

【问题讨论】:

    标签: jenkins


    【解决方案1】:

    可以从 groovy 脚本控制台更轻松地完成。 转至http://your-jenkins-server/script 在脚本窗口输入:

    item = Jenkins.instance.getItemByFullName("your-job-name-here")
    //THIS WILL REMOVE ALL BUILD HISTORY
    item.builds.each() { build ->
      build.delete()
    }
    item.updateNextBuildNumber(1)
    

    【讨论】:

    • 或通过 cli java -jar jenkins-cli.jar -s https://jenkins.example.com groovysh \ 'jenkins.instance.getItemByFullName("job-name").updateNextBuildNumber(1021)'
    • 这绝对是最好的答案。如果你只想设置数字,你甚至不需要删除循环。
    • 由于某种原因,这只对最新版本执行删除,但以下对我有用:echo "deleting all builds of ${jobName}" item = Jenkins.instance.getItemByFullName("${jobName}") for (build in item.builds){ build.delete(); } item.updateNextBuildNumber(1)
    • 一个菜鸟问题..我怎么知道确切的工作名称。
    • @AmmarMujeeb 转到您的 Jenkins 仪表板,您将在那里看到作业名称。你也可以在 Linux 上转到/var/lib/jenkins/jobs/,那里的目录名称就是确切的作业名称
    【解决方案2】:

    来自here

    假设您的 Hudson 工作名为 FooBar,

    • 将 FooBar 重命名为 FooBar-Copy
    • 使用 FooBar-Copy 中的“复制现有作业”选项创建一个名为 FooBar 的新作业
    • 删除 FooBar-Copy

    【讨论】:

      【解决方案3】:
      • 首先清除工作区并摆脱以前的构建。
        • 在服务器上导航到 工作目录,例如。 'var/lib/jenkins/jobs/myJob' 删除 工作区和构建目录以及任何轮询文件,lastSuccessful, lastStable 文件等。您应该只有 config.xml 和 lastBuildNumber。
        • 使用类似 service jenkins stop
        • 的方式关闭 jenkins
        • 编辑名为 nextBuildNumber 的文件,插入 1 而不是当前的内部版本号
        • 再次启动jenkins,service jenkins start
        • 登录 jenkins 并开始你的工作并点击构建。应该开始构建工作#1

      【讨论】:

      • 这很有帮助。谢谢。
      【解决方案4】:

      如果你想设置下一个版本号,可以使用插件“NextBuildNumber”。但这不适用于您的情况,因为您需要的内部版本号 1 小于您当前的内部版本号。

      这里需要先清除所有以前的构建。您可以通过运行这个简单的脚本来做到这一点 转到 -> 管理 Jenkins -> 脚本控制台

      // change this variable to match the name of the job whose builds you want to delete
      def jobName = "Your Job Name"
      def job = Jenkins.instance.getItem(jobName)
      job.getBuilds().each { it.delete() }
      

      现在您可以将下一个构建号设置为 1 并运行构建。它将以 1 开头。 :) 就这么简单。

      更新 - Jenkins 现在有一个 Purge Job History 插件可以以最简单的方式完成这项工作。查看页面了解更多详情 - https://wiki.jenkins.io/display/JENKINS/Purge+Job+History+Plugin

      【讨论】:

        【解决方案5】:

        更一般地将您的内部版本号重置为 N(其中 N 不一定是 1):

        • 删除buildNumber >= N 的任何现有构建。
        • 编辑Program Files (x86)/Jenkins/jobs/yourjob/nextBuildNumber。将其包含的数字设置为N
        • 从 Jenkins 中选择 Manage Jenkins -> Reload Configuration from Disk

        【讨论】:

        【解决方案6】:

        扩展已接受的答案,以下是如何一次为所有项目执行此操作:

        Jenkins.instance.allItems.each() { 
          item -> item.builds.each() { 
            build -> build.delete()
          }
          item.updateNextBuildNumber(1)
        }  
        

        【讨论】:

          【解决方案7】:

          作为@antweiss 出色答案的延伸,我们实际上可以更进一步......

          没有必要删除完整的构建历史,如果你不想,你可以简单地将时间回滚到前一点:

          resetNumberTarget = 14
          item = Jenkins.instance.getItemByFullName("Project Name [from project Dashboard]")
          //println(item)
          
          item.builds.each() { build ->
            //println(build)
            //println(build.number)
          
            if(build.number >= resetNumberTarget)
            {
              //println("About to Delete '" + build + "'")    
              build.delete()  
            }
          }
          
          item.updateNextBuildNumber(resetNumberTarget)
          

          如果您想要一个虚拟运行,要检查它会做什么,而不实际执行它,只需注释掉 build.delete()item.updateNextBuildNumber(resetNumberTarget) 行并取消注释各种打印命令。


          文档: 这些对象的详细信息很难找到,但我确定了以下内容:

          【讨论】:

            【解决方案8】:

            使用 Purge Job History 插件 (Jenkins >= 2.176.1)

            https://plugins.jenkins.io/purge-job-history/

            【讨论】:

              【解决方案9】:

              您可以使用nexBuildNumber 插件或简单地修改nexBuildNumber 文件来重置内部版本号。 以下是您需要执行的步骤:

              • 转到.jenkins/Jobs/<YourJobName>/build/,备份此文件夹(如果您需要将来使用)并删除build文件夹。

              注意:一旦你清理了旧的构建,你就会丢失构建历史并且它们 在 Jenkins 仪表板上不再可用。

              • 重新加载配置(Jenkins -> 管理 Jenkins)。
              • 通过使用 Next Build Number 插件或修改您的作业目录中的 nextBuildNumber 文件将下一个构建版本设置为 1。

              【讨论】:

                【解决方案10】:

                我找到了一个简单的方法来做到这一点。

                1. 清理您的工作空间。
                2. 转到保存在 Jenkins 上的每个构建并将其删除。
                3. 将构建号设置为 1,然后构建。

                Jenkins 使用上一个版本来确定下一个版本号,如果您输入的版本号低于上一个版本号,Jenkins 会自动将您的版本号增加到高于上一个版本。所以这里我们只是

                【讨论】:

                  【解决方案11】:

                  所以我尝试了上述解决方案并得到以下错误。,

                  groovy.lang.MissingPropertyException:没有这样的属性:为 班级: org.jenkinsci.plugins.workflow.multibranch.WorkflowMultiBranchProject。

                  所以我尝试了这个,

                  item = Jenkins.get().getItem("Job Name")
                  jobs = item.getAllJobs()
                  jobs.each() { item -> 
                    builds = item.getBuilds()
                    builds.each() { b -> 
                      b.delete()
                    }
                    item.updateNextBuildNumber(1)
                  
                  }
                  

                  成功了!!

                  【讨论】:

                    【解决方案12】:

                    重置所有作业的内部版本号:

                    Jenkins.instance.getAllItems(AbstractProject.class).each {
                        item = Jenkins.instance.getItemByFullName(it.fullName)
                        //THIS WILL REMOVE ALL BUILD HISTORY
                        item.builds.each() { build ->
                            build.delete()
                        }
                        item.updateNextBuildNumber(1)
                    }
                    

                    【讨论】:

                      猜你喜欢
                      • 1970-01-01
                      • 1970-01-01
                      • 2018-01-29
                      • 2017-12-15
                      • 2017-09-03
                      • 1970-01-01
                      • 2014-12-30
                      • 1970-01-01
                      • 1970-01-01
                      相关资源
                      最近更新 更多