28

我在 Jenkins 有一份工作(称之为 BIGJOB);几个构建步骤是使用参数化触发器插件触发其他作业(称为 SMALLJOB)的构建,然后等待它们完成。我需要做的是从 SMALLJOB 上触发的构建中检索工件。

最初,我认为我可以使用Copy Artifact Plugin从触发的 SMALLJOB 的“最后构建”中检索工件。当一次只运行一个 SMALLJOB 时,这确实可以可靠地工作。

但是我有多个 BIGJOB 正在运行,所有这些都触发​​了多个 SMALLJOB,因此使用“最后一次构建”是不可靠的,两个 SMALLJOB 同时完成。

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

4

3 回答 3

34

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

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

  • LAST_TRIGGERED_JOB_NAME="上一个项目开始"
  • TRIGGERED_BUILD_NUMBER_{project name}="上次触发的内部版本号"

从 2.17 版开始

  • TRIGGERED_JOB_NAMES="所有触发项目的逗号分隔列表"
  • TRIGGERED_BUILD_NUMBERS_{project name}="已触发的构建号的逗号分隔列表"
  • TRIGGERED_BUILD_RESULT_{project name}="上次触发的项目构建结果"
  • TRIGGERED_BUILD_RESULT_{project name}RUN{build number}="构建编号的触发构建结果"
  • TRIGGERED_BUILD_RUN_COUNT_{project name}="为项目触发的构建数"

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

于 2013-06-25T14:27:39.877 回答
10

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

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

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 下载中使用该数字来获取存档的构建文件。

于 2011-08-22T20:58:28.540 回答
0

You may refer to this functions :

Jenkins Build where you can find :

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(url, username=None, password=None)

jenkinsapi.api.get_view_from_url(url, username=None, password=None)

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)

于 2016-04-12T06:30:55.930 回答