Jenkins BUILD_NUMBER 限制 - 最大构建号

标签 jenkins integer range jenkins-plugins build-numbers

想知道 Jenkins 内部版本号 (BUILD_NUMBER) 可以获得的最大数量是多少?我试图在网上查找,但找不到此信息。

它是无限的还是有一些限制(是 INT 或 INT64 或其他一些类型)?

附言:不是正在寻找如何使用以下插件将其重置回#1 或#N 或将其值设置为给定名称(使用Set build name 插件)。 https://wiki.jenkins-ci.org/display/JENKINS/Next+Build+Number+Plugin

要找到它的限制,使用 Next Build Number 插件 - 当我将build设置为“65,535”时,它仍然可以让我成功获得 65536,并且我不断将此值增加到 999999999(9 次),它仍然有效,即下一个构建运行了 1000000000,并为其他几个运行/构建收获了一个有效的 Jenkins 构建#。

当我尝试将下一个内部版本号设置为:9999999999(10 次)时,Jenkins 插件出现错误消息(显示我设置的下一个内部版本号不是整数,即不在范围内):

A problem occurred while processing the request. Please check our bug tracker to see if a similar problem has already been reported. If it is already reported, please vote and put a comment on it to let us gauge the impact of the problem. If you think this is a new issue, please file a new issue. When you file an issue, make sure to add the entire stack trace, along with the version of Jenkins and relevant plugins. The users list might be also useful in understanding what has happened.

Stack trace

javax.servlet.ServletException: Build number must be an integer
    at org.jvnet.hudson.plugins.nextbuildnumber.NextBuildNumberAction.doSubmit(NextBuildNumberAction.java:87)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)

最佳答案

发现 Jenkins BUILD_NUMBER 是一个 SIGNED Integer 数据类型并且 INT signed limits 是:

int 2 or 4 bytes    -32,768 to 32,767 or -2,147,483,648 to 2,147,483,647

因此,Jenkins 作业可以设置或构建的最后一个值是:2147483647(此处为 4 个字节)。设置高于此数字的任何值都会产生预期的 INT 限制错误。

还注意到以下问题,使用 SET NEXT BUILD NUMBER 插件:

  1. 如果我将下一个内部版本号设置在 -2147483648 或 2147483647(正)之间,此插件在两种情况下都有效,即提供负数或正数并且设置它不会出错。但是,如果您已经到达 build# 2147483647(在 Job history 下),那么即使将 build# 设置为 1 也不会将下一个构建生成为 1 或 2 。或 3 等等。

  2. 由于 BUILD_NUMBER 已签名(上述范围内的 -N 到 +N)并且例如:设置 -22 用于使用插件设置下一个版本号,它没有'在我的情况下,不要给我 build# -21build# 21

发生的事情是,虽然提供了一个负值/低于上一个/上一个构建#的值,但这个插件正在将该值控制在限制范围内,但实际上没有做任何事情/给我预期的构建#。当我点击Build Now 时/每次点击 Build Now 并且点击“Set Next Build Number”来检查值时,我注意到 < strong>框中列出的数字根据我点击“立即构建”的次数自动递减(只有当您达到限制时才会发生这种情况)并且负值/较低值已对下一个内部版本号没有影响(根据插件文档)。

我通过创建一个新的 test_job 对此进行了测试(通过仅保留 1 个构建来丢弃旧构建):

  1. 单击“立即构建”,获得构建#1。
  2. 将下一个内部版本号设置为 100。
  3. 点击“立即构建”,获得“构建号 100”,点击“立即构建”,获得“构建号 101”。
  4. 这次将内部版本号设置为 11。
  5. 单击“立即构建”,但 Jenkins 没有给我构建号 12,而是给了我构建号 102(PS:根据其文档,这是该插件的预期行为,将下一个构建号设置为较低的数字 N 不会做任何事情)。

关于Jenkins BUILD_NUMBER 限制 - 最大构建号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40853169/

相关文章:

git - Jenkins Git fetch 指的是旧提交

security - 如何为 Jenkins JNLP 从站启用安全性?

C 编程整数

c - 如何在 C 中将整数拆分为单独的多位整数?

mysql - 如何在 MySQL 中执行复杂的范围查询

jenkins - 如何从 Jenkinsfile 调用 groovy 函数?

jenkins - 带有Kubernetes的Jenkins Workflow CD

c - 警告 : return makes pointer from integer without a cast but returns integer as desired

jquery - Internet Explorer 不会显示范围 slider 或使用 jquery 更新 CSS

php - mysql php用价格分组开始日期和结束日期