
测试后端云原生容器编排可观测性【免费下载链接】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 仓库的发布变更记录 CHANGELOG/archived/4.29.0/firefox_100.md 为主体完整还原 Selenium Grid 4.29.0 版本中 Firefox 100.0.2 镜像的构建打标全过程并结合 tag_and_push_browser_images.sh、Makefile、NodeFirefox/Dockerfile 等源码讲透镜像标签命名规则、版本探测链路与发布归档机制。读完本文你将能够读懂任意一个firefox_xxx.md归档日志自主复现 Firefox 版本镜像的打标命令并根据标签语义准确选择要拉取的node-firefox/standalone-firefox镜像。一、发布记录原文一次 Firefox 100 的完整打标输出归档文件CHANGELOG/archived/4.29.0/firefox_100.md记录的是 Selenium Grid 4.29.0 发布时为 Firefox 100 版本镜像批量打标签的完整执行日志。原文如下./tag_and_push_browser_images.sh 4.29.0 20250303 selenium false firefox true Tagging images for browser firefox, version 4.29.0, build date 20250303, namespace selenium Selenium Grid version - 4.29.0-20250303 Firefox version - 100.0.2 Short Firefox version - 100.0 GeckoDriver version - 0.36.0 Short GeckoDriver version - 0.36 Tagged selenium/node-firefox:100.0.2-geckodriver-0.36.0-grid-4.29.0-20250303 Tagged selenium/standalone-firefox:100.0.2-geckodriver-0.36.0-grid-4.29.0-20250303 Tagged selenium/node-firefox:100.0.2-geckodriver-0.36.0-20250303 Tagged selenium/standalone-firefox:100.0.2-geckodriver-0.36.0-20250303 Tagged selenium/node-firefox:100.0.2-20250303 Tagged selenium/standalone-firefox:100.0.2-20250303 Tagged selenium/node-firefox:100.0-geckodriver-0.36-grid-4.29.0-20250303 Tagged selenium/standalone-firefox:100.0-geckodriver-0.36-grid-4.29.0-20250303 Tagged selenium/node-firefox:100.0-geckodriver-0.36-20250303 Tagged selenium/standalone-firefox:100.0-geckodriver-0.36-20250303 Tagged selenium/node-firefox:100.0-20250303 Tagged selenium/standalone-firefox:100.0-20250303从这段日志可以提炼出三条关键事实版本组合Selenium Grid4.29.0-20250303、Firefox100.0.2短版本100.0、GeckoDriver0.36.0短版本0.36打标对象node-firefox与standalone-firefox两种镜像各获得 6 个标签共 12 个命令入参4.29.0 20250303 selenium false firefox true七个位置参数含可省略参数决定了本次打标的命名空间、是否推送与是否释放旧版本标签。二、命令入参逐项拆解tag_and_push_browser_images.sh的 7 个位置参数执行日志的第一行命令指向仓库根目录的 tag_and_push_browser_images.sh其头部第 1-15 行定义了全部入参位置变量本次取值说明1VERSION4.29.0Selenium Grid 版本号2BUILD_DATE20250303构建日期YYYYMMDD与版本号拼接为完整镜像标签TAG_VERSION4.29.0-202503033NAMESPACEselenium镜像命名空间最终标签形如selenium/node-firefox:...4PUSH_IMAGEfalse是否执行docker pushfalse表示只打标签不推送先构建测试测试通过后再推送5BROWSERfirefox浏览器类型脚本通过case分支分发到 firefox/chrome/chromium/edge/chrome-for-testing 等处理逻辑6RELEASE_OLD_VERSIONtrue是否释放旧版本裸标签仅版本号、无日期7PLATFORM可省略未传默认linux/amd64用于docker run探测版本时指定平台仅 chrome 分支使用脚本第 15 行通过TAG_VERSION${VERSION}-${BUILD_DATE}计算出4.29.0-20250303这正是日志第 4 行 Selenium Grid version - 4.29.0-20250303 的来源。需要注意的是本次日志里PUSH_IMAGEfalse因此只生成了标签而未推送真正的推送由后续发布流水线统一完成——这与仓库发布策略先构建测试、再发布已验证镜像一致对应 tag_and_push_browser_images.sh 中retag()的PROMOTE_TAGS分支。三、版本探测链路容器内读取 firefox 与 geckodriver 版本日志中 Firefox version - 100.0.2 与 GeckoDriver version - 0.36.0 并非硬编码而是脚本在已构建好的镜像内部动态探测得到的。以 tag_and_push_browser_images.sh 的 firefox 分支第 195-204 行为例FIREFOX_VERSION$(docker run --rm ${NAMESPACE}/node-firefox:${TAG_VERSION} firefox --version | awk {print $3}) echo Firefox version - ${FIREFOX_VERSION} FIREFOX_SHORT_VERSION$(short_version ${FIREFOX_VERSION}) echo Short Firefox version - ${FIREFOX_SHORT_VERSION} GECKODRIVER_VERSION$(docker run --rm ${NAMESPACE}/node-firefox:${TAG_VERSION} geckodriver --version | awk NR1{print $2}) echo GeckoDriver version - ${GECKODRIVER_VERSION} GECKODRIVER_SHORT_VERSION$(short_version ${GECKODRIVER_VERSION})其工作流程为用docker run临时启动selenium/node-firefox:4.29.0-20250303分别执行firefox --version与geckodriver --version用awk从输出中截取第 3 个字段Firefox与首行第 2 个字段GeckoDriver得到完整版本号调用脚本第 53-57 行的short_version()函数按.分割后取前两段将100.0.2截短为100.0、0.36.0截短为0.36。这里值得注意的一个实现细节firefox 分支的docker run未携带--platform ${PLATFORM}与 chrome 分支不同说明该分支在版本探测时默认使用执行机当前架构。此外日志中 Tagging images for browser firefox, version 4.29.0, build date 20250303, namespace selenium 对应脚本第 59 行的echo是整个流程的开场白。四、12 个标签的语义拆解三种粒度 × 两个短长版本日志显示每个镜像获得 6 个标签node-firefox与standalone-firefox各一份合计 12 行 Tagged。这 6 个标签由 firefox 分支第 206-218 行的FIREFOX_TAGS数组生成可以划分为三组语义标签语义100.0.2-geckodriver-0.36.0-grid-4.29.0-20250303完整精度浏览器完整版本 驱动完整版本 Grid 完整版本 构建日期100.0.2-geckodriver-0.36.0-20250303完整精度浏览器完整版本 驱动完整版本 构建日期100.0.2-20250303完整精度浏览器完整版本 构建日期100.0-geckodriver-0.36-grid-4.29.0-20250303短精度浏览器短版本 驱动短版本 Grid 完整版本 构建日期100.0-geckodriver-0.36-20250303短精度浏览器短版本 驱动短版本 构建日期100.0-20250303短精度浏览器短版本 构建日期标签组成规则可以概括为浏览器版本(-geckodriver-驱动版本)?(-grid-Grid版本)?-构建日期从最精确能唯一锁定 Firefox 100.0.2 GeckoDriver 0.36.0 Grid 4.29.0 日期 20250303到最简只需锁定 Firefox 100.0 与构建日期。这与 docs/docker-hub/node-firefox.md 中 How to choose the correct tag for you 一节描述的标签约定完全一致——该文档给出的标签骨架为selenium/node-firefox-browserVersion-browserDriver-browserDriverVersion-Major.Minor.Patch-YYYYMMDD并附有BrowserMajor.BrowserMinor-geckodriver-GeckoDriverMajor.GeckoDriverMinor-grid-Major.Minor.Patch-YYYYMMDD的完整形态示例与本次日志逐一对应。值得强调的是FIREFOX_TAGS中每个标签都被依次应用到两种镜像上脚本第 232-235 行for firefox_tag in ${FIREFOX_TAGS[]}; do retag node-firefox ${firefox_tag} retag standalone-firefox ${firefox_tag} doneretag()脚本第 31-51 行是标签落地的执行者常规路径下执行docker tag当PUSH_IMAGEtrue时追加docker push而当发布采用直接复用已测试镜像策略时PROMOTE_TAGStrue则改用docker buildx imagetools create在 registry 与 registry 之间复制多架构 manifest避免单架构污染——这正是脚本注释中特别说明的场景。五、为什么本次只有 6 个标签RELEASE_OLD_VERSIONtrue的抑制效果细心的读者会发现日志中没有出现selenium/node-firefox:100.0.2、selenium/node-firefox:100.0这类不带日期的裸版本标签。原因在于命令的第 6 个参数是trueRELEASE_OLD_VERSION。查看脚本第 219-230 行if [ ${RELEASE_OLD_VERSION} false ]; then FIREFOX_TAGS( # Browser version and browser driver version ${FIREFOX_VERSION}-geckodriver-${GECKODRIVER_VERSION} # Browser version ${FIREFOX_VERSION} # Browser version and browser driver version ${FIREFOX_SHORT_VERSION}-geckodriver-${GECKODRIVER_SHORT_VERSION} # Browser version ${FIREFOX_SHORT_VERSION} ) fi当RELEASE_OLD_VERSIONfalse时数组还会追加 4 个标签100.0.2-geckodriver-0.36.0、100.0.2、100.0-geckodriver-0.36、100.0使每个镜像的标签数从 6 个增至 10 个如 CHANGELOG/archived/4.29.0/firefox_134.md 所示。反之当为true时只有带构建日期的 6 个标签会被创建。这一设计的意图在于避免回溯性发布干扰最新语义不带日期的裸版本标签如firefox:100.0会被用户理解为该版本的最新构建如果在发布很久之后以旧版本号重新构建就会用新内容覆盖原有标签指向。因此对历史版本的补发一律强制带上构建日期确保标签不可变、可追溯。六、从单条日志到版本矩阵CHANGELOG 的生成与归档机制firefox_100.md并不是孤立存在的它是 docker-selenium 发布版本矩阵体系中的一环。仓库根目录的 CHANGELOG/README.md 用一张Grid 版本 × 浏览器版本矩阵表汇总了所有已发布组合其中4.29.0行、Firefox列下的100格即链接到本文档。这份矩阵完全由 CHANGELOG/generate-matrix-readme.py 自动生成其工作分为三步归档旧版本archive_old_versions()扫描当前目录下所有形如X.Y.Z的版本目录保留最新版本其余移入archived/子目录这正是4.29.0位于CHANGELOG/archived/之下的原因——它已不是最新 Grid 版本扫描变更记录scan_changelog()用正则([\w-])_(\d)\.md解析每个版本目录下的文件名提取出浏览器类型与版本号构建grid_version → browser → version的映射渲染矩阵generate_readme()按浏览器分组、按版本号降序输出 Markdown 表格最新 Grid 版本与归档版本分列两个大区。README 的Motivation一节说明了这套机制的动机在持续提供最新 Selenium Grid 核心版本的同时允许用户锁定特定浏览器版本用于跨浏览器测试或规避特定版本问题——镜像同时打包了 Grid、驱动与浏览器版本用户只需按矩阵找到标签、拉取镜像即可开始测试。README 也明确提示项目并未对每个 Grid × 浏览器组合都做完整回归测试用户需结合自身测试需求评估选择。七、拉取与运行如何用本次发布的标签跑起来7.1 拉取镜像根据日志中的标签可直接拉取本次发布的 Firefox 100.0.2 镜像docker pull selenium/node-firefox:100.0.2-geckodriver-0.36.0-grid-4.29.0-20250303或使用更简短的标签锁定同一构建docker pull selenium/node-firefox:100.0-20250303若想一容器即网格Grid 浏览器 驱动全打包可改用standalone-firefoxdocker pull selenium/standalone-firefox:100.0.2-geckodriver-0.36.0-grid-4.29.0-202503037.2 以 Hub-Node 模式运行docs/docker-hub/node-firefox.md 给出了标准的 Hub-Node 启动流程# 1. 创建网络 docker network create grid # 2. 启动 Hub docker run -d -p 4442-4444:4442-4444 --net grid --name selenium-hub selenium/hub:latest # 3. 启动 Firefox Node务必使用 --shm-size2g docker run -d --net grid -e SE_EVENT_BUS_HOSTselenium-hub \ --shm-size2g \ selenium/node-firefox:100.0.2-geckodriver-0.36.0-grid-4.29.0-20250303随后将 WebDriver 测试指向http://localhost:4444即可。需要注意--shm-size2g是硬性要求含浏览器的镜像必须挂载宿主共享内存否则浏览器进程可能因/dev/shm过小而崩溃官方文档明确要求本地调试可访问http://localhost:7900/?autoconnect1resizescalepasswordsecret通过 VNC 实时查看容器内浏览器画面用latest固然省事但官方建议始终使用完整标签以精确锁定浏览器与 Grid 版本避免环境漂移测试结束后可执行docker network rm grid清理网络。7.3 在 Makefile 中的对应入口若需要从仓库复现整个打标流程Makefile 提供了封装目标make tag_and_push_firefox_images第 795-796 行即执行./tag_and_push_browser_images.sh $(VERSION) $(BUILD_DATE) $(NAMESPACE) $(PUSH_IMAGE) firefox $(RELEASE_OLD_VERSION)而tag_and_push_browser_images第 781 行聚合了 chrome、chrome-for-testing、chromium、edge、firefox 全部分支。RELEASE_OLD_VERSION变量在 Makefile 第 16 行默认取值为false——与归档日志中的true形成对照说明本次属于回溯补发旧版本场景。八、镜像内部实现NodeFirefox 如何组装 Firefox 100 与 GeckoDriver 0.36打标日志的产出物——selenium/node-firefox:...镜像——本身由 NodeFirefox/Dockerfile 构建。理解它能帮你更清楚地知道100.0.2与0.36.0这两个版本号在镜像里的真实落点。8.1 Firefox 的安装策略Dockerfile 第 21-23 行声明了三个构建参数ARG FIREFOX_VERSIONlatest ARG FIREFOX_DOWNLOAD_URL ARG FIREFOX_LANG_VERSION${FIREFOX_VERSION}构建时根据FIREFOX_VERSION走三条路径之一通道版本latest/beta-latest/nightly-latest/devedition-latest/esr-latest调用 NodeFirefox/install-firefox-apt.sh 走 APT 仓库安装数值版本且为 amd64 或 ≥136 的主版本优先拼接 Mozilla CDN 的.deb直链https://download-installer.cdn.mozilla.net/pub/firefox/releases/$FIREFOX_VERSION/linux-$ARCH/en-US/firefox-$FIREFOX_VERSION.deb若返回 404 则回退到.tar.bz2归档数值版本且为 aarch64 且主版本 136落入 nightly 通道分支兜底。下载后的安装动作由 NodeFirefox/install-firefox-package.sh 完成该脚本按 URL 后缀区分.deb、.tar.bz2、.tar.xz三种格式.deb直接apt-get installtar 归档则解压到/opt/firefox-${FIREFOX_VERSION}并软链/usr/bin/firefox同时预留distribution/extensions目录。构建末尾还会调用get_lang_package.sh下载语言包并额外做一次apt-get upgrade修复 Firefox 依赖链上的潜在 CVE。8.2 GeckoDriver 的安装策略Dockerfile 第 75-86 行负责 GeckoDriverARG GECKODRIVER_VERSIONlatest RUN LATEST_VERSION$(curl -s -L -o /dev/null -w %{url_effective}\n https://github.com/mozilla/geckodriver/releases/latest | sed -E s#.*/tag/(v[0-9.]).*#\1#) \ DRIVER_ARCH$(if [ $(dpkg --print-architecture) amd64 ]; then echo linux64; else echo linux-aarch64; fi) \ GK_VERSION$(if [ ${GECKODRIVER_VERSION:-latest} latest ]; then echo ${LATEST_VERSION}; else echo $GECKODRIVER_VERSION; fi) \ wget --no-verbose -O /tmp/geckodriver.tar.gz https://github.com/mozilla/geckodriver/releases/download/${GK_VERSION}/geckodriver-${GK_VERSION}-${DRIVER_ARCH}.tar.gz \ ... ln -fs /opt/geckodriver-$GK_VERSION /usr/bin/geckodriver当GECKODRIVER_VERSION0.36.0时直接下载对应 release 归档解压至/opt/geckodriver-0.36.0并软链到/usr/bin/geckodriver。这与打标脚本探测到geckodriver --version输出0.36.0形成闭环标签中的驱动版本号就是镜像内/usr/bin/geckodriver的真实版本。8.3 浏览器元信息的固化构建收尾阶段第 93-96 行会把浏览器信息写入镜像RUN mkdir -p /opt/selenium/browsers/firefox \ echo firefox /opt/selenium/browsers/firefox/name \ firefox --version | awk {print $3} /opt/selenium/browsers/firefox/version \ echo {moz:firefoxOptions: {binary: ${SE_BROWSER_BINARY_LOCATION:-/usr/bin/firefox}}} /opt/selenium/browsers/firefox/binary_location这些元数据供 Selenium Grid 的 Node 配置自动发现浏览器能力NodeBase/generate_config 会读取browsers/目录并允许通过SE_BROWSER_BINARY_LOCATION环境变量覆盖 Firefox 二进制路径。此外镜像还默认启用SE_NODE_ENABLE_MANAGED_DOWNLOADStrue与 OTEL 服务名selenium-node-firefox。8.4 残留进程兜底清理NodeFirefox/firefox-cleanup.sh 作为 supervisord 托管的后台守护对应 NodeFirefox/firefox-cleanup.conf周期性地默认间隔由SE_BROWSER_LEFTOVERS_INTERVAL_SECS控制找出运行超过SE_BROWSER_LEFTOVERS_PROCESSES_SECS的firefox-bin进程并kill -9防止僵尸进程堆积拖垮节点这对长时间运行 Firefox 自动化任务的场景尤为重要。九、实战建议与注意事项优先使用完整标签100.0.2-geckodriver-0.36.0-grid-4.29.0-20250303能一次性锁定浏览器、驱动、Grid 与构建日期四个维度适合 CI 流水线与可复现测试环境回溯发布的标签不含裸版本由于本次RELEASE_OLD_VERSIONtrueselenium/node-firefox:100.0.2这类裸标签并不存在于本次发布中拉取时请使用带日期的标签跨浏览器测试请查矩阵需要其他 Firefox 版本或其他浏览器时可对照 CHANGELOG/README.md 的矩阵选择 Grid 版本与浏览器版本的组合再进入对应firefox_xxx.md获取精确标签组合未经全量测试矩阵 README 明确提示并非所有 Grid × 浏览器组合都经过完整验证生产使用前应先用 Smoke 用例自测仓库 tests/ 目录提供了 SmokeTests 等测试套件运行务必设置共享内存任何含浏览器的镜像启动时都建议加--shm-size2g否则易触发浏览器进程崩溃。十、结语一份看似只有 20 行的打标日志实际上串联起了 docker-selenium 发布体系的完整链路从 tag_and_push_browser_images.sh 的版本探测与标签生成到 NodeFirefox/Dockerfile 的浏览器与驱动装配再到 CHANGELOG/generate-matrix-readme.py 的归档索引。理解这套标签约定你就能在任何历史版本归档中快速定位所需镜像、精准复现发布流程并为自己的自动化测试选对那一个确定性的标签。赞分享测试后端云原生容器编排可观测性【免费下载链接】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点击查看免费下载相关推荐OpenCLI IMDb 适配器把电影搜索、Top 250 榜单与用户评论变成可脚本化的 CLI 数据源OpenCLI IMDb 适配器把电影搜索、Top 250 榜单与用户评论变成可脚本化的 CLI 数据源 OpenCLI 的 IMDb 适配器基于公共页面无测试后端云原生容器编排可观测性docker-selenium Firefox 134 镜像标签全解析Selenium Grid 4.29.0 发布记录与 tag_and_push_browser_images.sh 标签体系实战docker selenium Firefox 134 镜像标签全解析Selenium Grid 4.29.0 发布记录与 tag_and_push_brow测试后端云原生容器编排可观测性CANN ops-math 中的 aclnnLogicalOr 逻辑或算子编译部署、API 调用与源码级实现解析CANN ops math 中的 aclnnLogicalOr 逻辑或算子编译部署、API 调用与源码级实现解析 本篇技术指南围绕 CANN ops math测试后端云原生容器编排可观测性上一篇绝妙的个人生产力Awesome Productivity 中文版100 精选资源助力效率飞跃下一篇终极指南GitHub Actions Runner Images Ubuntu 24.04镜像全面解析与使用技巧创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考