资讯动态

Selenium Grid 4.34.0 镜像发布实录:解析 Chrome 97 版本的 Docker 镜像标签体系与生成脚本

发布时间:2026/10/9 11:57:56 来源:尧图企业网站定制
测试后端云原生容器编排可观测性【免费下载链接】docker-seleniumProvides a simple way to run Selenium Grid with Chrome, Firefox, and Edge using Container Platform, making it easier to perform browser automation at scale项目地址https://gitcode.com/GitHub_Trending/do/docker-selenium点击查看免费下载本文以仓库 CHANGELOG/archived/4.34.0/chrome_97.md 记录的发布日志为主线还原 Selenium Grid 4.34.0构建日期 20250727打包 Chrome 97.0.4692.99 与 ChromeDriver 97.0.4692.71 时产生的全部镜像标签并深入tag_and_push_browser_images.sh、NodeChrome 镜像构建脚本与 CHANGELOG 版本矩阵的实现细节帮助读者理解 docker-selenium 的镜像标签命名规则、如何按需选择镜像 tag以及浏览器/驱动版本是如何被固定进镜像的。从一份发布日志说起它记录了什么chrome_97.md 是 docker-selenium 项目中Changelog × 版本矩阵体系下的一份典型发布记录。它不像普通 CHANGELOG 那样罗列功能变更而是忠实记录了发布流水线的一次完整执行过程——以一段tag_and_push_browser_images.sh的输出为骨架精确列出本次为 Chrome 97 打上的所有镜像标签./tag_and_push_browser_images.sh 4.34.0 20250727 selenium false chrome true Tagging images for browser chrome, version 4.34.0, build date 20250727, namespace selenium Selenium Grid version - 4.34.0-20250727 Chrome version - 97.0.4692.99 Short Chrome version - 97.0 ChromeDriver version - 97.0.4692.71 Short ChromeDriver version - 97.0其中蕴含本次发布的关键版本事实维度值Selenium Grid 版本4.34.0-20250727Chrome 版本97.0.4692.99短版本 97.0ChromeDriver 版本97.0.4692.71短版本 97.0涉及的镜像selenium/node-chrome与selenium/standalone-chrome日志随后输出了 12 行 Tagged 记录6 种标签变体 × 2 个镜像node 与 standalone。这 12 个 tag 就是用户可以直接docker pull/docker run使用的完整版本定位符下面逐一拆解。标签的完整语义一条 tag 里编码了四层信息本次发布的 12 个标签可以分为两类完整版本标签含 Patch 号selenium/node-chrome:97.0.4692.99-chromedriver-97.0.4692.71-grid-4.34.0-20250727 selenium/standalone-chrome:97.0.4692.99-chromedriver-97.0.4692.71-grid-4.34.0-20250727 selenium/node-chrome:97.0.4692.99-chromedriver-97.0.4692.71-20250727 selenium/standalone-chrome:97.0.4692.99-chromedriver-97.0.4692.71-20250727 selenium/node-chrome:97.0.4692.99-20250727 selenium/standalone-chrome:97.0.4692.99-20250727短版本标签仅保留 Major.Minor语义与完整版一一对应selenium/node-chrome:97.0-chromedriver-97.0-grid-4.34.0-20250727 selenium/standalone-chrome:97.0-chromedriver-97.0-grid-4.34.0-20250727 selenium/node-chrome:97.0-chromedriver-97.0-20250727 selenium/standalone-chrome:97.0-chromedriver-97.0-20250727 selenium/node-chrome:97.0-20250727 selenium/standalone-chrome:97.0-20250727一个完整标签97.0.4692.99-chromedriver-97.0.4692.71-grid-4.34.0-20250727实际编码了四层信息从左到右依次是浏览器版本97.0.4692.99Chrome 精确 Patch 号驱动版本chromedriver-97.0.4692.71ChromeDriver 精确版本Grid 版本grid-4.34.0-20250727Selenium Grid 核心版本 构建日期构建日期20250727也可单独作为后缀使用。这套浏览器版本 驱动版本 Grid 版本 构建日期的多段式命名正是 docs/docker-hub/node-chrome.md 中描述的 Tagging Convention 的实践形态除了latest之外官方建议始终使用完整 tag 来精确定位某个浏览器与 Grid 版本组合。它的价值在于让测试团队可以只凭 tag 就断言容器内跑的是哪一版浏览器 哪一版驱动 哪一版 Grid从而复现线上环境、固定回归基线。生成 12 个标签的幕后脚本tag_and_push_browser_images.sh日志中每一行 Tagged ... 都对应 tag_and_push_browser_images.sh 的一次执行。该脚本是理解整个标签体系的关键源码。参数与调用约定脚本通过位置参数接收发布元数据第 1~9 行VERSION$1 # Grid 版本如 4.34.0 BUILD_DATE$2 # 构建日期如 20250727 NAMESPACE$3 # 命名空间如 selenium PUSH_IMAGE${4:-false} # 是否 push 到镜像仓库默认 false BROWSER$5 # 浏览器类型chrome / chromium / edge / firefox / chrome-for-testing RELEASE_OLD_VERSION${6:-false} # 是否为旧版本补发标签 PLATFORM${7:-linux/amd64} # 目标平台默认 linux/amd64一个容易被忽略的实现细节第 16 行NAMESPACE${NAME:-selenium}会用环境变量NAME覆盖第三个位置参数因此selenium既是命令行默认值也是无NAME环境变量时的兜底值。版本探测从镜像里读出浏览器与驱动版本chrome 分支的流程第 63~88 行非常直观——用docker run临时启动刚构建的 node-chrome 镜像分别执行google-chrome --version和chromedriver --version再用awk提取出版本号CHROME_VERSION$(docker run --platform ${PLATFORM} --rm ${NAMESPACE}/node-chrome:${TAG_VERSION} google-chrome --version | awk {print $3}) CHROMEDRIVER_VERSION$(docker run --platform ${PLATFORM} --rm ${NAMESPACE}/node-chrome:${TAG_VERSION} chromedriver --version | awk {print $2})日志中Chrome version - 97.0.4692.99与ChromeDriver version - 97.0.4692.71正是这两行探测命令的输出。之后short_version()函数第 53~57 行把97.0.4692.99截断为97.0生成短版本function short_version() { local __long_version$1 local __version_split(${__long_version//./ }) echo ${__version_split[0]}.${__version_split[1]} }短版本标签的存在是有意为之许多测试框架和用户习惯以Major.Minor粒度锁定浏览器例如selenium/node-chrome:97.0既能避开 Patch 号带来的频繁变更又能保证主版本一致。CHROME_TAGS 数组六种变体的组装脚本第 75~87 行组装本次的标签列表与日志逐行对应CHROME_TAGS( ${CHROME_VERSION}-chromedriver-${CHROMEDRIVER_VERSION}-grid-${TAG_VERSION} # 完整版 驱动 Grid 日期 ${CHROME_VERSION}-chromedriver-${CHROMEDRIVER_VERSION}-${BUILD_DATE} # 完整版 驱动 日期 ${CHROME_VERSION}-${BUILD_DATE} # 完整版 日期 ${CHROME_SHORT_VERSION}-chromedriver-${CHROMEDRIVER_SHORT_VERSION}-grid-${TAG_VERSION} ${CHROME_SHORT_VERSION}-chromedriver-${CHROMEDRIVER_SHORT_VERSION}-${BUILD_DATE} ${CHROME_SHORT_VERSION}-${BUILD_DATE} )随后第 101~104 行对每个标签依次调用retag node-chrome与retag standalone-chrome最终产出 6 × 2 12 个标签。为什么这次没有无日期的裸版本标签注意日志中 12 个标签全部带20250727后缀却没有常见的selenium/node-chrome:97.0这类标签。原因是命令末尾第 6 个参数是true./tag_and_push_browser_images.sh 4.34.0 20250727 selenium false chrome true # ^^^^ RELEASE_OLD_VERSIONtrue脚本第 88~99 行明确处理了这一分支只有RELEASE_OLD_VERSIONfalse时才会追加无日期后缀的 4 个浮动标签${CHROME_VERSION}-chromedriver-${CHROMEDRIVER_VERSION}、${CHROME_VERSION}、${CHROME_SHORT_VERSION}-chromedriver-${CHROMEDRIVER_SHORT_VERSION}、${CHROME_SHORT_VERSION}。对旧版本97.0 发布于 2021 年而 Grid 4.34.0 是 2025 年的新版本补发标签时项目刻意不覆盖这些浮动 tag避免97.0指向的镜像内容在未来被意外改写——这正是本次发布只产生 12 个带日期标签的根本原因。retag 的两种模式本地打标与 registry 直传retag()第 31~51 行支持两种工作方式默认模式docker tag本地打标若PUSH_IMAGEtrue再docker pushPROMOTE_TAGStrue 模式使用docker buildx imagetools create直接在镜像仓库间复制 manifest用于发布流水线把测试通过的镜像直接提升为正式发布镜像而不是重新构建避免docker tag只能操作本地单架构镜像、无法保持多架构 manifest 的问题若同时设置了PROMOTE_GHCR_NAMESPACE还会在同一次调用中同步镜像到 GHCR。在 Makefile 中的调用位置Makefile 中定义了tag_and_push_browser_images目标它依次调用同一脚本处理 chrome、chrome-for-testing、chromium、edge、firefox 五种浏览器tag_and_push_browser_images: tag_and_push_chrome_images tag_and_push_chrome-for-testing_images \ tag_and_push_chromium_images tag_and_push_firefox_images tag_and_push_edge_images tag_and_push_chrome_images: ./tag_and_push_browser_images.sh $(VERSION) $(BUILD_DATE) $(NAMESPACE) $(PUSH_IMAGE) chrome $(RELEASE_OLD_VERSION)Chrome 97 的特殊性早于 115 的legacy 驱动路径为什么这篇 changelog 的主题是 97.0 这个老版本这与 docker-selenium 持续为旧浏览器版本提供镜像的策略直接相关动机详见 CHANGELOG/README.md当测试项目因兼容性限制必须钉住某个浏览器版本时能找到与之配套的 Grid 驱动镜像。而 Chrome 97 恰好落在Chrome 115 之前这个分界线上。在 NodeChrome/install-chromedriver.sh 的源码注释中可以确认# Chrome versions before 115 predate Chrome for Testing and are served by the frozen # chromedriver.storage.googleapis.com API, which only ever had linux64. if [ ${ARCH} amd64 ] [ -n ${CHROME_MAJOR_VERSION} ] [ ${CHROME_MAJOR_VERSION} -lt 115 ]; then DRIVER_SOURCElegacy DRIVER_ARCHlinux64也就是说Chrome 115 之前的版本包括本次的 97在 amd64 平台上使用chromedriver.storage.googleapis.com的LATEST_RELEASE_${CHROME_MAJOR}接口解析驱动版本115 及之后的版本优先走 Chrome for TestingCfT渠道storage.googleapis.com/chrome-for-testing-publicCfT 无法覆盖的架构如 153 之前的 arm64再回退到 Debianchromium-driver包由 resolve-chromedriver-source.sh 决策。理解这条legacy / cft / chromium-package三选一逻辑就能明白同一套镜像构建脚本如何既服务 Chrome 97 这样的老版本、又服务最新的 152 等新版本。镜像内部的浏览器与驱动NodeChrome 构建管线标签背后是真实的镜像内容。在 NodeChrome/Dockerfile 中可以看到镜像构建的三个阶段Chrome 安装第 27~33 行默认执行 install-chrome.sh。该脚本通过 Google 官方 apt 源安装支持三种渠道google-chrome-stable/google-chrome-beta/google-chrome-unstable也支持google-chrome-stable121.0.6167.120-1这种精确到 Patch 号的指定版本安装方式CHROME_VERSION构建参数控制见 Dockerfile 第 18 行ChromeDriver 安装第 48~51 行执行 install-chromedriver.sh按上文所述的 legacy/CfT/Debian 三条路径解析并安装驱动最终在/opt/selenium下生成chromedriver-版本并软链到/usr/bin/chromedriver浏览器元数据落盘第 65~72 行把浏览器名称与版本写入/opt/selenium/browsers/chrome/供 Selenium Grid 的节点配置NodeBase/generate_config在注册节点时上报能力。拿到标签之后如何运行与使用拉取与验证# 拉取本次发布对应的 Node 镜像含 Chrome 97 ChromeDriver 97 Grid 4.34.0 docker pull selenium/node-chrome:97.0.4692.99-chromedriver-97.0.4692.71-grid-4.34.0-20250727 # 验证容器内版本与发布日志中的探测命令一致 docker run --rm selenium/node-chrome:97.0.4692.99-20250727 google-chrome --version docker run --rm selenium/node-chrome:97.0.4692.99-20250727 chromedriver --version以 Node 方式接入 Hub参考 docs/docker-hub/node-chrome.md 的完整流程先在共享网络中启动 Hub再启动 Node务必使用--shm-size2g以使用宿主共享内存docker network create grid docker run -d -p 4442-4444:4442-4444 --net grid --name selenium-hub selenium/hub:latest docker run -d --net grid -e SE_EVENT_BUS_HOSTselenium-hub \ --shm-size2g \ selenium/node-chrome:97.0.4692.99-chromedriver-97.0.4692.71-grid-4.34.0-20250727测试代码随后将 WebDriver 指向http://localhost:4444即可。容器内可通过http://localhost:7900/?autoconnect1resizescalepasswordsecret观察浏览器实际执行情况。若想在同一容器内既运行 Grid 又承载浏览器可选择standalone-chrome系列标签参考 Standalone/Dockerfile 中暴露的 4444/4443/4442 端口。版本矩阵这份 changelog 在整个体系中的位置CHANGELOG/README.md 是整个 changelog 体系的索引——一张Selenium Grid 版本 × 浏览器版本矩阵表每个 ✓ 链接到一份类似 chrome_97.md 的详细发布记录。矩阵的动机在 README 中写得很清楚持续提供最新 Grid 核心的同时保留用户对特定浏览器版本的钉住能力跨浏览器测试、因兼容性/缺陷需要锁定版本等用户只需在矩阵中找到所需组合的 tag拉取镜像即可开始测试。矩阵文件由 CHANGELOG/generate-matrix-readme.py 自动生成脚本扫描各版本目录下的chrome_版本.md/firefox_版本.md等文件构建矩阵并把非最新 Grid 版本整体移入archived/目录这正是本文主角所在 CHANGELOG/archived/4.34.0/ 的由来——4.34.0 已是归档版本而最新版本见 CHANGELOG/4.48.0/其中 chrome_152.md 记录了同样的 12 标签发布流程在新版本上的复现。需要留意 README 中的免责声明项目并未对每个 Grid × 浏览器组合做全量功能测试用户在组合使用前应根据自身测试需求评估与决策——这一边界同样适用于本文所述的 Chrome 97 Grid 4.34.0 组合。结语一份看似只有 12 行 Tagged 输出的 changelog背后其实是 docker-selenium 精心设计的镜像版本管理链路多段式 tag 语义编码浏览器/驱动/Grid 三重版本信息tag_and_push_browser_images.sh负责探测与批量打标RELEASE_OLD_VERSION保护浮动标签不被旧版覆盖legacy/CfT/Debian 三条驱动路径让 Chrome 97 到 152 的全部版本都能在同一套构建体系中落地。当你下次在矩阵中找到selenium/node-chrome:97.0-chromedriver-97.0-grid-4.34.0-20250727这样的标签时你看到的不仅是 12 个字符组合而是一整套可复现、可审计、可钉住的浏览器自动化版本基线。本文引用的关键仓库文件CHANGELOG/archived/4.34.0/chrome_97.md —— 本文主体发布日志CHANGELOG/README.md —— 版本矩阵与 changelog 体系说明CHANGELOG/generate-matrix-readme.py —— 矩阵生成与归档脚本tag_and_push_browser_images.sh —— 标签生成与推送脚本Makefile —— 脚本的 Make 目标封装NodeChrome/Dockerfile —— Node Chrome 镜像构建定义NodeChrome/install-chrome.sh —— Chrome 安装脚本NodeChrome/install-chromedriver.sh —— ChromeDriver 安装脚本含 legacy/CfT 分支NodeChrome/resolve-chromedriver-source.sh —— 驱动来源解析docs/docker-hub/node-chrome.md —— Node 镜像运行与 Tagging Convention 文档赞分享测试后端云原生容器编排可观测性【免费下载链接】docker-seleniumProvides a simple way to run Selenium Grid with Chrome, Firefox, and Edge using Container Platform, making it easier to perform browser automation at scale项目地址https://gitcode.com/GitHub_Trending/do/docker-selenium点击查看免费下载相关推荐docker-selenium 4.34.0 Chrome 131 镜像发布记录版本矩阵、标签体系与镜像选择方法docker selenium 4.34.0 Chrome 131 镜像发布记录版本矩阵、标签体系与镜像选择方法 本文基于 docker selenium 仓测试后端云原生容器编排可观测性docker-selenium 固定版本 Chrome 镜像的标签体系解析以 Selenium Grid 4.31.0 与 Chrome 97 为例docker selenium 固定版本 Chrome 镜像的标签体系解析以 Selenium Grid 4.31.0 与 Chrome 97 为例 本文以测试后端云原生容器编排可观测性docker-selenium 4.34.0 发布实录Chrome 136 镜像标签生成机制与版本锁定实战docker selenium 4.34.0 发布实录Chrome 136 镜像标签生成机制与版本锁定实战 本指南以 docker selenium 仓库中测试后端云原生容器编排可观测性上一篇BetterNCM安装器3分钟搞定网易云插件安装的终极指南下一篇《信任的进化》脚注全解析囚徒困境、Tit For Tat 与演化博弈背后的理论设计注脚创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价 →
↑