如何配置让每个上传到Jfrog Artifactory的构件都触发Jenkins流水线构建
解决方案
默认Artifactory轮询触发的设计逻辑为:每次轮询仅基于当前最新的构件触发一次构建,不会处理轮询周期内的所有新增构件。要实现每个上传构件对应触发一次构建,推荐以下两种方案:
方案一:改用Artifactory Webhook主动触发(最优)
放弃轮询模式,通过Artifactory的部署事件主动推送通知到Jenkins,每个构件上传都会生成独立的事件通知,天然满足每个构件触发一次构建的需求,配置步骤如下:
- Jenkins端配置
- 安装
Generic Webhook Trigger插件 - 进入多分支流水线配置页,开启Generic Webhook Trigger,设置自定义的唯一触发token,可按需配置从webhook payload中提取构件路径、仓库名、上传时间等参数作为流水线环境变量
- 安装
- Artifactory端配置
- 进入管理员面板的Webhook管理页,新建webhook
- 事件类型选择「Artifact was deployed」,配置路径过滤规则匹配你需要监控的目标仓库和路径
- 回调URL填写:
你的Jenkins服务地址/generic-webhook-trigger/invoke?token=你设置的触发token - 保存后上传测试构件验证触发逻辑即可
方案二:自定义轮询逻辑(仅适合必须使用轮询的场景)
如果受网络限制无法使用webhook,可以自行改造轮询逻辑替换默认的Artifact Trigger:
- 每次轮询时调用
jfrog rt s 目标路径 --sort-by created命令拉取目标路径下的所有构件列表 - 本地维护一份已经触发过构建的构件清单(可以存在Jenkins构建记录或者专用缓存文件中)
- 比对拉取到的构件列表和历史清单,对所有新增的构件逐个调用流水线构建方法触发任务,同时更新历史清单
注意事项
- 无论使用哪种方案,都建议增加构件幂等校验逻辑:可以把已经触发过的构件SHA256值或者完整路径存入缓存,每次触发前先校验,避免网络重试、规则误匹配导致的重复构建
- 多分支流水线场景下,建议在Artifactory路径过滤规则中增加分支名匹配规则,避免不同分支的构件交叉触发错误的流水线任务
内容的提问来源于stack exchange,提问作者Jose
相关产品推荐
相关产品推荐

