Jenkins任务B如何调用任务A最新构建的文件?
解决Jenkins任务B调用任务A构建文件的可行方案
方法1:使用Copy Artifacts插件(推荐,无硬编码且稳定)
这是Jenkins跨任务共享构建产物的标准方式,能避免硬编码和并发冲突:
- 先在Jenkins插件管理中安装Copy Artifacts插件
- 在任务B的构建步骤中,添加「Copy artifacts from another project」步骤:
- 项目名称:选择任务A的名称
- 要复制的工件:填写任务A构建产物的路径,比如
**/dist/**(复制dist目录下所有文件),或者**/*复制全部构建文件 - 目标目录:设置任务B工作区内的存放路径,比如
./A-build-output,这样产物会被复制到任务B的工作区中 - 构建选择:如果要自动拉取任务A的最新成功构建,选「Latest successful build」;如果需要指定版本,可以给任务B添加字符串参数
A_BUILD_NUM,然后选择「Specific build」并填入${A_BUILD_NUM},运行任务时手动输入或自动传递构建号即可
- 后续任务B中直接通过
./A-build-output/xxx(对应产物路径)执行文件即可
方法2:直接引用任务A的工作区路径(仅适用于无并发构建场景)
如果任务A不会同时运行多个构建,可以直接在任务B中引用任务A的工作区:
- Jenkins默认工作区路径为
C:\JenkinsData\workspace\任务A(Windows环境),任务B的命令中直接使用该路径即可,比如:C:\JenkinsData\workspace\任务A\bin\run.exe - 也可以用Jenkins环境变量增强通用性,比如
${JENKINS_HOME}/workspace/任务A/bin/run.exe - 注意:如果任务A有并发构建,工作区文件可能被新构建覆盖,导致任务B调用到错误的产物,因此不推荐在高并发场景使用
方法3:动态获取任务A的构建号,替代硬编码
如果不想复制文件,仍想从构建归档目录调用,可以通过脚本动态获取任务A的最新构建号:
- Windows批处理示例:在任务B的「执行Windows批处理命令」步骤中添加:
:: 获取任务A最新成功构建号 for /f "delims=" %%i in ('curl -s "http://localhost:8080/job/任务A/lastSuccessfulBuild/buildNumber"') do set A_BUILD_NO=%%i :: 调用任务A构建的文件 C:\JenkinsData\jobs\任务A\builds\%A_BUILD_NO%\archive\bin\run.exe - Groovy脚本示例:如果Jenkins允许执行系统Groovy脚本,可添加「Execute system Groovy script」步骤:
之后在命令中用def job = Jenkins.instance.getItem("任务A") def lastSuccessBuild = job.getLastSuccessfulBuild() env.A_BUILD_NO = lastSuccessBuild.number.toString()C:\JenkinsData\jobs\任务A\builds\${A_BUILD_NO}\archive\bin\run.exe调用文件
内容的提问来源于stack exchange,提问作者Clinton Ndegwa
相关产品推荐
相关产品推荐

