簽機(jī)制全解:以 Selenium Grid 4.30.0 的 Firefox 102 鏡像為例)
測試后端云原生容器編排可觀測性【免費(fèi)下載鏈接】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項(xiàng)目地址https://gitcode.com/GitHub_Trending/do/docker-selenium點(diǎn)擊查看免費(fèi)下載本篇技術(shù)指南以 docker-selenium 倉庫中 CHANGELOG/archived/4.30.0/firefox_102.md 這份發(fā)布記錄為切入點(diǎn)完整講解倉庫如何為 Firefox 瀏覽器鏡像node-firefox與standalone-firefox生成多粒度版本標(biāo)簽并發(fā)布到鏡像倉庫的底層機(jī)制。讀完本文你將掌握tag_and_push_browser_images.sh的參數(shù)含義、12 類標(biāo)簽的命名規(guī)范與適用場景、Firefox/GeckoDriver 版本如何被自動探測以及這一機(jī)制在整個(gè)發(fā)布鏈路構(gòu)建 → 打標(biāo) → 推送 → 記錄歸檔中的位置。文檔定位瀏覽器版本矩陣中的一條可追溯記錄docker-selenium 倉庫在 CHANGELOG/README.md 中維護(hù)著一張Selenium Grid × Browser Version矩陣表其動機(jī)在文檔開篇有明確說明在為 Grid 持續(xù)提供最新核心版本的同時(shí)保留用戶固定pin特定瀏覽器版本進(jìn)行測試的能力包括跨瀏覽器測試、或在某些瀏覽器版本存在兼容性問題時(shí)鎖定舊版本。矩陣中的每個(gè) ? 都鏈接到對應(yīng)的發(fā)布記錄文件firefox_102.md正是 Selenium Grid 4.30.0 這一行、Firefox 102 這一列所指向的詳細(xì)變更記錄。這份記錄不是手工填寫的表格而是真實(shí)執(zhí)行發(fā)布腳本后的標(biāo)準(zhǔn)輸出歸檔——它直接證明了倉庫打標(biāo)簽 → 推送 → 記錄這條可審計(jì)的發(fā)布流水線確實(shí)運(yùn)行過同時(shí)為使用者提供了一份精確到瀏覽器版本 × 驅(qū)動版本 × Grid 版本 × 構(gòu)建日期的鏡像清單。一次真實(shí)的標(biāo)簽發(fā)布過程4.30.0 中的 Firefox 102.0.1firefox_102.md的完整正文如下該段輸出直接來自倉庫中的 tag_and_push_browser_images.sh./tag_and_push_browser_images.sh 4.30.0 20250323 selenium false firefox true Tagging images for browser firefox, version 4.30.0, build date 20250323, namespace selenium Selenium Grid version - 4.30.0-20250323 Firefox version - 102.0.1 Short Firefox version - 102.0 GeckoDriver version - 0.36.0 Short GeckoDriver version - 0.36 Tagged selenium/node-firefox:102.0.1-geckodriver-0.36.0-grid-4.30.0-20250323 Tagged selenium/standalone-firefox:102.0.1-geckodriver-0.36.0-grid-4.30.0-20250323 Tagged selenium/node-firefox:102.0.1-geckodriver-0.36.0-20250323 Tagged selenium/standalone-firefox:102.0.1-geckodriver-0.36.0-20250323 Tagged selenium/node-firefox:102.0.1-20250323 Tagged selenium/standalone-firefox:102.0.1-20250323 Tagged selenium/node-firefox:102.0-geckodriver-0.36-grid-4.30.0-20250323 Tagged selenium/standalone-firefox:102.0-geckodriver-0.36-grid-4.30.0-20250323 Tagged selenium/node-firefox:102.0-geckodriver-0.36-20250323 Tagged selenium/standalone-firefox:102.0-geckodriver-0.36-20250323 Tagged selenium/node-firefox:102.0-20250323 Tagged selenium/standalone-firefox:102.0-20250323這段輸出透露出幾條關(guān)鍵信息一次執(zhí)行、兩個(gè)鏡像、六組標(biāo)簽node-firefox與standalone-firefox各自獲得完全相同的 6 個(gè)標(biāo)簽合計(jì) 12 行Tagged記錄版本探測是自動完成的Firefox 版本102.0.1、GeckoDriver 版本0.36.0都不是手寫參數(shù)而是腳本通過docker run進(jìn)入容器執(zhí)行firefox --version、geckodriver --version探測出來的短版本是對稱推導(dǎo)的102.0.1 → 102.0、0.36.0 → 0.36取主版本號的前兩段Grid 版本始終帶上構(gòu)建日期4.30.0-20250323保證每次構(gòu)建的鏡像彼此可區(qū)分。腳本全解tag_and_push_browser_images.sh發(fā)布記錄中的每一行輸出都能在 tag_and_push_browser_images.sh 中找到對應(yīng)實(shí)現(xiàn)。該腳本是 Makefile 中tag_and_push_firefox_images等目標(biāo)調(diào)用的底層工具支持chrome、chromium、edge、firefox、chrome-for-testing五種瀏覽器。參數(shù)表腳本開頭L1-L9定義了 7 個(gè)位置參數(shù)位置參數(shù)含義文檔示例值$1VERSIONSelenium Grid 版本號4.30.0$2BUILD_DATE構(gòu)建日期YYYYMMDD20250323$3NAMESPACE鏡像命名空間selenium$4PUSH_IMAGE是否執(zhí)行docker push默認(rèn)falsefalse$5BROWSER瀏覽器類型case 分發(fā)鍵firefox$6RELEASE_OLD_VERSION是否為舊版本重新打標(biāo)默認(rèn)falsetrue$7PLATFORM目標(biāo)平臺chrome 分支專用默認(rèn)linux/amd64—其中TAG_VERSION${VERSION}-${BUILD_DATE}L15拼接出 Grid 完整版本也就是輸出第一行的4.30.0-20250323。Firefox 分支的執(zhí)行流程腳本主體是一個(gè)case ${BROWSER}分發(fā)L61-L285firefox分支位于 L195-L235核心邏輯分三步第一步探測瀏覽器與驅(qū)動版本FIREFOX_VERSION$(docker run --rm ${NAMESPACE}/node-firefox:${TAG_VERSION} firefox --version | awk {print $3}) GECKODRIVER_VERSION$(docker run --rm ${NAMESPACE}/node-firefox:${TAG_VERSION} geckodriver --version | awk NR1{print $2})腳本以docker run臨時(shí)啟動selenium/node-firefox:4.30.0-20250323分別執(zhí)行firefox --version與geckodriver --version再通過awk抽取版本號。這要求鏡像必須先構(gòu)建成功并存在于本地——這正是發(fā)布流程中先make firefox后打標(biāo)簽的依賴順序的由來。GeckoDriver 的版本抽取使用NR1只取輸出第一行是因?yàn)間eckodriver --version的輸出包含多行描述文本版本號位于首行。第二步推導(dǎo)短版本short_version() 函數(shù)把完整版本按.切分后只保留前兩段function short_version() { local __long_version$1 local __version_split(${__long_version//./ }) echo ${__version_split[0]}.${__version_split[1]} }于是102.0.1 → 102.00.36.0 → 0.36與輸出完全一致。第三步組裝標(biāo)簽數(shù)組并逐組打標(biāo)FIREFOX_TAGS數(shù)組L206-L230定義了六組基礎(chǔ)標(biāo)簽隨后循環(huán)對node-firefox與standalone-firefox兩個(gè)鏡像分別執(zhí)行retagfor firefox_tag in ${FIREFOX_TAGS[]}; do retag node-firefox ${firefox_tag} retag standalone-firefox ${firefox_tag} doneretag()L31-L51默認(rèn)執(zhí)行docker tag當(dāng)PUSH_IMAGEtrue時(shí)追加docker push。腳本同時(shí)支持PROMOTE_TAGStrue的registry-to-registry發(fā)布模式——此時(shí)改用docker buildx imagetools create在不拉取鏡像到本地的前提下直接把多架構(gòu) manifest 從源倉庫指向新標(biāo)簽確保歸檔發(fā)布的鏡像 digest 與測試通過的完全一致。六組標(biāo)簽的命名規(guī)范與適用場景標(biāo)簽形態(tài)示例node-firefox信息粒度適用場景完整瀏覽器-完整驅(qū)動-grid-Grid完整版本102.0.1-geckodriver-0.36.0-grid-4.30.0-20250323五要素齊全精確復(fù)現(xiàn)某次發(fā)布回歸排查完整瀏覽器-完整驅(qū)動-構(gòu)建日期102.0.1-geckodriver-0.36.0-20250323瀏覽器驅(qū)動日期鎖定當(dāng)天構(gòu)建的驅(qū)動組合完整瀏覽器-構(gòu)建日期102.0.1-20250323瀏覽器日期固定瀏覽器版本于某天構(gòu)建短瀏覽器-短驅(qū)動-grid-Grid完整版本102.0-geckodriver-0.36-grid-4.30.0-20250323短版本五要素大版本級別的復(fù)現(xiàn)短瀏覽器-短驅(qū)動-構(gòu)建日期102.0-geckodriver-0.36-20250323短版本三要素大版本日期組合短瀏覽器-構(gòu)建日期102.0-20250323短版本日期只關(guān)心瀏覽器大版本RELEASE_OLD_VERSIONtrue的關(guān)鍵作用當(dāng)此參數(shù)為false默認(rèn)時(shí)腳本還會追加四組不帶構(gòu)建日期的浮動標(biāo)簽——102.0.1-geckodriver-0.36.0、102.0.1、102.0-geckodriver-0.36、102.0L219-L229用于日常docker pull的便捷引用。而當(dāng)對已經(jīng)發(fā)布過的舊版本重新打標(biāo)時(shí)如 4.30.0 歸檔中的這次操作腳本刻意跳過這四組標(biāo)簽避免舊發(fā)布覆蓋當(dāng)前最新的浮動標(biāo)簽、造成:102.0指向歧義。這正是文檔命令中第 6 個(gè)參數(shù)為true的語義。從鏡像構(gòu)建到標(biāo)簽發(fā)布的完整鏈路firefox_102.md記錄的是鏈條的最后一環(huán)其上游在倉庫中環(huán)環(huán)相扣鏡像構(gòu)建Makefile 中firefox目標(biāo)L590-L593先構(gòu)建node-firefoxstandalone_firefox目標(biāo)L614-L617再從node-firefox派生standalone-firefoxFirefox 與 GeckoDriver 的安裝NodeFirefox/Dockerfile 的 L21-L70 安裝指定版本的 Firefox支持latest、beta-latest、esr-latest及具體數(shù)字版本數(shù)字版本走 Mozilla CDN 下載路徑L72-L86 下載對應(yīng) GeckoDriver 并以符號鏈接暴露到/usr/bin/geckodriver。構(gòu)建期間還會把瀏覽器名稱、版本和 binary 路徑寫入/opt/selenium/browsers/firefox/L93-L96供 Grid 節(jié)點(diǎn)注冊時(shí)上報(bào)能力版本自檢make firefox_upgrade_versionL765-L770構(gòu)建后立即以docker run驗(yàn)證selenium-server.jar info --version、firefox --version、geckodriver --version與打標(biāo)腳本的探測命令一脈相承打標(biāo)推送make tag_and_push_firefox_imagesL795-L796把$(VERSION) $(BUILD_DATE) $(NAMESPACE) $(PUSH_IMAGE) firefox $(RELEASE_OLD_VERSION)透傳給腳本即firefox_102.md第一行命令的真實(shí)來源記錄歸檔發(fā)布記錄按CHANGELOG/Grid版本/瀏覽器_主版本.md存放舊版本移入archived/目錄由 CHANGELOG/README.md 統(tǒng)一索引。同一瀏覽器版本的跨版本演進(jìn)4.30.0 與 4.48.0 對比將歸檔記錄與最新記錄對照可以觀察到版本矩陣的演進(jìn)邏輯在 CHANGELOG/4.48.0/firefox_102.md 中同一 Firefox102.0.1鏡像在 Selenium Grid 4.48.0 發(fā)布中被配上了 GeckoDriver0.37.14.30.0 時(shí)為 0.36.0。這說明瀏覽器版本矩陣的維護(hù)是逐 Grid 版本持續(xù)進(jìn)行的Firefox 102 這類舊版本仍會隨新 Grid 發(fā)布重新構(gòu)建以便用戶在升級 Grid 的同時(shí)保留舊瀏覽器驅(qū)動版本會隨發(fā)布演進(jìn)獨(dú)立升級因此瀏覽器版本相同 ≠ 鏡像內(nèi)容相同精確引用應(yīng)使用包含驅(qū)動與 Grid 版本的完整標(biāo)簽。這也解釋了為什么矩陣 README 特意注明并非每個(gè) Grid 與瀏覽器版本的組合都經(jīng)過完整測試CHANGELOG/README.md 的 Note 段落使用者需要依據(jù)自身測試需求評估選擇。實(shí)踐如何選用這些標(biāo)簽以本記錄為例你可以直接在任意運(yùn)行 Docker 的機(jī)器上拉取對應(yīng)鏡像# 精確復(fù)現(xiàn)本次發(fā)布瀏覽器驅(qū)動Grid日期 docker pull selenium/node-firefox:102.0.1-geckodriver-0.36.0-grid-4.30.0-20250323 # 日常固定瀏覽器主版本若該發(fā)布允許浮動標(biāo)簽通常為最新發(fā)布所保留 docker pull selenium/node-firefox:102.0 # 在 Selenium Grid 中作為 Node 運(yùn)行 docker run -d -p 5555:5555 \ -e SE_EVENT_BUS_PUBLISH_PORT4442 \ -e SE_EVENT_BUS_SUBSCRIBE_PORT4443 \ selenium/node-firefox:102.0.1-geckodriver-0.36.0-20250323選擇標(biāo)簽的建議CI 與生產(chǎn)環(huán)境優(yōu)先使用包含grid-段或至少包含構(gòu)建日期的標(biāo)簽保證可復(fù)現(xiàn)性浮動標(biāo)簽僅瀏覽器版本號適合本地開發(fā)但需意識到它指向的 digest 可能隨新發(fā)布更新??偨Y(jié)CHANGELOG/archived/4.30.0/firefox_102.md雖然只是一份簡短的發(fā)布輸出但它背后是一套完整且可審計(jì)的鏡像版本治理體系構(gòu)建時(shí)在 NodeFirefox/Dockerfile 中安裝指定版本瀏覽器與驅(qū)動發(fā)布時(shí)由 tag_and_push_browser_images.sh 自動探測版本、生成六組標(biāo)簽并同步到 Node 與 Standalone 兩種形態(tài)再由 CHANGELOG/README.md 的版本矩陣對外索引。理解這套機(jī)制你就能在 docker-selenium 的鏡像海洋中精準(zhǔn)定位、復(fù)現(xiàn)和鎖定任意一次瀏覽器發(fā)布。贊分享測試后端云原生容器編排可觀測性【免費(fèi)下載鏈接】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項(xiàng)目地址https://gitcode.com/GitHub_Trending/do/docker-selenium點(diǎn)擊查看免費(fèi)下載相關(guān)推薦LMCache CacheGen 壓縮指南基于分布特性的 KV Cache 緊湊比特流編碼LMCache CacheGen 壓縮指南基于分布特性的 KV Cache 緊湊比特流編碼 導(dǎo)讀 CacheGen 是 LMCache 內(nèi)置的一種 KV ca測試后端云原生容器編排可觀測性docker-selenium 瀏覽器鏡像標(biāo)簽體系全解析以 Selenium Grid 4.48.0 與 Chrome 102 版本組合為例docker selenium 瀏覽器鏡像標(biāo)簽體系全解析以 Selenium Grid 4.48.0 與 Chrome 102 版本組合為例 在 docker測試后端云原生容器編排可觀測性docker-selenium 瀏覽器鏡像標(biāo)簽發(fā)布機(jī)制全解析以 Selenium Grid 4.28.1 與 Firefox 103.0.2 為例docker selenium 瀏覽器鏡像標(biāo)簽發(fā)布機(jī)制全解析以 Selenium Grid 4.28.1 與 Firefox 103.0.2 為例 導(dǎo)讀 本文測試后端云原生容器編排可觀測性上一篇CANN PTO-ISA TCOLARGMIN 指令詳解逐列最小值索引歸約的數(shù)學(xué)語義、匯編形態(tài)與多平臺實(shí)現(xiàn)下一篇StarRocks inspect_task_runs() 詳解以 JSON 視角透視 FE TaskManager 的任務(wù)運(yùn)行狀態(tài)創(chuàng)作聲明:本文部分內(nèi)容由AI輔助生成(AIGC),僅供參考