我在詹金斯有一份工作(称之为BIGJOB);一些构建步骤是使用Parameterized Trigger Plugin触发其他作业(称为SMALLJOB)的构建,然后等待它们完成。我需要做的是从SMALLJOB上的触发构建中检索工件。
最初,我以为我可以使用Copy Artifact Plugin从触发的SMALLJOB的“last build”中检索工件。当一次只运行一个SMALLJOB时,这确实可以正常工作。
但我有多个BIGJOB正在运行,所有都触发多个SMALLJOB,因此使用“last build”是不可靠的,两个SMALLJOB同时完成。
是否有更可靠的方法从特定下游作业中获取工件?如果我可以获得内部版本号,我可以使用curl来获取工件。
答案 0 :(得分:27)
如果将来有任何(其他)问题涉及这个问题:
使用参数化触发器插件作为构建步骤时,如果触发器配置为“阻止直到触发的项目完成其构建”,则以下环境变量可用于进一步的构建步骤:
查看插件网站上的更多信息 - 在问题中链接。
答案 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)