試指南:一個(gè)項(xiàng)目如何同時(shí)盯住master與feature分支)
Sismo多分支測(cè)試指南一個(gè)項(xiàng)目如何同時(shí)盯住master與feature分支【免費(fèi)下載鏈接】SismoYour Continuous Testing Server項(xiàng)目地址: https://gitcode.com/gh_mirrors/si/Sismo如果你正被測(cè)試跑不過(guò)就上線的恐懼支配那么 Sismo 這款用 PHP 編寫(xiě)的持續(xù)測(cè)試服務(wù)器Continuous Testing Server值得你花三分鐘了解。它不像 Jenkins 那樣龐大復(fù)雜只做一件事拉取你的代碼、運(yùn)行測(cè)試、發(fā)送通知。而今天這篇 Sismo 多分支測(cè)試指南要解決一個(gè)非常實(shí)際的問(wèn)題——如何讓同一個(gè)項(xiàng)目同時(shí)盯住 master 與 feature 分支讓每個(gè)分支的測(cè)試結(jié)果都盡在掌握。為什么你需要同時(shí)測(cè)試多個(gè)分支日常開(kāi)發(fā)中master 分支代表穩(wěn)定版本feature 分支承載新功能。很多團(tuán)隊(duì)只在合并前手動(dòng)跑一次測(cè)試結(jié)果要么忘跑、要么跑錯(cuò)分支。更常見(jiàn)的情況是你在本地 feature 分支上改了代碼推上去才發(fā)現(xiàn)破壞了 master 上的某個(gè)模塊。Sismo 的解法很優(yōu)雅把每個(gè)分支當(dāng)成一個(gè)獨(dú)立項(xiàng)目來(lái)監(jiān)控讓持續(xù)測(cè)試真正覆蓋到你關(guān)心的每一條分支。Sismo 是什么一個(gè)極簡(jiǎn)的持續(xù)測(cè)試服務(wù)器Sismo 由 Symfony 之父 Fabien Potencier 開(kāi)發(fā)核心設(shè)計(jì)理念是本地優(yōu)先。它最適合作為本地post-commit鉤子運(yùn)行每次提交后立刻觸發(fā)測(cè)試在你把代碼推送到遠(yuǎn)程倉(cāng)庫(kù)之前就給出即時(shí)反饋與你的 CI 服務(wù)器形成完美互補(bǔ)。它不挑語(yǔ)言和框架只需提供一個(gè)測(cè)試命令測(cè)試失敗時(shí)返回非零退出碼即可。安裝也極其簡(jiǎn)單——單個(gè) PHP 文件即可運(yùn)行 CLI 工具和 Web 界面。多分支測(cè)試的核心配置方法Sismo 的所有項(xiàng)目配置都集中在~/.sismo/config.php文件中返回一個(gè)項(xiàng)目數(shù)組即可。多分支配置只需三步。第一步讓分支名稱獨(dú)一無(wú)二Sismo 通過(guò)項(xiàng)目名稱區(qū)分不同的構(gòu)建任務(wù)。要跟蹤多個(gè)分支關(guān)鍵是給每個(gè)分支起一個(gè)獨(dú)一無(wú)二且容易識(shí)別的名稱比如帶上分支名后綴$projects[] new Sismo\GithubProject(Twig (master branch), /Users/fabien/Twig); $projects[] new Sismo\GithubProject(Twig (feat-awesome branch), /Users/fabien/Twigfeat-awesome);第二步用repositorybranch語(yǔ)法綁定分支Sismo 支持在倉(cāng)庫(kù)地址后用直接指定分支這是多分支測(cè)試的靈魂語(yǔ)法。setRepository()方法定義于 src/Sismo/Project.php會(huì)自動(dòng)解析后面的內(nèi)容并設(shè)置為項(xiàng)目分支$projects[] new Sismo\GithubProject(Twig (master branch), /Users/fabien/Twig); $projects[] new Sismo\GithubProject(Twig (feat-awesome branch), /Users/fabien/Twigfeat-awesome);如果你的倉(cāng)庫(kù)不在 GitHub 上也可以用通用的Sismo\Project類手動(dòng)配置分支$feat new Sismo\Project(MyApp (feature/login)); $feat-setRepository(/path/to/myapp.gitfeature/login); $feat-setCommand(composer install phpunit); $projects[] $feat;第三步復(fù)用同一個(gè)倉(cāng)庫(kù)克隆不用擔(dān)心資源浪費(fèi)——Sismo 對(duì)共享同一倉(cāng)庫(kù) URL 的項(xiàng)目復(fù)用同一個(gè) git 克隆。構(gòu)建時(shí)底層 Builder見(jiàn) src/Sismo/Builder.php會(huì)先f(wàn)etch origin再切換到對(duì)應(yīng)的origin/分支進(jìn)行測(cè)試所以兩個(gè)分支共用一份代碼副本既省磁盤(pán)又快。如何快速構(gòu)建全部分支?配置完成后一條命令即可構(gòu)建所有項(xiàng)目包括所有分支php sismo.php build --verbose也可以只構(gòu)建某個(gè)分支對(duì)應(yīng)的項(xiàng)目php sismo.php build myapp-feature-login想查看某個(gè)分支最近一次構(gòu)建的完整輸出使用output命令php sismo.php output myapp-feature-login讓多分支測(cè)試全自動(dòng)post-commit 鉤子手動(dòng)敲命令太麻煩真正的多分支持續(xù)測(cè)試應(yīng)該零干預(yù)。把下面的腳本保存為項(xiàng)目的.git/hooks/post-commit并加上可執(zhí)行權(quán)限每次提交后 Sismo 就會(huì)自動(dòng)構(gòu)建對(duì)應(yīng)分支#!/bin/sh nohup php /path/to/sismo.php --quiet --force build myapp-feature-login git log -1 HEAD --pretty%H /dev/null 提示其中myapp-feature-login是項(xiàng)目的 slug唯一標(biāo)識(shí)。如果你希望合并分支時(shí)也觸發(fā)測(cè)試可以再創(chuàng)建一個(gè)post-merge鉤子。用 Web 界面與 CCMonitor 一眼看清所有分支狀態(tài) Sismo 自帶的 Web 界面模板位于src/templates/目錄會(huì)為每個(gè)分支顯示獨(dú)立的構(gòu)建狀態(tài)卡片綠/紅一目了然。PHP 5.4 用戶還能用內(nèi)置服務(wù)器直接啟動(dòng)php sismo.php run localhost:9000然后瀏覽器訪問(wèn)http://localhost:9000/sismo.php即可。更酷的是Sismo 還暴露了 Cruise Control 格式的 XML 接口/dashboard/cctray.xmlMac 用 CCMenu、Windows 用 CCTray就能把 master 與 feature 分支的狀態(tài)直接釘在系統(tǒng)托盤(pán)上實(shí)時(shí)掌握每個(gè)分支的健康度。多分支測(cè)試的最佳實(shí)踐與注意事項(xiàng)命名規(guī)范分支越多越要起名清晰建議統(tǒng)一使用項(xiàng)目名 (分支名)格式配合getShortName()和getSubName()見(jiàn) src/Sismo/Project.php在界面上自動(dòng)拆分展示。定時(shí)兜底對(duì)于遠(yuǎn)程倉(cāng)庫(kù)可添加 crontab 定時(shí)任務(wù)如0 12 * * * php /path/to/sismo.php --quiet作為本地鉤子的補(bǔ)充。注意限制Sismo 刻意保持小巧——沒(méi)有構(gòu)建隊(duì)列如果項(xiàng)目正在構(gòu)建會(huì)忽略新提交因此高頻提交場(chǎng)景下建議優(yōu)先測(cè)試你關(guān)心的分支。多分支測(cè)試并不復(fù)雜Sismo 用一套簡(jiǎn)潔的branch語(yǔ)法就解決了 master 與 feature 分支并行監(jiān)控的難題?,F(xiàn)在就動(dòng)手配置你的第一個(gè)多分支項(xiàng)目讓每次提交都有測(cè)試護(hù)航吧【免費(fèi)下載鏈接】SismoYour Continuous Testing Server項(xiàng)目地址: https://gitcode.com/gh_mirrors/si/Sismo創(chuàng)作聲明:本文部分內(nèi)容由AI輔助生成(AIGC),僅供參考