检索Jenkins中下游构建的构建号或工件

时间:2011-08-20 16:17:50

标签: hudson jenkins parameterized

我在詹金斯有一份工作(称之为BIGJOB);一些构建步骤是使用Parameterized Trigger Plugin触发其他作业(称为SMALLJOB)的构建,然后等待它们完成。我需要做的是从SMALLJOB上的触发构建中检索工件。

最初,我以为我可以使用Copy Artifact Plugin从触发的SMALLJOB的“last build”中检索工件。当一次只运行一个SMALLJOB时,这确实可以正常工作。

但我有多个BIGJOB正在运行,所有都触发多个SMALLJOB,因此使用“last build”是不可靠的,两个SMALLJOB同时完成。

是否有更可靠的方法从特定下游作业中获取工件?如果我可以获得内部版本号,我可以使用curl来获取工件。

3 个答案:

答案 0 :(得分:27)

如果将来有任何(其他)问题涉及这个问题:

使用参数化触发器插件作为构建步骤时,如果触发器配置为“阻止直到触发的项目完成其构建”,则以下环境变量可用于进一步的构建步骤:

  • LAST_TRIGGERED_JOB_NAME =“上次启动项目”
  • TRIGGERED_BUILD_NUMBER_ {项目名称} =“触发上次内部版本号”
从版本2.17开始

  • TRIGGERED_JOB_NAMES =“所有触发项目的逗号分隔列表”
  • TRIGGERED_BUILD_NUMBERS_ {project name} =“以逗号分隔的构建号列表触发”
  • TRIGGERED_BUILD_RESULT_ {项目名称} =“上次触发的项目构建结果”
  • TRIGGERED_BUILD_RESULT_ {项目名称} RUN {内部版本号} =“内部版本号触发构建的结果”
  • TRIGGERED_BUILD_RUN_COUNT_ {项目名称} =“为项目触发的构建数量”

查看插件网站上的更多信息 - 在问题中链接。

答案 1 :(得分:10)

找到我自己的答案。不像插件或已设置的变量那么容易,但它可以工作。

使用深度= 1的Jenkins XML API(非常重要以完全遍历URL和所有可用信息)和XPATH。以下是我使用的网址示例:

http://jenkins/job/SMALLJOB/api/xml?depth=1&xpath=/freeStyleProject/build[action/cause/upstreamProject="%JOB_NAME%" and action/cause/upstreamBuild=%BUILD_ID%]/number/text()

这将返回正确的SMALLJOB(由THIS BIGJOB启动的那个)的内部版本号。然后在Jenkins的http下载中使用该数字来获取存档的构建文件。

答案 2 :(得分:0)

您可以参考以下功能:

Jenkins Build您可以在这里找到:

  

jenkinsapi.api.block_until_complete(jenkinsurl,jobs,maxwait = 12000,interval = 30,raise_on_timeout = True,username = None,password = None)

     

jenkinsapi.api.get_artifacts(jenkinsurl,jobid = None,build_no = None,username = None,password = None)

     

jenkinsapi.api.get_build(jenkinsurl,jobname,build_no,username = None,password = None)

     

jenkinsapi.api.get_latest_build(jenkinsurl,jobname,username = None,password = None)

     

jenkinsapi.api.get_latest_complete_build(jenkinsurl,jobname,username = None,password = None)

     

jenkinsapi.api.get_latest_test_results(jenkinsurl,jobname,username = None,password = None)

     

jenkinsapi.api.get_nested_view_from_url(网址,用户名=无,密码=无)

     

jenkinsapi.api.get_view_from_url(网址,用户名=无,密码=无)

     

jenkinsapi.api.grab_artifact(jenkinsurl,jobid,artifactid,targetdir,username = None,password = None)

     

jenkinsapi.api.install_artifacts(artifacts,dirstruct,installdir,basestaticurl)

     

jenkinsapi.api.search_artifact_by_regexp(jenkinsurl,jobid,artifactRegExp,username = None,password = None)