ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

docker-selenium 中 Edge 镜像的版本打标与发布全解析:以 Edge 115 与 Selenium Grid 4.32.0 为例

docker-selenium 中 Edge 镜像的版本打标与发布全解析:以 Edge 115 与 Selenium Grid 4.32.0 为例 测试后端云原生容器编排可观测性【免费下载链接】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.32.0/edge_115.md 记录的真实发布日志为切入点深入剖析 docker-selenium 项目中 Edge 浏览器镜像node-edge/standalone-edge从构建到版本标记tagging再到推送的完整链路。读完后你将掌握Edge 镜像 12 组 tag 的命名规则与生成逻辑、tag_and_push_browser_images.sh脚本的参数与内部实现、NodeEdge/Dockerfile中 Edge 与 msedgedriver 的安装机制以及如何在 Makefile 中一键完成 Edge 镜像的构建、打标与发布。一、从一段发布日志理解 Edge 镜像的版本标记体系CHANGELOG/archived/4.32.0/edge_115.md记录的是 Selenium Grid 4.32.0构建日期 2025-05-15发布时为 Edge 115 浏览器镜像执行打标与推送的完整过程。原文如下./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 - 115.0.1901.203 Short Edge version - 115.0 EdgeDriver version - 115.0.1901.203 Short EdgeDriver version - 115.0 Tagged selenium/node-edge:115.0.1901.203-edgedriver-115.0.1901.203-grid-4.32.0-20250515 Tagged selenium/standalone-edge:115.0.1901.203-edgedriver-115.0.1901.203-grid-4.32.0-20250515 Tagged selenium/node-edge:115.0.1901.203-edgedriver-115.0.1901.203-20250515 Tagged selenium/standalone-edge:115.0.1901.203-edgedriver-115.0.1901.203-20250515 Tagged selenium/node-edge:115.0.1901.203-20250515 Tagged selenium/standalone-edge:115.0.1901.203-20250515 Tagged selenium/node-edge:115.0-edgedriver-115.0-grid-4.32.0-20250515 Tagged selenium/standalone-edge:115.0-edgedriver-115.0-grid-4.32.0-20250515 Tagged selenium/node-edge:115.0-edgedriver-115.0-20250515 Tagged selenium/standalone-edge:115.0-edgedriver-115.0-20250515 Tagged selenium/node-edge:115.0-20250515 Tagged selenium/standalone-edge:115.0-20250515这段日志透露了三个关键信息命令形态一次调用同时作用于node-edge与standalone-edge两类镜像共生成 12 组 tag每个镜像 6 组。版本来源Edge 浏览器与 EdgeDriver 的版本号并非手动指定而是通过容器内命令动态探测得到见下文脚本实现。tag 结构分层日志中的 6 组 tag 恰好构成由精确到粗略的四个层级覆盖不同粒度完整版本 vs 短版本× 不同组合浏览器驱动Grid、浏览器驱动日期、浏览器日期。对比同目录下的新版本日志如 CHANGELOG/4.48.0/edge_152.md可以看出这一 tag 体系在整个项目生命周期内保持稳定是 docker-selenium 面向用户提供精确版本镜像与宽松版本镜像的核心机制。二、打标脚本tag_and_push_browser_images.sh 的完整原理日志第一行的命令对应仓库根目录下的 tag_and_push_browser_images.sh该脚本同时支持 Chrome、Chromium、Chrome for Testing、Firefox、Edge 五种浏览器通过case分支区分本文聚焦 Edge 分支L151-L192。2.1 参数约定参数位置含义本日志示例VERSION$1Selenium Grid 版本号4.32.0BUILD_DATE$2构建日期YYYYMMDD20250515NAMESPACE$3镜像命名空间seleniumPUSH_IMAGE$4是否执行docker push默认falsefalseBROWSER$5浏览器类型标识edgeRELEASE_OLD_VERSION$6是否同时标记旧版本默认falsetruePLATFORM$7平台默认linux/amd64未传其中VERSION与BUILD_DATE拼接为完整的镜像 tag 前缀TAG_VERSION4.32.0-20250515L15这就是日志中 Selenium Grid version - 4.32.0-20250515 的来源。2.2 版本探测不写死从容器里读脚本不会去查数据库或手工填写浏览器版本而是直接运行已构建好的镜像从容器内部读取版本信息L153-L161EDGE_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 115.0.1901.203awk {print $3}取到115.0.1901.203msedgedriver --version的输出形如Microsoft Edge WebDriver 115.0.1901.203awk {print $4}取到115.0.1901.203短版本由short_version()函数L53-L57截取主版本号的前两段function short_version() { local __long_version$1 local __version_split(${__long_version//./ }) echo ${__version_split[0]}.${__version_split[1]} }即115.0.1901.203→115.0。短版本 tag 的价值在于Edge 版本频繁更新115.0这类 tag 可长期指向 115 大版本内最新发布的镜像方便用户固定大版本而不必逐次改 tag。2.3 tag 列表的生成规则EDGE_TAGS数组L163-L187依次生成 6 组基础 tag命名模式可归纳为层级tag 模式示例以本日志为准完整版驱动Gridedge-edgedriver-driver-grid-grid115.0.1901.203-edgedriver-115.0.1901.203-grid-4.32.0-20250515完整版驱动日期edge-edgedriver-driver-date115.0.1901.203-edgedriver-115.0.1901.203-20250515完整版日期edge-date115.0.1901.203-20250515短版驱动Gridedge_short-edgedriver-driver_short-grid-grid115.0-edgedriver-115.0-grid-4.32.0-20250515短版驱动日期edge_short-edgedriver-driver_short-date115.0-edgedriver-115.0-20250515短版日期edge_short-date115.0-20250515当RELEASE_OLD_VERSIONfalse即不发布旧版本、正常发布新版本时还会追加 4 组不带日期的浮动tagedge-edgedriver-driver # 如 115.0.1901.203-edgedriver-115.0.1901.203 edge # 如 115.0.1901.203 edge_short-edgedriver-driver_short # 如 115.0-edgedriver-115.0 edge_short # 如 115.0这些浮动 tag 会在后续发布中不断指向最新构建是用户docker pull selenium/node-edge:115.0这类写法的支撑。而本日志中RELEASE_OLD_VERSIONtrue表示这是一次为旧版本补打 tag的操作因此只生成了带日期的 6 组。2.4 retag 与推送对数组中的每个 tag脚本调用retag函数L31-L51分别处理node-edge与standalone-edgefor edge_tag in ${EDGE_TAGS[]}; do retag node-edge ${edge_tag} retag standalone-edge ${edge_tag} doneretag默认执行docker tag 源镜像:TAG_VERSION 目标镜像:新tag若PUSH_IMAGEtrue则随后docker push。此外脚本还支持一种PROMOTE_TAGStrue的特殊模式L36-L44当镜像已在测试中验证过、发布时不做重建而是直接从 registry 打 tag 时使用docker buildx imagetools create在 registry 之间复制 manifest从而保留多架构的 manifest list——这正是发布脚本的演进方向参见 Makefile 中promote_release_images等目标。三、Edge 镜像的构建源头NodeEdge/Dockerfile打标脚本探测的 Edge 与 EdgeDriver 版本来源于 NodeEdge/Dockerfile 的构建结果。理解构建过程有助于判断 tag 的版本值为什么可信。3.1 浏览器安装默认 stable支持固定版本与归档兜底ARG EDGE_VERSIONmicrosoft-edge-stable ARG EDGE_ARCHIVE_SITEhttps://github.com/NDViet/microsoft-edge-stable/releases/download RUN wget -q -O - https://packages.microsoft.com/keys/microsoft.asc | gpg --dearmor | tee /etc/apt/trusted.gpg.d/microsoft.gpg /dev/null \ echo deb https://packages.microsoft.com/repos/edge stable main /etc/apt/sources.list.d/microsoft-edge.list \ apt-get update -qqy \ if echo ${EDGE_VERSION} | grep -qE microsoft-edge-stable[_|][0-9]*; \ then \ EDGE_VERSION_NUMBER$(echo $EDGE_VERSION | cut -d -f2) \ EDGE_VERSION$(echo $EDGE_VERSION | tr _) \ wget -qO microsoft-edge.deb ${EDGE_ARCHIVE_SITE}/${EDGE_VERSION_NUMBER}/${EDGE_VERSION}_$(dpkg --print-architecture).deb \ apt-get -qqy --no-install-recommends install --allow-downgrades ./microsoft-edge.deb \ rm -rf microsoft-edge.deb ; \ else \ apt-get -qqy --no-install-recommends install ${EDGE_VERSION} ; \ fi \ rm -rf /var/lib/apt/lists/* /var/cache/apt/*要点默认安装microsoft-edge-stable来自 Microsoft 官方 apt 源通过--build-arg EDGE_VERSIONmicrosoft-edge-stable115.0.1901.203可固定精确版本由于 Microsoft 会从packages.microsoft.com清理旧版本固定版本的安装会改从EDGE_ARCHIVE_SITE归档下载对应的.deb包并--allow-downgrades安装确保 115 这类旧版本也能复现构建这与 Google Chrome 侧使用 NDViet/google-chrome-stable 归档的思路一致。3.2 msedgedriver 安装优先 LATEST_RELEASE归档兜底ARG EDGE_DRIVER_VERSION RUN DRIVER_ARCH$(if [ $(dpkg --print-architecture) amd64 ]; then echo linux64; else echo linux-aarch64; fi) \ if [ -z $EDGE_DRIVER_VERSION ]; \ then EDGE_MAJOR_VERSION$(microsoft-edge --version | sed -E s/.* ([0-9])(\.[0-9]){3}.*/\1/) \ EDGE_DRIVER_VERSION$(wget --no-verbose -O - https://msedgedriver.microsoft.com/LATEST_RELEASE_${EDGE_MAJOR_VERSION}_LINUX | tr -cd \11\12\15\40-\176 | tr -d \r || true) ; \ if [ -z $EDGE_DRIVER_VERSION ]; \ then EDGE_DRIVER_VERSION$(microsoft-edge --version | sed -E s/.* ([0-9](\.[0-9]){3}).*/\1/) ; \ fi ; \ fi \ echo Using msedgedriver version: $EDGE_DRIVER_VERSION \ ( wget --no-verbose -O /tmp/msedgedriver_${DRIVER_ARCH}.zip https://msedgedriver.microsoft.com/$EDGE_DRIVER_VERSION/edgedriver_${DRIVER_ARCH}.zip \ || wget --no-verbose -O /tmp/msedgedriver_${DRIVER_ARCH}.zip ${EDGE_ARCHIVE_SITE}/${EDGE_DRIVER_VERSION}-1/edgedriver_${DRIVER_ARCH}.zip ) \ rm -rf /opt/selenium/msedgedriver \ unzip /tmp/msedgedriver_${DRIVER_ARCH}.zip -d /opt/selenium \ mv /opt/selenium/msedgedriver /opt/selenium/msedgedriver-$EDGE_DRIVER_VERSION \ chmod 755 /opt/selenium/msedgedriver-$EDGE_DRIVER_VERSION \ ln -fs /opt/selenium/msedgedriver-$EDGE_DRIVER_VERSION /usr/bin/msedgedriver逻辑可概括为三级降级显式EDGE_DRIVER_VERSION→ 按 Edge 主版本查询官方LATEST_RELEASE_major_LINUX指针 → 取浏览器版本号本身并以msedgedriver.microsoft.com→ 归档站点的顺序下载对应 zip。驱动以版本号命名存放并通过符号链接挂到/usr/bin/msedgedriver这保证了打标脚本中msedgedriver --version的探测结果与镜像内实际版本严格一致。3.3 浏览器信息注册与运行时默认值Dockerfile 末尾L82-L88还会向/opt/selenium/browsers/edge/写入三个文件RUN mkdir -p /opt/selenium/browsers/edge \ echo MicrosoftEdge /opt/selenium/browsers/edge/name \ microsoft-edge --version | awk {print $3} /opt/selenium/browsers/edge/version \ echo {ms:edgeOptions: {binary: ${SE_BROWSER_BINARY_LOCATION:-/usr/bin/microsoft-edge}}} /opt/selenium/browsers/edge/binary_location同时设置了两个环境变量L87-L88ENV SE_OTEL_SERVICE_NAMEselenium-node-edge \ SE_NODE_ENABLE_MANAGED_DOWNLOADStrue前者让 OpenTelemetry 追踪中的服务名显示为selenium-node-edge后者开启 Selenium Grid 的 managed downloads 功能对应 NodeBase/start-selenium-node.sh 中--enable-managed-downloads参数让节点统一管理下载文件。binary_location中的SE_BROWSER_BINARY_LOCATION环境变量允许用户在运行时覆盖 Edge 可执行文件路径。四、Makefile 中的 Edge 构建与发布链路4.1 构建目标edge_only 与平台限制Makefile 中 Edge 相关目标的骨架为edge: node_base edge_only而edge_onlyL571-L580有一个重要约束edge_only: set -e; case $(PLATFORMS) in \ *linux/amd64*) \ echo Microsoft Edge is only supported on linux/amd64 \ cd ./NodeEdge docker buildx build --platform linux/amd64 $(BUILD_ARGS) $(FROM_IMAGE_ARGS) -t $(NAME)/node-edge:$(TAG_VERSION) . \ ;; \ *) \ echo Microsoft Edge doesnt support platform $(PLATFORMS) ; \ ;; \ esac即Edge 镜像仅支持linux/amd64在 arm64 构建机上该目标会被跳过。这与打标脚本docker run --rm未指定平台直接运行镜像的行为一致——因为镜像本就只构建于 amd64。standalone_edge_onlyL655-L664同样受限它基于node-edge构建standalone-edge。CI 中pull_ci_images也利用docker manifest inspect对 amd64-only 的镜像做了跳过处理L130-L154。4.2 版本升级校验目标edge_upgrade_versionL772-L777展示了一种手工升级 Edge 版本后的标准验证流程edge_upgrade_version: cd ./NodeEdge docker buildx build ... -t $(NAME)/node-edge:$(TAG_VERSION) . cd ./Standalone docker buildx build ... -t $(NAME)/standalone-edge:$(TAG_VERSION) . docker run --rm $(NAME)/standalone-edge:$(TAG_VERSION) /opt/selenium/selenium-server.jar info --version docker run --rm $(NAME)/standalone-edge:$(TAG_VERSION) microsoft-edge --version docker run --rm $(NAME)/standalone-edge:$(TAG_VERSION) msedgedriver --version依次校验 Selenium Grid、Edge、msedgedriver 三个版本与打标脚本探测版本号的方式一一对应。4.3 打标与发布目标tag_and_push_edge_imagesL792-L793封装了对 tag_and_push_browser_images.sh 的调用等价于日志第一行的命令tag_and_push_browser_imagesL781则一次性对所有浏览器执行。tag_latestL828-L860为node-edge/standalone-edge打latesttag且同样用case判断linux/amd64后才执行。releaseL1068-L1194会先校验镜像是否已构建再推送TAG_VERSION、主版本、主次版本、完整语义化版本四类 tag。tag_and_push_browser_images_ghcrL798-L808将本地所有 tag 用docker buildx imagetools create镜像到 GHCRRELEASE_OLD_VERSION场景同样适用。五、运行时配套Edge 进程清理与启动封装打标脚本只关心版本号对不对而镜像能否长期稳定运行还依赖 NodeEdge/edge-cleanup.sh 与 NodeEdge/wrap_edge_binary 这两个运行时组件。残留清理edge-cleanup.sh是一个由 supervisord 拉起配置见 NodeEdge/edge-cleanup.conf由SE_ENABLE_BROWSER_LEFTOVERS_CLEANUP环境变量开关控制的守护循环默认周期性地杀掉运行超过SE_BROWSER_LEFTOVERS_PROCESSES_SECS秒的 Edge 进程、清理超过SE_BROWSER_LEFTOVERS_TEMPFILES_DAYS天的/tmp/.com.microsoft.Edge.*临时目录。在长时间自动化任务中这能避免崩溃的 Edge 进程占用节点资源。启动封装wrap_edge_binary会把/usr/bin/microsoft-edge重命名为-base副本再用一个包装脚本替换原路径。包装脚本强制追加--no-sandbox容器内以非 root 运行时必需、支持通过SE_BROWSER_ARGS_*环境变量批量注入浏览器启动参数、并把--lang参数翻译为LANGUAGE环境变量以解决 Debian/Ubuntu 下语言设置失效的问题。六、实战如何复现本次打标并验证镜像6.1 复现打标命令在仓库根目录执行等价于日志第一行./tag_and_push_browser_images.sh 4.32.0 20250515 selenium false edge true前提是本机已存在selenium/node-edge:4.32.0-20250515镜像。若希望打标后立即推送将第 4 个参数改为true。6.2 通过 Makefile 一键执行make tag_and_push_edge_images VERSION4.32.0 BUILD_DATE20250515 RELEASE_OLD_VERSIONtrue6.3 验证版本一致性按 Makefile 中edge_upgrade_version的方式运行镜像自检docker run --rm selenium/standalone-edge:115.0.1901.203-edgedriver-115.0.1901.203-grid-4.32.0-20250515 microsoft-edge --version docker run --rm selenium/standalone-edge:115.0.1901.203-edgedriver-115.0.1901.203-grid-4.32.0-20250515 msedgedriver --version输出的版本号应与日志中的115.0.1901.203完全一致这也是打标脚本采用容器内探测而非外部填表的根本原因——tag 上的版本号永远来自镜像自身。七、小结docker-selenium 的 Edge 镜像发布体系可以概括为一条闭环链路构建NodeEdge/Dockerfile 依据EDGE_VERSION/EDGE_DRIVER_VERSION构建node-edge归档站点兜底保证旧版本可复现探测tag_and_push_browser_images.sh 通过docker run读取容器内真实版本号并计算短版本打标按完整/短版本 × 浏览器/驱动/Grid/日期的矩阵生成 6 组旧版本场景或 10 组常规场景tag同时作用于node-edge与standalone-edge推送docker push或docker buildx imagetools create完成发布并在latest、主版本号等浮动 tag 上持续更新。理解这套机制后无论是要锁定精确版本如115.0.1901.203-edgedriver-115.0.1901.203-grid-4.32.0-20250515、跟随大版本如115.0还是自行构建并发布 Edge 节点镜像都能精准定位到对应的构建参数与命令目标。赞分享测试后端云原生容器编排可观测性【免费下载链接】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点击查看免费下载相关推荐Selenium Grid 4.31.0 Edge 133 镜像发布解析docker-selenium 的 Edge 镜像版本与打标签机制详解Selenium Grid 4.31.0 Edge 133 镜像发布解析docker selenium 的 Edge 镜像版本与打标签机制详解 本篇文章以 d测试后端云原生容器编排可观测性docker-selenium Edge 115 镜像发布标签全解析从 tag_and_push_browser_images.sh 到 Selenium Grid 4.29.0 版本矩阵docker selenium Edge 115 镜像发布标签全解析从 tag_and_push_browser_images.sh 到 Selenium G测试后端云原生容器编排可观测性Selenium Grid Edge 115 镜像发布与标签体系全解析从 tag_and_push_browser_images 看 docker-selenium 的版本管理Selenium Grid Edge 115 镜像发布与标签体系全解析从 tag_and_push_browser_images 看 docker selen测试后端云原生容器编排可观测性上一篇Spinnaker Deck 插件依赖治理spinnaker/pluginsdk-peerdeps 的版本演进与同步机制下一篇用 PEM 证书验证 JWT深入解析 OPA 中 io.jwt.decode_verify 的 cert 用法创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表