3

我知道BUILD_NUMBER环境变量;然而,除非我错了,这是一个全球变量,似乎在所有项目之间共享。这是一个问题,因为如果我有两个代理运行作业,一个脚本可能会尝试在另一个脚本更新其不同项目后使用当前项目的内部版本号。我如何知道詹金斯当前项目的内部版本号?

下面是一个例子情形:

  • 工作Ĵ 1周开始,执行一些脚本小号BUILD_NUMBER目前,比方说,500
  • 有人手动启动工作Ĵ,现在设置BUILD_NUMBER到完全不同的东西,比方说,750
  • 脚本小号,它仍然在运行,现在达到实际使用的点BUILD_NUMBER,现在设置为750(作业不可能的值为J,它只能达到500)。

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

+1

我相当肯定你的理解是不正确的。你为什么不设置两个工作,睡觉一会儿,然后打印出BUILD_NUMBER,只是为了亲眼看看? –

+0

@Jack Leow:但那正是我所做的!这很奇怪。我想我必须寻求不同的解释。 –

回答

8

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

+0

我希望你是对的;然而,如果是这样的话,我很难理解我能看到我看到的东西(即J1内运行的脚本使用'BUILD_NUMBER' 671产生的输出,尽管J1的内部版本数量只增加到了305 ...同时,* J2 *的最新内部版本号为671)。我想还有一些其他的解释。任何想法可能是什么? –

+0

我确定 - 至少对于詹金斯来说是最新的。我们在我们的几项工作中使用BUILD_NUMBER,并始终正确设置。一种验证方法 - 插入“执行Windows批处理命令”并让命令刚刚“设置”。这会将变量转储到控制台,您可以看到这些值是什么。请注意,插件可能会不同地或在BUILD_NUMBER未正确评估的上下文中执行其代码和参数解析。 –

+0

但是你的工作是否平行运行,还是一个接一个地运行? –

4

你可以得到最新(已完成或正在执行)建立与数:
http://[JENKINS_URL]/job/[JOB_NAME]/lastBuild/buildNumber
或从工作本身中,你可以使用环境变量:
${BUILD_NUMBER}

您可以使用所有其他固定链接太多,如:
/lastStableBuild/
/lastSuccessfulBuild/
/lastFailedBuild/
等。

除非你是一个插件,例如Next Build Number自定义版本号,你的下一个构建数将永远是一个增量最新版本号。

内部编号为每个作业。它们不是全球性的环境变量。
每次执行任何作业时,它将拷贝/继承现有环境变量到新会话。Jenkins/Hudson然后将所有工作参数和额外变量(包括${BUILD_NUMBER})添加到新会话中。它们仅在该会话期间(即在作业运行期间)作为环境变量提供。一旦作业完成,这个会话将被销毁(以及为会话生成的所有额外变量)。

不能访问环境要从另一个任务运行/会话一个作业运行/会话变量。您可以使用通过我提供的URL方法访问另一个作业的/lastBuild/buildNumber。您也可以通过相同的方式访问/lastBuild/buildTimestamp

要访问作业参数高就,你可以使用:
http://[JENKINS_URL]/job/[JOB_NAME]/lastBuild/api/json

http://[JENKINS_URL]/job/[JOB_NAME]/lastBuild/api/xml
但你需要解析输出,你需要什么。