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

时间:2014-01-03 10:45:59

标签: jenkins

我正在使用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中重置内部版本号?

提前致谢。

12 个答案:

答案 0 :(得分:133)

从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)

答案 1 :(得分:59)

来自here

  

鉴于您的Hudson职位名为FooBar,

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

答案 2 :(得分:33)

  • 第一个wipeout工作区并摆脱以前的构建。
    • 在服务器上导航至 工作目录,例如。 'var / lib / jenkins / jobs / myJob'删除 工作区& build dirs以及任何轮询文件,lastSuccessful, lastStable文件等你应该只有config.xml和 lastBuildNumber。
    • 使用 service jenkins stop
    • 之类的东西关闭jenkins
    • 编辑名为 nextBuildNumber 的文件,插入1代替当前版本号
    • 再次启动jenkins,服务jenkins开始
    • 登录jenkins并继续工作并点击构建。应该开始建立工作#1

答案 3 :(得分:17)

如果你想设置下一个内部版本号,那么就有插件“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现在有一个清除工作历史插件,可以最简单的方式完成此操作。查看页面了解更多详情 - https://wiki.jenkins.io/display/JENKINS/Purge+Job+History+Plugin

答案 4 :(得分:5)

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

  • 删除buildNumber >= N
  • 所有现有版本
  • 修改Program Files (x86)/Jenkins/jobs/yourjob/nextBuildNumber。将其包含的数字设置为N
  • 从Jenkins,选择Manage Jenkins -> Reload Configuration from Disk

答案 5 :(得分:5)

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

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

答案 6 :(得分:2)

作为@ 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)行并取消注释各种打印命令。

<小时/> 文档: 很难找到这些对象的细节,但我发现了以下内容:

答案 7 :(得分:1)

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

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

注意:清理旧版本后,您将丢失构建历史记录   在Jenkins仪表板上不再可用。

  • 重新加载配置(Jenkins - &gt;管理Jenkins)。
  • 使用Next Build Number插件或修改job目录中的nextBuildNumber文件,将下一个版本版本设置为1。

答案 8 :(得分:0)

我找到了一种简单的方法。

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

Jenkins使用先前的内部版本确定下一个内部版本号,如果您输入的内部版本号低于先前的内部版本号,Jenkins会自动将您的内部版本号增加到高于先前的内部版本号。所以我们在这里

答案 9 :(得分:0)

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

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

答案 10 :(得分:0)

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

<块引用>

groovy.lang.MissingPropertyException: No such property: builds for 班级: 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)

}

它奏效了!!

答案 11 :(得分:-1)

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

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)
}