- 测试
- 后端
- 云原生
- 容器编排
- 可观测性
【免费下载链接】docker-selenium
Provides a simple way to run Selenium Grid with Chrome, Firefox, and Edge using Container Platform, making it easier to perform browser automation at scale
导读:本文以 docker-selenium 仓库中 Edge 116 的发布记录(CHANGELOG/archived/4.32.0/edge_116.md)为核心,逐层拆解浏览器镜像从版本探测、标签生成到推送的完整发布流程。读完你将掌握
tag_and_push_browser_images.sh的全部参数语义、6 大标签类别的命名规则、node-edge与standalone-edge镜像的构建链路,以及如何根据测试需求精确挑选镜像标签。
一、发布记录原文:Edge 116 的一次标准发布
4.32.0 版本中,Edge 116 镜像的发布过程记录如下(原文完整保留):
./tag_and_push_browser_images.sh 4.32.0 20250515 selenium false edge true Tagging images for browser edge, version 4.32.0, build date 20250515, namespace selenium Selenium Grid version -> 4.32.0-20250515 Edge version -> 116.0.1938.81 Short Edge version -> 116.0 EdgeDriver version -> 116.0.1938.81 Short EdgeDriver version -> 116.0 Tagged selenium/node-edge:116.0.1938.81-edgedriver-116.0.1938.81-grid-4.32.0-20250515 Tagged selenium/standalone-edge:116.0.1938.81-edgedriver-116.0.1938.81-grid-4.32.0-20250515 Tagged selenium/node-edge:116.0.1938.81-edgedriver-116.0.1938.81-20250515 Tagged selenium/standalone-edge:116.0.1938.81-edgedriver-116.0.1938.81-20250515 Tagged selenium/node-edge:116.0.1938.81-20250515 Tagged selenium/standalone-edge:116.0.1938.81-20250515 Tagged selenium/node-edge:116.0-edgedriver-116.0-grid-4.32.0-20250515 Tagged selenium/standalone-edge:116.0-edgedriver-116.0-grid-4.32.0-20250515 Tagged selenium/node-edge:116.0-edgedriver-116.0-20250515 Tagged selenium/standalone-edge:116.0-edgedriver-116.0-20250515 Tagged selenium/node-edge:116.0-20250515 Tagged selenium/standalone-edge:116.0-20250515这份记录看似只是一段终端输出,实际浓缩了 docker-selenium 浏览器镜像发布的完整自动化流程。其执行入口是仓库根目录下的 tag_and_push_browser_images.sh,而每次发布生成的 changelog 文件(形如edge_116.md)会通过 CHANGELOG/generate-matrix-readme.py 被汇总进 CHANGELOG/README.md 的浏览器版本矩阵,作为用户挑选镜像标签的依据。
二、命令逐参数解析:7 个位置参数的含义
脚本的调用签名为(见 tag_and_push_browser_images.sh):
./tag_and_push_browser_images.sh VERSION BUILD_DATE NAMESPACE PUSH_IMAGE BROWSER RELEASE_OLD_VERSION PLATFORM| 位置参数 | 本次调用值 | 作用 |
|---|---|---|
$1 VERSION | 4.32.0 | Selenium Grid 版本号,与BUILD_DATE拼成完整镜像版本4.32.0-20250515 |
$2 BUILD_DATE | 20250515 | 构建日期(YYYYMMDD),是镜像标签中"日期戳"的来源 |
$3 NAMESPACE | selenium | 镜像命名空间,决定最终 tag 前缀(如selenium/node-edge) |
$4 PUSH_IMAGE | false | 是否在打标签后执行docker push;false表示本次仅打标签 |
$5 BROWSER | edge | 目标浏览器,支持chrome、chromium、edge、firefox、chrome-for-testing |
$6 RELEASE_OLD_VERSION | true | 是否为旧版本补打精简标签(决定是否追加短标签组,详见第四节) |
$7 PLATFORM | 默认 | 目标平台,默认linux/amd64,仅 chrome 分支使用 |
脚本内部还会读取两个环境变量:PROMOTE_TAGS(默认false)与PROMOTE_GHCR_NAMESPACE(默认空),用于"发布时推广已测试镜像"的场景(详见第五节)。
三、Edge 与 EdgeDriver 版本探测:从容器内"问"出来的版本号
脚本并不假设镜像内的版本,而是直接运行已构建好的node-edge:4.32.0-20250515镜像来探测真实版本(tag_and_push_browser_images.sh):
EDGE_VERSION=$(docker run --rm ${NAMESPACE}/node-edge:${TAG_VERSION} microsoft-edge --version | awk '{print $3}') EDGE_SHORT_VERSION="$(short_version ${EDGE_VERSION})" EDGEDRIVER_VERSION=$(docker run --rm ${NAMESPACE}/node-edge:${TAG_VERSION} msedgedriver --version | awk '{print $4}') EDGEDRIVER_SHORT_VERSION="$(short_version ${EDGEDRIVER_VERSION})"microsoft-edge --version输出的形如Microsoft Edge 116.0.1938.81,awk '{print $3}'取出第 3 列即116.0.1938.81;msedgedriver --version输出格式不同,版本号位于第 4 列,因此用awk '{print $4}';short_version()函数(tag_and_push_browser_images.sh)按.分割版本号并只保留前两段,得到116.0,作为"短版本"标签的来源。
本次记录中 Edge 与 EdgeDriver 版本完全一致(均为116.0.1938.81),这是因为 Edge 116 的 msedgedriver 与浏览器保持同步发布。探测结果会以Selenium Grid version ->、Edge version ->、Short Edge version ->等行打印出来,构成 changelog 记录的上半部分。
四、标签生成规则:6 + 4 组标签、node 与 standalone 双镜像
4.1 六组基础标签(始终生成)
脚本在 tag_and_push_browser_images.sh 中先构造 6 组标签,覆盖"完整版本 + 短版本 × 三种命名维度"的组合:
| 维度 | 完整版本(如116.0.1938.81) | 短版本(如116.0) |
|---|---|---|
| 浏览器 + 驱动 + Grid 完整标签 | {edge}-edgedriver-{driver}-grid-{gridVersion}-{buildDate} | {edgeShort}-edgedriver-{driverShort}-grid-{gridVersion}-{buildDate} |
| 浏览器 + 驱动 + 构建日期 | {edge}-edgedriver-{driver}-{buildDate} | {edgeShort}-edgedriver-{driverShort}-{buildDate} |
| 浏览器 + 构建日期 | {edge}-{buildDate} | {edgeShort}-{buildDate} |
4.2 四组精简标签(旧版本补发时追加)
当RELEASE_OLD_VERSION=false时(即发布"当前"版本,本次记录中第 6 个参数为true表示 Edge 116 属于旧版本补发),脚本会追加 4 组不带日期、更易记忆的标签(tag_and_push_browser_images.sh):
| 标签 | 示例 |
|---|---|
| 浏览器完整版 + 驱动完整版 | 116.0.1938.81-edgedriver-116.0.1938.81 |
| 浏览器完整版 | 116.0.1938.81 |
| 浏览器短版 + 驱动短版 | 116.0-edgedriver-116.0 |
| 浏览器短版 | 116.0 |
由于本次是旧版本(RELEASE_OLD_VERSION=true),故 changelog 中只出现 6 组标签;对比 CHANGELOG/archived/4.32.0/chrome_134.md(参数为chrome ... false)可以看到完整 10 组标签的输出形态。
4.3 双镜像打标签
每组标签都会同时打在node-edge与standalone-edge两个镜像上(tag_and_push_browser_images.sh):
for edge_tag in "${EDGE_TAGS[@]}"; do retag node-edge "${edge_tag}" retag standalone-edge "${edge_tag}" done这正是 changelog 中"Tagged"行成对出现(node-edge与standalone-edge各 10 行、共 20 行)的原因。
五、retag 底层实现:docker tag 与 buildx imagetools 双路径
retag()函数(tag_and_push_browser_images.sh)负责把"带完整版本号的基础标签"复制为各精简标签:
- 默认路径(PROMOTE_TAGS=false):执行
docker tag "${NAMESPACE}/${__image}:${TAG_VERSION}" "${NAMESPACE}/${__image}:${__tag}",本地镜像仓库内新增一个标签别名;若PUSH_IMAGE=true则随后执行docker push。 - 推广路径(PROMOTE_TAGS=true):不依赖本地镜像,改用
docker buildx imagetools create --tag ...在 registry 之间直接操作 manifest index。脚本注释明确解释了原因:发布时推广的是"已经过测试的 manifest",本地docker pull只能取回当前 runner 架构的单架构镜像,若用docker tag会导致浏览器标签变成单架构,而imagetools作用于 index 层面、registry 到 registry 复制,可保住多架构属性;同时PROMOTE_GHCR_NAMESPACE允许在同一次调用中镜像到 GHCR。
六、镜像构建链路:Edge 116 从何而来
打标签之前,镜像本身由 Makefile 的edge目标构建,其依赖链为node_base -> video -> base,最终在 NodeEdge/Dockerfile 中完成 Edge 的装配:
edge: node_base edge_only edge_only: cd ./NodeEdge && docker buildx build --platform linux/amd64 ... -t $(NAME)/node-edge:$(TAG_VERSION) .注意edge_only目标对平台有硬性限制:Microsoft Edge 仅支持 linux/amd64(Makefile),这与 Chrome for Testing 相同,因此在 arm64 runner 上会跳过 Edge 构建。
NodeEdge/Dockerfile 的关键步骤:
- Edge 浏览器安装:默认
EDGE_VERSION="microsoft-edge-stable"从 Microsoft 官方源安装;由于 Microsoft 会清理旧版本包,脚本支持通过EDGE_ARCHIVE_SITE(NDViet/microsoft-edge-stable 归档仓库)下载指定版本的.deb并--allow-downgrades安装(Dockerfile 第 17-34 行),这是"锁定 116 这种旧版本"能够成立的前提。 - EdgeDriver 安装:优先通过
https://msedgedriver.microsoft.com/LATEST_RELEASE_${EDGE_MAJOR}_LINUX探测驱动版本;若该指针已被清理,则回退到浏览器自身版本号,并从归档站点下载edgedriver_linux64.zip,解压后以msedgedriver-${VERSION}命名并软链到/usr/bin/msedgedriver(Dockerfile 第 52-68 行)。 - 浏览器元信息落盘:将
MicrosoftEdge、版本号与ms:edgeOptions.binary写入/opt/selenium/browsers/edge/,供 Grid 自动发现与启动浏览器(Dockerfile 第 82-85 行)。 - 清理守护进程:NodeEdge/edge-cleanup.sh 由 supervisord 托管,按
SE_BROWSER_LEFTOVERS_PROCESSES_SECS、SE_BROWSER_LEFTOVERS_TEMPFILES_DAYS、SE_BROWSER_LEFTOVERS_INTERVAL_SECS三个环境变量周期清理残留的 msedge 进程与/tmp/.com.microsoft.Edge.*临时目录。
standalone-edge则基于node-edge构建(Makefile 的standalone_edge_only,--build-arg BASE=node-edge),把 Node 与 Grid Server 打包进同一个容器,免去单独部署 Hub 的环节。
七、发布记录的价值:如何用这些标签
这份 changelog 与 docs/docker-hub/node-edge.md 共同构成用户的选型依据。node-edge 的标准运行方式(需与 Hub 同处一个 Docker 网络):
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_HOST=selenium-hub --shm-size="2g" selenium/node-edge:latest官方文档建议对浏览器镜像使用--shm-size=2g以共享主机内存。选标签时遵循 docs/docker-hub/node-edge.md 归纳的结构:
selenium/node-edge-<Major>.<Minor>.<Patch>-<YYYYMMDD> selenium/node-edge-<browserVersion>-<browserDriver>-<browserDriverVersion>-<Major>.<Minor>.<Patch>-<YYYYMMDD>推荐实践:
- 需要同时锁定 Grid 与浏览器版本时,使用全量标签,如
selenium/node-edge:116.0.1938.81-edgedriver-116.0.1938.81-grid-4.32.0-20250515; - 只关注浏览器版本时,使用
selenium/node-edge:116.0; - 只想固定在某次构建产物时,使用带日期的
selenium/node-edge:116.0.1938.81-20250515。
八、一致性验证:Edge 116 在不同 Grid 版本中的发布形态
Edge 116 同时也存在于 4.31.0 版本中(CHANGELOG/archived/4.31.0/edge_116.md),其浏览器与驱动版本同为116.0.1938.81,仅 Grid 版本与构建日期不同。这说明同一浏览器版本可以在多个 Grid 版本中重复发布,而镜像标签通过-grid-{版本}-{日期}段区分彼此——这正是 CHANGELOG/generate-matrix-readme.py 所描述的矩阵设计动机:让用户"用最新的 Selenium Grid 核心版本,同时仍能锁定某个浏览器版本"。矩阵 README 以✓链接指向各edge_116.md这类 changelog 明细,帮助用户快速定位特定 Grid 版本所支持的 Edge 版本组合。
提示:仓库不保证所有 Grid × 浏览器组合都经过完整测试(见矩阵 README 的免责声明),具体选型应由用户结合自身测试需求评估。
- 测试
- 后端
- 云原生
- 容器编排
- 可观测性
【免费下载链接】docker-selenium
Provides a simple way to run Selenium Grid with Chrome, Firefox, and Edge using Container Platform, making it easier to perform browser automation at scale
相关推荐
docker-selenium Edge 116 镜像标签解析:从 tag_and_push_browser_images.sh 到 node-edge 容器的发布链路
docker selenium Edge 116 镜像标签解析:从 tag_and_push_browser_images.sh 到 node edge 容器的
测试后端云原生容器编排可观测性docker-selenium Firefox 116 镜像标签全解析:从 tag_and_push_browser_images.sh 看 Node/Standalone 镜像版本化发布机制
docker selenium Firefox 116 镜像标签全解析:从 tag_and_push_browser_images.sh 看 Node/Stan
测试后端云原生容器编排可观测性docker-selenium 发布 Edge 124 镜像标签全解析:从 tag_and_push_browser_images.sh 到 Node/Standalone 镜像
docker selenium 发布 Edge 124 镜像标签全解析:从 tag_and_push_browser_images.sh 到 Node/Stan
测试后端云原生容器编排可观测性
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考