如何访问另一个job生成的artifact的内容
两种方案都可以,你可以根据使用场景选择:
1. Groovy实现方案
如果你是在Jenkins Pipeline中处理该artifact,Groovy是更原生的选择,不需要依赖节点上安装的curl命令,跨环境兼容性更好。
如果是访问同实例下的job-1构件,可以直接调用Jenkins内置API获取内容,示例代码如下:
// 需在受信任的Pipeline中运行,或申请对应脚本执行权限 import jenkins.model.Jenkins // 获取job对象,多层级任务的话填完整路径比如'folder1/job-1' def targetJob = Jenkins.instance.getItemByFullName('job-1') // 可根据需求替换为指定构建号,比如targetJob.getBuildByNumber(25) def targetBuild = targetJob.getLastSuccessfulBuild() // 匹配你要访问的artifact文件名 def artifact = targetBuild.getArtifacts().find { it.fileName == '你的目标文件名' } if (artifact) { // 直接读取文件内容,可直接做后续逻辑处理 def artifactContent = artifact.file.text println artifactContent }
如果是跨实例访问、或者不想调用内置API,Groovy也可以直接发起HTTP请求拉取内容:
def artifactUrl = "http://你的Jenkins服务地址/job/job-1/构建号/artifact/目标文件路径" def request = new URL(artifactUrl).openConnection() // 配置鉴权信息,token可在Jenkins个人设置中生成 request.setRequestProperty("Authorization", "Basic " + "用户名:访问token".bytes.encodeBase64().toString()) def artifactContent = request.inputStream.text println artifactContent
2. curl方案的适用场景
如果你只是临时拉取构件、或者在非Jenkins环境执行简单的拉取逻辑,curl确实是最简便的方案,一行命令即可完成,不需要额外配置脚本权限:
curl -u 用户名:访问token http://你的Jenkins服务地址/job/job-1/构建号/artifact/目标文件路径
选择建议
- 若你需要在Jenkins Pipeline内部对artifact内容做后续逻辑处理,优先选Groovy方案,和现有Pipeline集成度更高
- 若只是单次拉取文件、或者在外部环境执行简单拉取任务,直接用
curl即可
内容的提问来源于stack exchange,提问作者jipot
相关产品推荐
相关产品推荐

