如何重置詹金斯的内部版本号?


89

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

每次构建项目时,都会在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中重置内部版本号?

Answers:


161

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

6
或通过clijava -jar jenkins-cli.jar -s https://jenkins.example.com groovysh \ 'jenkins.instance.getItemByFullName("job-name").updateNextBuildNumber(1021)'
ykhrustalev '16

3
这绝对是最好的答案。如果您只想设置数字,则甚至不需要删除循环。
尼克

由于某种原因,这只会在最新版本上执行删除操作,但是以下操作确实对我echo "deleting all builds of ${jobName}" item = Jenkins.instance.getItemByFullName("${jobName}") for (build in item.builds){ build.delete(); } item.updateNextBuildNumber(1)
有用

一个菜鸟问题..我怎么知道确切的工作名称。
Ammar Mujeeb '17

@AmmarMujeeb转到您的Jenkins仪表板,您将在此处看到工作名称。您也可以/var/lib/jenkins/jobs/在Linux上转到该目录,其中有确切的作业名称
rickrizzo

62

这里

假设您在哈德森的工作名为FooBar,

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

35
  • 首先清除工作区,并摆脱以前的构建。
    • 在服务器上,导航到作业目录,例如。“ var / lib / jenkins / jobs / myJob”删除工作区和构建目录以及所有轮询文件,lastSuccessful,lastStable文件等。您应该仅具有config.xml和lastBuildNumber。
    • 使用服务詹金斯停止之类的方法来关闭詹金斯
    • 编辑名为nextBuildNumber的文件,插入1而不是当前内部版本号
    • 再次启动詹金斯, 服务詹金斯开始
    • 登录到jenkins并开始工作,然后开始构建。应该开始建立工作#1

1
这非常有帮助。谢谢。

23

如果要设置下一个内部版本号,则可以使用插件“ 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


6

通常,将内部版本号重置为NN不一定是1):

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

在选择“从磁盘重新加载配置”之前,请确保已阅读此缺陷-issue.jenkins-ci.org/browse/JENKINS-32984
user3181500 '17

6

扩展接受的答案,以下是一次对所有项目执行的方法:

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

4

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


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


1

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

  • 转至.jenkins/Jobs/<YourJobName>/build/,备份该文件夹(如果需要将来使用),然后删除构建文件夹。

注意:清理旧版本后,您将失去版本历史,并且在Jenkins仪表板上不再可用。

  • 重新加载配置(Jenkins-> Manage Jenkins)。
  • 通过使用“下一内部版本号”插件或修改nextBuildNumberyourjob目录中的文件,将下一内部版本版本设置为1 。

0

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

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

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



-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)
}
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.