尧图网络 高端网站定制 · 原创设计
免费咨询热线
400-888-6620
免费获取方案
Renovate Artifactory Datasource 全解析:让 Renovate 从 JFrog Artifactory 自动发现 Conan 包版本
Renovate Artifactory Datasource 全解析让 Renovate 从 JFrog Artifactory 自动发现 Conan 包版本【免费下载链接】renovateHome of the Renovate CLI: Cross-platform Dependency Automation by Mend.io项目地址: https://gitcode.com/GitHub_Trending/re/renovate本文深入剖析 Renovate 内置的artifactorydatasource它面向 JFrog Artifactory 仓库的自定义注册表版本发现场景是 Renovate 官方推荐的 Conan 包注册表方案。读完本文你将掌握该 datasource 的 URL 组成规则、HTML 目录列表解析原理、时间戳提取细节、多注册表合并策略与异常处理行为并能直接在 Renovate 配置中落地私有 Artifactory 仓库的依赖更新。一、背景与定位为什么需要 Artifactory Datasource在 Renovate 的数据源datasource体系中绝大多数 datasource如 npm、PyPI、Maven Central都面向公开的包仓库由 Renovate 官方维护其 API 适配逻辑。但企业环境中的私有制品库——尤其是 JFrog Artifactory——无法被任何官方 API 适配器直接覆盖因为其目录结构、认证方式和返回格式完全由企业自行定义。针对这一场景Renovate 提供了artifactory这个通用型 datasource。其官方定位写在其 readme 中Artifactory is the recommended registry for Conan packages.也就是说它是 Renovate 推荐的Conan 包注册表方案。对于使用 Conan 做 C/C 依赖管理的团队如果制品托管在 JFrog Artifactory 上就可以通过该 datasource 让 Renovate 自动跟踪 Conan 依赖的新版本并提交更新 PR。该 datasource 与 Conan 包管理器模块负责解析conanfile.txt/conanfile.py/conan.lock形成互补manager 负责“从哪里读依赖”datasource 负责“到哪里查版本”。二、核心工作原理URL 如何组成、版本从哪来artifactorydatasource 的设计非常朴素——它不做任何 API 调用而是直接抓取 Artifactory 仓库目录的 HTML 列表页从a链接中提取版本号。其核心逻辑记录在 index.ts 中主要包括两条规则目标 URL 由registryUrl与packageName拼接而成即joinUrlParts(registryUrl, packageName)。假设你的 Artifactory 仓库地址为https://artifactory.company.com/artifactory/conan-local包名为myproject则 Renovate 请求的就是https://artifactory.company.com/artifactory/conan-local/myproject版本来自该目录页中每个a超链接的文本内容1.0.0、1.0.1这样的链接文本即版本号如果链接文本以/结尾表示子目录则先去掉末尾的/再作为版本号。发布时间取自目录列表中版本链接旁边的日期文本格式形如21-Jul-2021 20:08且假定为 UTC 时间这也是 readme 明确说明的约定。该时间戳经asTimestamp归一化为 ISO 8601 格式后写入每个 release 的releaseTimestamp字段。三、源码级解析HTML 目录列表是如何被解析的ArtifactoryDatasource的解析流程全部集中在_getReleases方法index.ts中可以拆解为以下步骤第 1 步强制要求自定义 registryUrl。与其他 datasource 不同Artifactory 没有内置的默认注册表必须由用户显式提供registryUrl。如果缺失datasource 直接返回null并输出警告日志artifactory datasource requires custom registryUrl. Skipping datasource这也在 index.spec.ts 中有对应测试用例。第 2 步发起 GET 请求并解析 HTML。通过内部 HTTP 客户端getText获取页面内容再交给parse解析 DOM同时将script、noscript、style声明为块级文本元素避免其中的内容干扰目录解析。第 3 步遍历所有a节点并过滤父目录链接。目录列表通常包含指向上一级的..或../链接解析时会将其排除只保留真正的版本条目。第 4 步提取版本号。取超链接的innerHTML若以/结尾则去掉末尾斜杠得到版本字符串const version: string node.innerHTML.endsWith(/) ? node.innerHTML.slice(0, -1) : node.innerHTML;第 5 步提取发布时间。版本链接后面紧跟着的兄弟文本节点中包含日期信息源码通过以下方式定位const releaseTimestamp asTimestamp( node.nextSibling?.text?.trimStart()?.split(regEx(/\s{2,}/))?.[0], );即取版本链接下一个兄弟节点的文本去除前导空白后按两个及以上连续空格切分取第一段即日期部分如21-Jul-2021 20:08再交给asTimestamp解析为 ISO 时间戳。第 6 步处理无结果与异常。若解析出的 releases 为空返回null若 HTTP 返回 404则记录artifactory: \Not Found error警告并返回null对应“包不存在”场景若返回 502 等 5xx 错误或限流 429则经由基类 [datasource.ts](https://link.gitcode.com/i/b525b8761bc0b783c2efdd228cc17c7a) 的handleGenericErrors统一转换为ExternalHostError 抛出。四、两种典型目录列表文件模式与文件夹模式Artifactory 目录页因配置不同版本条目可能是文件也可能是子目录。仓库中的两个测试夹具恰好覆盖了这两种形态文件夹模式releases-as-folders.htmla href../..//a a href1.0.0/1.0.0//a 21-Jul-2021 20:08 - a href1.0.1/1.0.1//a 23-Aug-2021 20:03 -文件模式releases-as-files.htmla href1.0.01.0.0/a 21-Jul-2021 20:08 - a href1.0.11.0.1/a 23-Aug-2021 20:03 12 MB两种模式下解析结果完全一致index.spec.ts 中两个用例断言相同例如{ releases: [ { releaseTimestamp: 2021-07-21T20:08:00.000Z, version: 1.0.0 }, { releaseTimestamp: 2021-08-23T20:03:00.000Z, version: 1.0.1 }, { releaseTimestamp: 2021-07-21T20:09:00.000Z, version: 1.0.2 }, { releaseTimestamp: 2021-02-06T09:54:00.000Z, version: 1.0.3 } ] }值得注意夹具页面来自典型的 Artifactory 目录索引含h1Index/h1、Name Last modified Size表头与Artifactory Port 8080页脚这说明该 datasource 正是针对 Artifactory 默认的目录列表 HTML 而设计的。五、Datasource 特性与行为配置ArtifactoryDatasource通过覆写基类 Datasource 的若干属性来声明自身行为index.ts特性取值含义customRegistrySupporttrue支持用户自定义registryUrl而非使用内置默认注册表cachingtrue对查询结果启用缓存避免重复请求registryStrategymerge配置多个 registryUrl 时将各注册表返回的版本合并为一个结果集releaseTimestampSupporttrue支持为每个版本提供发布时间取自版本链接旁的日期文本缓存细节getReleases通过withCache包装缓存命名空间为datasource-artifactory缓存键为${registryUrl}:${packageName}并启用fallback: true缓存未命中时回退到真实请求。多注册表合并当你在配置中给出多个registryUrls时merge策略会把每个注册表的 releases 汇入同一个结果。测试用例 index.spec.ts 演示了主注册表返回 4 个版本、第二个注册表/production子路径返回1.3.0最终合并为 5 个版本的场景。此时每个 release 还会带上来源的registryUrl字段便于追溯。六、如何在 Renovate 配置中使用使用artifactorydatasource 的关键是必须通过registryUrls提供 Artifactory 仓库地址。在renovate.json中可用packageRules精确匹配 Conan 包并指定注册表例如{ packageRules: [ { matchDatasources: [artifactory], matchPackageNames: [myproject], registryUrls: [ https://artifactory.company.com/artifactory/conan-local ] } ] }若需要同时查询多个仓库如本地仓库与 production 仓库registryStrategy: merge会自动合并两处结果{ packageRules: [ { matchDatasources: [artifactory], registryUrls: [ https://artifactory.company.com/artifactory/conan-local, https://artifactory.company.com/artifactory/conan-prod ] } ] }私有仓库认证Artifactory 几乎总是需要认证此时应通过 Renovate 的 hostRules 提供凭据。在renovate.json或自托管配置中为对应主机配置username/password或 token{ hostRules: [ { matchHost: https://artifactory.company.com, username: renovate-bot, password: ****** } ] }需要留意的是该 datasource 的请求目标是registryUrl下形如/packageName的目录列表页因此请确认仓库对该路径的目录浏览Directory Listing功能已开启且认证账号对该路径有读取权限。若使用自托管 Renovate 访问内网 Artifactory还需关注internalHostAccess相关配置参见 self-hosted-configuration.md 中的 host rule 说明。七、边界情况与已知行为结合源码与测试该 datasource 有以下值得注意的边界行为无 registryUrl直接跳过并输出 warning返回null不会尝试任何默认源。空页面200 OK 但无版本链接返回null不报错测试用例“returns null for empty 200 OK”。404视为“包不存在”记录 warning 后返回null。5xx / 429转换为ExternalHostError抛出由上层统一处理便于触发重试或告警。其他网络错误如 DNS 失败、连接重置捕获后返回null不中断整体扫描。时间戳约定目录列表中的日期被假定为 UTC。若 Artifactory 实例配置为其他时区实际时间戳会与真实发布时间存在时区偏移规划依赖更新策略如minimumReleaseAge时需要留意这一前提。版本解析不做语义化校验链接文本直接作为版本字符串版本排序与比较交由上层配置的 versioning 规则如 Conan 通常配合 semver 类 versioning完成。八、总结artifactorydatasource 是 Renovate 面向 JFrog Artifactory 私有制品库的轻量级版本发现方案它以“registryUrlpackageName拼 URL、解析目录列表 HTML 提取版本与 UTC 时间戳”为核心机制配合强制自定义注册表、结果缓存、多注册表合并和完整的异常处理让 Conan 包的私有化依赖更新成为可能。理解其 HTML 解析假设与时间戳约定是在企业环境中正确落地 Renovate Artifactory 自动升级链路的前提。如需进一步深入可直接阅读源码 index.ts、测试用例 index.spec.ts 以及两个 HTML 夹具 releases-as-folders.html 与 releases-as-files.html。【免费下载链接】renovateHome of the Renovate CLI: Cross-platform Dependency Automation by Mend.io项目地址: https://gitcode.com/GitHub_Trending/re/renovate创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
RELATED

相关推荐

如何配置环境并运行 PyG 的 CPU 训练基准测试 training_benchmark.py?

如何配置环境并运行 PyG 的 CPU 训练基准测试 training_benchmark.py?

如何配置环境并运行 PyG 的 CPU 训练基准测试 training_benchmark.py? 【免费下载链接】pytorch_geometric Graph Neural Network Library for PyTorch 项目地址: https://gitcode.com/GitHub_Trending/py/pytorch_geometric 这篇文章对应一个明确的性能测量…

📅 2026/9/13 19:50:08
Arduino-ESP32 项目全解析:ESP32 系列 SoC 的 Arduino 核心架构、芯片支持矩阵与开发调试实践

Arduino-ESP32 项目全解析:ESP32 系列 SoC 的 Arduino 核心架构、芯片支持矩阵与开发调试实践

Arduino-ESP32 项目全解析:ESP32 系列 SoC 的 Arduino 核心架构、芯片支持矩阵与开发调试实践 【免费下载链接】arduino-esp32 Arduino core for the ESP32 family of SoCs 项目地址: https://gitcode.com/GitHub_Trending/ar/arduino-esp32 本文以官方仓库 …

📅 2026/9/13 19:50:08
Pydantic Evals 第三方评测框架集成:把 Ragas 与 DeepEval 指标封装为自定义 Evaluator

Pydantic Evals 第三方评测框架集成:把 Ragas 与 DeepEval 指标封装为自定义 Evaluator

Pydantic Evals 第三方评测框架集成:把 Ragas 与 DeepEval 指标封装为自定义 Evaluator 【免费下载链接】pydantic-ai How Python does AI. Agents, realtime voice, image generation, embeddings. Every model, every interface, typed end to end. 项目地址: h…

📅 2026/9/13 19:45:07
MORE NEWS

更多资讯

📰

Hindsight 记忆接入选型指南:MCP 与 SDK 两种集成路径的源码级对比

Hindsight 记忆接入选型指南:MCP 与 SDK 两种集成路径的源码级对比 【免费下载链接】hindsight Hindsight: Agent Memory That Learns 项目地址: https://gitcode.com/GitHub_Trending/hindsight2/hindsight 当你为 AI 应用选择记忆接入方式时,真…

📰

Roo Code 入门指南:在编辑器里拥有你的 AI 开发团队(模式系统与 MCP 集成详解)

Roo Code 入门指南:在编辑器里拥有你的 AI 开发团队(模式系统与 MCP 集成详解) 【免费下载链接】Roo-Code Roo Code gives you a whole dev team of AI agents in your code editor. 项目地址: https://gitcode.com/GitHub_Trending/ro/Roo…

📰

self-llm 如何用 vLLM 部署 Kimi-K2.5 并调用 OpenAI 兼容接口

self-llm 如何用 vLLM 部署 Kimi-K2.5 并调用 OpenAI 兼容接口 【免费下载链接】self-llm 《开源大模型食用指南》针对中国宝宝量身打造的基于Linux环境快速微调(全参数/Lora)、部署国内外开源大模型(LLM)/多模态大模型&#xff0…

📰

AeroSpace 如何用 aerospace 命令实现触控板手势切换工作区?

AeroSpace 如何用 aerospace 命令实现触控板手势切换工作区? 【免费下载链接】AeroSpace AeroSpace is an i3-like tiling window manager for macOS 项目地址: https://gitcode.com/GitHub_Trending/ae/AeroSpace 在 macOS 上使用 AeroSpace 这类平铺窗口管…

📰

国产电源芯片实测选型指南:纹波抑制比与轻载效率深度评测

1. 这份清单不是“国产电源芯片排行榜”,而是一张带坐标的实测地图我干电源设计快十二年,从08年用TI的TPS5430做第一块DC-DC板子开始,到后来在工业客户现场蹲点三个月调通一颗国产LDO的负载瞬态响应,再到去年带队把整套BMS电源管理…

📰

SClick工具:智能防休眠提升工作效率的解决方案

1. 项目概述:SClick如何解决系统休眠带来的效率痛点每次离开工位超过10分钟,电脑就自动进入休眠状态,回来时等待系统唤醒、重新加载所有工作文档和开发环境,至少浪费3-5分钟——这个场景对现代职场人来说再熟悉不过。根据我的实测…

TODAY

今日更新

THIS WEEK

本周精选

THIS MONTH

本月热门

读完文章,想聊聊您的网站?

告诉我们您的行业与需求,资深顾问一对一梳理方案与报价,全程免费。

📞 💬