Continuous integration 我如何知道Jenkins当前项目的版本号?

Continuous integration 我如何知道Jenkins当前项目的版本号?,continuous-integration,hudson,environment-variables,jenkins,Continuous Integration,Hudson,Environment Variables,Jenkins,我知道BUILD\u NUMBER环境变量;但是,除非我弄错了,否则这是一个全局变量,似乎在所有项目中共享。这是一个问题,因为如果我有两个代理运行作业,一个脚本可能会在另一个脚本为另一个项目更新当前项目的版本号后尝试使用该版本号 下面是一个示例场景: 作业J1启动,执行一些脚本S构建编号当前为500 有人手动启动作业J2,该作业现在将BUILD\u NUMBER设置为完全不同的值,例如750 脚本S仍在运行,现在达到实际使用BUILD\u NUMBER的点,现在设置为750(jobJ1的值不可

我知道
BUILD\u NUMBER
环境变量;但是,除非我弄错了,否则这是一个全局变量,似乎在所有项目中共享。这是一个问题,因为如果我有两个代理运行作业,一个脚本可能会在另一个脚本为另一个项目更新当前项目的版本号后尝试使用该版本号

下面是一个示例场景:

  • 作业J1启动,执行一些脚本S<代码>构建编号当前为500
  • 有人手动启动作业J2,该作业现在将
    BUILD\u NUMBER
    设置为完全不同的值,例如750
  • 脚本S仍在运行,现在达到实际使用
    BUILD\u NUMBER
    的点,现在设置为750(jobJ1的值不可能达到500)

我的理解正确吗?如果是这样,我如何解决这个问题?

使用获取下一个版本号插件


内部版本号不是系统的全局版本号。每个工作都是本地的。在您的示例中,J1和J2将具有不同的生成编号(J1=500,J2-750)值,并且在作业期间,它们将在作业内保持不变。

您可以使用:
http://[JENKINS\u URL]/job/[job\u NAME]/lastBuild/buildNumber

或者在作业本身中,可以使用环境变量:
${BUILD\u NUMBER}

您也可以使用所有其他永久链接,例如:
/lastStableBuild/

/lastsucessfulbuild/

/lastFailedBuild/

等等

除非您使用插件(如)自定义内部版本号,否则您的下一个内部版本号将始终是最新的内部版本号的增量

每个作业的内部版本号为。它们不是全局环境变量。
每次执行任何作业时,它都会将现有环境变量复制/继承到新会话中。Jenkins/Hudson然后将所有作业参数和额外变量(包括
${BUILD\u NUMBER}
)添加到新会话中。它们仅在该会话期间(即作业运行期间)作为环境变量可用。作业完成后,此会话将被销毁(以及为会话生成的所有额外变量)

无法从另一个作业运行/会话访问一个作业运行/会话的环境变量。但是,您可以通过我提供的URL方法访问另一个作业的
/lastBuild/buildNumber
。您也可以用同样的方法访问
/lastBuild/buildTimestamp

要访问其他作业的作业参数,可以使用:
http://[JENKINS\u URL]/job/[job\u NAME]/lastBuild/api/json


http://[JENKINS\u URL]/job/[job\u NAME]/lastBuild/api/xml


但是您需要解析输出以获得所需的内容

我相当肯定你的理解是错误的。你为什么不安排两份工作,先睡一会儿,然后打印出版本号,自己看看呢?@Jack Leow:但这正是我所做的!这很奇怪。我想我必须寻求一个不同的解释。我希望你是对的;然而,如果是这样的话,我很难理解如何才能看到我所看到的(即,在J1中运行的脚本生成了带有
BUILD_NUMBER
671的输出,尽管J1的BUILD NUMBER只增加到305…同时,J2的最新BUILD NUMBER是671)。我想一定有其他的解释;知道会是什么吗?我肯定——至少对最新的詹金斯来说是这样。我们在一些工作中使用BUILD_编号,并且它总是正确设置的。验证的一种方法是插入“执行Windows批处理命令”,并将该命令设置为“设置”。这将把变量转储到控制台,您可以看到值是什么。请注意,有些插件可能会以不同的方式执行其代码和参数解析,或者在BUILD_NUMBER无法正确计算的上下文中执行。但是您的作业是否曾经并行运行过,还是它们一个接一个地运行?我想这可能是你最后一点——关于插件在不同的上下文中执行代码——最终解释了我所看到的。调查正在进行中!我以并行和串行方式运行作业。在这两种情况下,BUILD_NUMBER都按预期工作。