我如何知道Jenkins当前项目的内部版本号?

时间:2011-08-19 00:03:06

标签: continuous-integration hudson environment-variables jenkins

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

以下是一个示例场景:

  • 作业 J 1 启动,执行一些脚本 S 。目前,BUILD_NUMBER是500。
  • 有人手动启动作业 J 2 ,现在将BUILD_NUMBER设置为完全不同的东西,比如750。
  • 脚本 S ,现在仍然在运行,现在达到实际使用BUILD_NUMBER的点,现在设置为750(作业的一个不可能的值 J 1 ,最多只有500个。)

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

3 个答案:

答案 0 :(得分:10)

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

答案 1 :(得分:5)

您可以使用以下内容获取最新(已完成或正在执行)的内部版本号 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
但是您需要根据需要解析输出。

答案 2 :(得分:0)