亚洲有码Av一区二区三区_国产高清啪啪免费视频_69色视频国产_国产成人人人爆出白浆_国产精品自在线拍国_一本久久伊人热热精品无码_午夜性刺激在线看免费带字幕_助力高品质欧美狂喷水_亚洲精品日韩无码_精品无码一区二区三区蜜臀_麻豆高清国产AV_熟妇人素无码中文字幕_亚洲a级片在线观看_国产欧美日韩三区_99国产成人高清在线观看

ARTICLE DETAIL

資訊詳情

深耕商務(wù)建站與企業(yè)官網(wǎng)運(yùn)營(yíng)的一線實(shí)戰(zhàn)洞察。

Jenkins Pipeline實(shí)戰(zhàn):測(cè)試策略動(dòng)態(tài)切換,CI耗時(shí)從45分鐘降到8分鐘

Jenkins Pipeline實(shí)戰(zhàn):測(cè)試策略動(dòng)態(tài)切換,CI耗時(shí)從45分鐘降到8分鐘 聊個(gè)實(shí)戰(zhàn)項(xiàng)目。前陣子我被開(kāi)發(fā)同事問(wèn)得最多的一句話是“CI怎么又排隊(duì)了” 不是Jenkins機(jī)器不夠而是測(cè)試用例堆到一定量級(jí)之后每次合并分支都全量跑測(cè)試一跑就是四十多分鐘十個(gè)人的小團(tuán)隊(duì)光等構(gòu)建就耗掉大量時(shí)間。我當(dāng)時(shí)的想法很簡(jiǎn)單能不能讓Jenkins Pipeline根據(jù)“這次改動(dòng)到底影響什么”來(lái)自動(dòng)決定跑哪些測(cè)試這就是“測(cè)試策略動(dòng)態(tài)切換”的由來(lái)。這套方案做下來(lái)效果立竿見(jiàn)影日常分支提交的平均測(cè)試時(shí)間從40多分鐘降到8分鐘左右合并到主干前才跑完整回歸而且漏測(cè)風(fēng)險(xiǎn)并沒(méi)有明顯上升。如果你也在維護(hù)Jenkins Pipeline、被“全量測(cè)試跑不完”的問(wèn)題困擾或者剛接觸Pipeline想看看成熟的策略設(shè)計(jì)長(zhǎng)什么樣這篇內(nèi)容應(yīng)該能幫你省不少?gòu)澛?。我下面?huì)拆解設(shè)計(jì)思路、關(guān)鍵參數(shù)、Jenkinsfile核心實(shí)現(xiàn)以及我踩過(guò)的幾個(gè)坑。1. 項(xiàng)目背景與方案選型1.1 團(tuán)隊(duì)遇到的真實(shí)痛點(diǎn)先說(shuō)背景。我們的項(xiàng)目是Spring Cloud微服務(wù)架構(gòu)前端兩個(gè)倉(cāng)庫(kù)、后端六個(gè)倉(cāng)庫(kù)共用一套Jenkins。測(cè)試用例分為三層單元測(cè)試、接口測(cè)試基于RestAssured、端到端測(cè)試基于Selenium。最瘋狂的時(shí)候一次全量回歸的用例數(shù)接近四千條穩(wěn)定耗時(shí)在45到55分鐘之間。這個(gè)耗時(shí)帶來(lái)的問(wèn)題很直接開(kāi)發(fā)每次提交MRCI排隊(duì)時(shí)間越來(lái)越長(zhǎng)反饋周期從“下樓倒杯水”變成“吃頓午飯”。測(cè)試用例的執(zhí)行結(jié)果集中在最后幾分鐘才出來(lái)開(kāi)發(fā)發(fā)現(xiàn)問(wèn)題時(shí)上下文已經(jīng)切換了好幾輪。QA同學(xué)想單獨(dú)觸發(fā)某個(gè)模塊的接口測(cè)試要么手動(dòng)挑用例要么改Jenkins任務(wù)配置操作成本高且容易出錯(cuò)。我統(tǒng)計(jì)過(guò)一周的構(gòu)建數(shù)據(jù)真正需要全量回歸的場(chǎng)景其實(shí)只有兩類合并到master發(fā)版前、每晚定時(shí)巡檢。日常的feature分支和develop合并大多只影響兩三個(gè)服務(wù)模塊。但在當(dāng)時(shí)的CI配置里所有觸發(fā)都走同一條全量流水線完全沒(méi)有區(qū)分度。這個(gè)痛點(diǎn)的本質(zhì)是CI的執(zhí)行成本和變更風(fēng)險(xiǎn)不匹配。全量跑安全但浪費(fèi)不跑高效但危險(xiǎn)。動(dòng)態(tài)切換要解決的就是在兩者之間找到一個(gè)按需分配的執(zhí)行策略。1.2 方案對(duì)比為什么繼續(xù)用Jenkins Pipeline當(dāng)時(shí)也考慮過(guò)其他方案。GitLab CI在倉(cāng)庫(kù)里寫(xiě).gitlab-ci.yml和代碼同倉(cāng)庫(kù)管理很直觀但我們的Jenkins上已經(jīng)有一套權(quán)限體系、憑據(jù)管理、Agent節(jié)點(diǎn)池和構(gòu)建歷史遷移成本太高。GitHub Actions對(duì)私有倉(cāng)庫(kù)的并發(fā)數(shù)和計(jì)費(fèi)方式在當(dāng)時(shí)也不合適。自研一個(gè)測(cè)試分發(fā)Runner更不現(xiàn)實(shí)光Agent管理就夠喝一壺。所以結(jié)論是繼續(xù)用Jenkins但要把原來(lái)的“自由風(fēng)格項(xiàng)目”升級(jí)成Pipeline。為什么Pipeline適合做這件事自由風(fēng)格項(xiàng)目是圖形化配置邏輯分散在界面里一旦要加條件判斷、參數(shù)傳遞、動(dòng)態(tài)選擇測(cè)試范圍UI配置會(huì)變得極其別扭。而Pipeline本質(zhì)上是把構(gòu)建流程寫(xiě)成代碼Jenkinsfile存入代碼倉(cāng)庫(kù)具備版本管理能力。這意味著我可以在Jenkinsfile里寫(xiě)Groovy腳本來(lái)動(dòng)態(tài)計(jì)算測(cè)試策略也可以把策略邏輯抽成共享庫(kù)供多個(gè)倉(cāng)庫(kù)復(fù)用。這里我特別想強(qiáng)調(diào)一個(gè)選型心得不要為了“動(dòng)態(tài)”而把所有邏輯都寫(xiě)進(jìn)Groovy。Pipeline的script塊雖然支持任意Groovy代碼但濫用會(huì)讓Jenkinsfile變成一坨難以維護(hù)的意大利面。我的做法是Jenkinsfile只保留流程骨架策略計(jì)算邏輯單獨(dú)抽成Groovy方法必要時(shí)下沉到共享庫(kù)。這樣主流程清晰策略邏輯也能單獨(dú)測(cè)試。2. 核心設(shè)計(jì)測(cè)試策略路由2.1 定了哪幾檔策略動(dòng)態(tài)切換不是說(shuō)“每次跑什么完全隨機(jī)”而是事先定義好幾檔標(biāo)準(zhǔn)策略再根據(jù)觸發(fā)條件自動(dòng)選擇其中一檔。我最終定義了四檔第一檔冒煙測(cè)試Smoke。適用于任意分支的push觸發(fā)只跑核心鏈路用例確保服務(wù)能啟、主流程能通總耗時(shí)控制在3到5分鐘。第二檔受影響模塊測(cè)試Module。適用于feature分支提交MR時(shí)通過(guò)分析本次變更涉及的服務(wù)模塊動(dòng)態(tài)匹配關(guān)聯(lián)的接口測(cè)試和單元測(cè)試。第三檔全量回歸Full。適用于合并到master、打tag、發(fā)版前以及每晚定時(shí)任務(wù)完整跑全量用例確保發(fā)布安全。第四檔手動(dòng)指定Manual。適用于QA或開(kāi)發(fā)手動(dòng)點(diǎn)擊構(gòu)建時(shí)通過(guò)Jenkins參數(shù)選擇要執(zhí)行的模塊和測(cè)試類型這個(gè)作為兜底方案靈活度最高。為什么是四檔而不是更多我見(jiàn)過(guò)有人把測(cè)試策略細(xì)分成十幾檔結(jié)果維護(hù)成本太高最后大家都在手動(dòng)選參數(shù)。四檔覆蓋了日常開(kāi)發(fā)的主流程和特殊場(chǎng)景既保留自動(dòng)化判斷的空間又留有人工介入的口子屬于比較健康的復(fù)雜度。需要特別說(shuō)明的是檔位之間不是互斥關(guān)系。比如主分支的自動(dòng)構(gòu)建觸發(fā)了冒煙測(cè)試但同一分支上如果有手動(dòng)觸發(fā)的全量回歸參數(shù)策略計(jì)算會(huì)優(yōu)先采用手動(dòng)參數(shù)。這個(gè)優(yōu)先級(jí)邏輯在后面會(huì)具體講。2.2 四個(gè)核心參數(shù)怎么設(shè)計(jì)策略路由的本質(zhì)是參數(shù)驅(qū)動(dòng)。我在Jenkinsfile頂部定義了四個(gè)核心參數(shù)貫穿整條Pipeline參數(shù)名類型默認(rèn)值用途RUN_MODE選擇框AUTO自動(dòng)策略 / 手動(dòng)指定策略TEST_LEVEL選擇框SMOKE測(cè)試檔位SMOKE / MODULE / FULLMODULE_LIST字符串空當(dāng)檔位為MODULE時(shí)指定要測(cè)試的模塊列表逗號(hào)分隔IS_NIGHTLY布爾值false是否為定時(shí)觸發(fā)的夜間全量回歸在Jenkins Pipeline里parameters塊配置好這些參數(shù)后無(wú)論手動(dòng)構(gòu)建還是API觸發(fā)都可以覆蓋。這里的經(jīng)驗(yàn)點(diǎn)是參數(shù)要夠用但不要泛濫。早期我加了TEST_LEVEL之外還加過(guò)SKIP_UNIT、SKIP_API、RETRY_COUNT等等結(jié)果開(kāi)發(fā)同事根本不知道參數(shù)怎么選反而更依賴手動(dòng)觸發(fā)默認(rèn)行為。后來(lái)收斂成這四個(gè)參數(shù)每個(gè)參數(shù)都有明確的使用場(chǎng)景上手成本就低很多了。其中MODULE_LIST可以說(shuō)是最關(guān)鍵的一個(gè)參數(shù)。因?yàn)槟K名需要和代碼目錄、測(cè)試目錄的命名強(qiáng)一致我設(shè)計(jì)了一個(gè)約定后端服務(wù)模塊的命名統(tǒng)一使用service-xxx測(cè)試工程的目錄也按service-xxx組織。這個(gè)約定讓策略計(jì)算可以直接通過(guò)路徑匹配來(lái)反推模塊列表省掉了一張維護(hù)成本很高的映射表。2.3 策略路由的數(shù)據(jù)流理解了參數(shù)之后再看數(shù)據(jù)流就清楚了。整條Pipeline的策略路由分為三個(gè)階段第一階段是“計(jì)算策略”。Pipeline啟動(dòng)后首先進(jìn)入Init階段讀取觸發(fā)方式webhook、定時(shí)還是手動(dòng)、讀取GIT_*環(huán)境變量、讀取用戶填寫(xiě)的參數(shù)然后調(diào)用resolveTestStrategy()方法得到策略結(jié)果。第二階段是“分發(fā)執(zhí)行”。計(jì)算出來(lái)的策略結(jié)果寫(xiě)入一個(gè)Map變量例如[level: MODULE, modules: [service-a, service-b], needFull: false]。后續(xù)的Test階段通過(guò)讀取這個(gè)Map來(lái)決定執(zhí)行哪些測(cè)試任務(wù)而不是在測(cè)試任務(wù)里再重新做一次判斷。第三階段是“匯總反饋”。所有測(cè)試任務(wù)執(zhí)行完后統(tǒng)一收集JUnit報(bào)告計(jì)算通過(guò)率和耗時(shí)再根據(jù)策略信息生成向企業(yè)微信通知推送的內(nèi)容。這里有一個(gè)設(shè)計(jì)要點(diǎn)是策略計(jì)算和策略執(zhí)行必須解耦。我見(jiàn)過(guò)有的Pipeline把判斷邏輯塞進(jìn)每個(gè)stage的when條件里比如when { expression { return params.TEST_LEVEL FULL } }表面看沒(méi)問(wèn)題但一旦判斷條件復(fù)雜了多條件組合會(huì)讓when塊變得非?;逎?。我的做法是先算出一個(gè)“策略對(duì)象”后續(xù)所有節(jié)點(diǎn)都只消費(fèi)這個(gè)對(duì)象邏輯清晰且便于打日志調(diào)試。3. 實(shí)操過(guò)程與關(guān)鍵實(shí)現(xiàn)3.1 Jenkinsfile整體骨架直接看代碼。以下是簡(jiǎn)化后的Jenkinsfile骨架包含了參數(shù)定義、策略計(jì)算和執(zhí)行分發(fā)pipeline { agent { label linux-test } options { timestamps() timeout(time: 2, unit: HOURS) buildDiscarder(logRotator(numToKeepStr: 30)) disableConcurrentBuilds() } parameters { choice(name: RUN_MODE, choices: [AUTO, MANUAL], description: 自動(dòng)策略或手動(dòng)策略) choice(name: TEST_LEVEL, choices: [SMOKE, MODULE, FULL], description: 手動(dòng)指定測(cè)試檔位) string(name: MODULE_LIST, defaultValue: , description: 測(cè)試模塊列表逗號(hào)分隔) booleanParam(name: IS_NIGHTLY, defaultValue: false, description: 是否夜間定時(shí)構(gòu)建) } environment { PROJECT_NAME mall-platform BASE_REF develop TEST_RESULT_DIR ${WORKSPACE}/build/reports } stages { stage(初始化) { steps { script { STRATEGY resolveTestStrategy() echo 當(dāng)前測(cè)試策略: ${STRATEGY} } } } stage(構(gòu)建) { steps { echo 開(kāi)始構(gòu)建服務(wù)... // 實(shí)際構(gòu)建過(guò)程例如 mvn clean package -DskipTests } } stage(測(cè)試) { parallel { stage(單元測(cè)試) { when { expression { return shouldRunUnitTest(STRATEGY) } } steps { script { // 執(zhí)行選中模塊的單測(cè) } } post { always { junit testResults: **/target/surefire-reports/*.xml, allowEmptyResults: true } } } stage(接口測(cè)試) { when { expression { return shouldRunApiTest(STRATEGY) } } steps { script { // 執(zhí)行選中模塊的接口測(cè)試 } } post { always { junit testResults: **/target/failsafe-reports/*.xml, allowEmptyResults: true } } } stage(端到端測(cè)試) { when { expression { return STRATEGY.level FULL } } steps { script { // 執(zhí)行E2E測(cè)試 } } post { always { junit testResults: **/build/reports/e2e/*.xml, allowEmptyResults: true } } } } } stage(通知) { steps { script { notifyWechat(STRATEGY) } } } } }骨架里的STRATEGY變量是全局的在頂層通過(guò)def STRATEGY null聲明然后在初始化階段用script塊賦值。這利用了Groovy腳本在Jenkins Pipeline中的全局變量傳遞機(jī)制。3.2 策略計(jì)算邏輯怎么寫(xiě)策略計(jì)算的核心方法是resolveTestStrategy()。它的輸入是參數(shù)、分支名、變更文件列表輸出是一個(gè)Map。def resolveTestStrategy() { def branch env.GIT_BRANCH ?: env.BRANCH_NAME def level SMOKE def modules [] def needFull false // 手動(dòng)策略優(yōu)先 if (params.RUN_MODE MANUAL params.TEST_LEVEL ! SMOKE) { level params.TEST_LEVEL if (params.MODULE_LIST?.trim()) { modules params.MODULE_LIST.split(,).collect { it.trim() } } if (level FULL) { needFull true } return [level: level, modules: modules, needFull: needFull] } // 夜間定時(shí)構(gòu)建直接全量 if (params.IS_NIGHTLY) { return [level: FULL, modules: [], needFull: true] } // 主干分支策略master 和 release 分支合并前全量 if (branch master || branch release) { return [level: FULL, modules: [], needFull: true] } // 非主干分支先看變更文件列表再?zèng)Q定是冒煙還是模塊測(cè)試 def changeFiles getChangedFiles() if (changeFiles.isEmpty()) { return [level: SMOKE, modules: [], needFull: false] } def affectedModules parseModulesFromChangeFiles(changeFiles) if (affectedModules.size() 4) { // 改動(dòng)的模塊太多說(shuō)明是大范圍變更退回全量更安全 return [level: FULL, modules: [], needFull: true] } if (affectedModules.size() 0) { return [level: MODULE, modules: affectedModules, needFull: false] } return [level: SMOKE, modules: [], needFull: false] }這里面有兩個(gè)輔助方法值得單獨(dú)說(shuō)。getChangedFiles()的實(shí)現(xiàn)依賴Jenkins的changeSets。在多分支Pipeline里可以在script塊中直接讀取當(dāng)前構(gòu)建的變更集例如def getChangedFiles() { def files [] if (currentBuild.changeSets) { currentBuild.changeSets.each { changeSet - changeSet.items.each { item - item.affectedFiles.each { file - files.add(file.path) } } } } return files }這里有個(gè)坑currentBuild.changeSets只有在“分支被重新掃描后觸發(fā)構(gòu)建”的場(chǎng)景下才有值比如MR事件觸發(fā)的構(gòu)建。如果是定時(shí)構(gòu)建的第一次執(zhí)行變更集為空所以策略會(huì)回退到冒煙測(cè)試。這其實(shí)符合預(yù)期——定時(shí)構(gòu)建我本來(lái)就設(shè)置了IS_NIGHTLY參數(shù)來(lái)指定全量。parseModulesFromChangeFiles()的思路就是根據(jù)目錄前綴匹配模塊名。例如變更文件是service-order/src/main/java/...那么模塊名就是service-order。如果變更文件是common-utils/src/main/java/...那么模塊名歸入common-utils但這屬于公共模塊我會(huì)在匹配時(shí)把它忽略因?yàn)楣材K變更需要走全量。這個(gè)邏輯看似簡(jiǎn)單但有一點(diǎn)特別重要當(dāng)公共模塊被大量改動(dòng)時(shí)只跑關(guān)聯(lián)模塊是不夠的。所以我在策略里加了個(gè)閾值規(guī)則——當(dāng)受影響模塊數(shù)大于等于4個(gè)時(shí)升級(jí)為FULL策略。這個(gè)閾值是從兩次線上事故中總結(jié)出來(lái)的第一次公共模塊改動(dòng)只跑了兩個(gè)服務(wù)的接口測(cè)試結(jié)果牽連到第三個(gè)服務(wù)第二次是前端依賴升級(jí)后端模塊列表解析出來(lái)只有3個(gè)但數(shù)據(jù)庫(kù)連接池的公共配置被改了直接回歸暴露了配置錯(cuò)誤。定成4是折中的結(jié)果你們可以根據(jù)自己服務(wù)數(shù)量的三分之一量級(jí)來(lái)調(diào)整。3.3 各stage怎么消費(fèi)策略策略計(jì)算完了后面每個(gè)stage都需要消費(fèi)策略結(jié)果。消費(fèi)方式有兩種我在項(xiàng)目里都用到了。第一種是when條件判斷。比如端到端測(cè)試只有在STRATEGY.level FULL時(shí)才執(zhí)行單元測(cè)試和接口測(cè)試在策略為SMOKE或MODULE時(shí)也可能會(huì)執(zhí)行。具體判斷邏輯我封裝成了shouldRunUnitTest()這樣的方法def shouldRunUnitTest(Map strategy) { if (strategy.level FULL || strategy.level MODULE) { return true } if (params.RUN_MODE MANUAL params.TEST_LEVEL SMOKE) { return true } return false }第二種是動(dòng)態(tài)拼接測(cè)試命令。在接口測(cè)試stage里策略計(jì)算出的modules列表要轉(zhuǎn)成Maven或Gradle的命令行參數(shù)if [ ${STRATEGY.modules.size()} -gt 0 ]; then MODULES_PARAM$(echo ${STRATEGY.modules.join(,)} | tr , ) echo 本次接口測(cè)試模塊: ${MODULES_PARAM} # 實(shí)際執(zhí)行例如 # mvn test -pl $MODULES_PARAM -DtestApiTestSuite else echo 策略未指定模塊跳過(guò)接口測(cè)試 exit 0 fi這段邏輯放在script { sh ... }里通過(guò)Groovy的字符串拼接把策略信息傳給shell腳本。有一個(gè)細(xì)節(jié)Groovy里的List變量在傳給sh時(shí)不能直接當(dāng)作shell數(shù)組使用必須先在Groovy里拼成字符串再接進(jìn)shell腳本否則容易出現(xiàn)org.jenkinsci.plugins.scriptsecurity.sandbox相關(guān)的序列化異常。3.4 測(cè)試結(jié)果匯總與通知測(cè)試跑完結(jié)果不能白跑。我每次構(gòu)建結(jié)束都會(huì)做三件事收集JUnit報(bào)告、提取測(cè)試摘要、推送企業(yè)微信通知。JUnit報(bào)告收集在Jenkins Pipeline里就是junit方法注意要設(shè)置allowEmptyResults: true。如果不設(shè)置某個(gè)stage因?yàn)椴呗蕴^(guò)了導(dǎo)致沒(méi)有生成XML報(bào)告Pipeline會(huì)直接報(bào)錯(cuò)No test reports found。這個(gè)參數(shù)很多剛用Pipeline的人容易漏我剛開(kāi)始也在這上面卡了兩次。測(cè)試摘要可以通過(guò)currentBuild.testSummary這類插件提供的能力來(lái)獲取。比如在always塊里把測(cè)試總數(shù)、失敗數(shù)、跳過(guò)數(shù)寫(xiě)進(jìn)環(huán)境變量然后傳給通知腳本post { always { script { def summary currentBuild.testSummary ?: 無(wú)測(cè)試摘要 env.TEST_SUMMARY summary } } }企業(yè)微信通知我用的是httpRequest插件調(diào)用Webhook機(jī)器人接口。通知內(nèi)容里我會(huì)特意帶上策略信息和主要模塊列表【CI通知】mall-platform #123 構(gòu)建成功 分支feature/order-v2 測(cè)試策略MODULE (service-order, service-payment) 測(cè)試結(jié)果通過(guò) 128失敗 2已關(guān)聯(lián)到缺陷單 耗時(shí)12分30秒 構(gòu)建地址${BUILD_URL}為什么強(qiáng)制帶策略信息因?yàn)閳F(tuán)隊(duì)里其他人看到通知時(shí)需要知道“這次為什么只跑了這幾個(gè)模塊”。如果你不帶模塊信息后面出了問(wèn)題開(kāi)發(fā)會(huì)直接來(lái)質(zhì)問(wèn)你為什么漏測(cè)。帶著策略和模塊列表整個(gè)CI過(guò)程就變得可審計(jì)、可追溯了。4. 踩坑記錄與排查技巧4.1 常見(jiàn)問(wèn)題速查表動(dòng)態(tài)切換策略這套方案我前后迭代了四五個(gè)版本踩過(guò)的坑不算少。整理幾個(gè)最典型的供你排查時(shí)參考問(wèn)題現(xiàn)象根本原因解決辦法策略一直是SMOKE模塊測(cè)試從不觸發(fā)currentBuild.changeSets為空獲取變更文件失敗檢查webhook觸發(fā)類型MR事件必須由push事件攜帶變更列表觸發(fā)而不是依賴repository_dispatchJasonfile里執(zhí)行sh mvn test但找不到模塊工作目錄不是倉(cāng)庫(kù)根目錄或Agent上WORKSPACE路徑包含空格統(tǒng)一指定dir(${WORKSPACE}/backend)包裹執(zhí)行并在agent上檢查路徑并發(fā)構(gòu)建相互搶測(cè)試資源多個(gè)feature分支同時(shí)觸發(fā)接口測(cè)試共用同一批服務(wù)端口對(duì)共享測(cè)試環(huán)境加disableConcurrentBuilds()同時(shí)區(qū)分獨(dú)立環(huán)境的Agent標(biāo)簽手動(dòng)參數(shù)不生效系統(tǒng)總是自動(dòng)計(jì)算策略when條件的優(yōu)先級(jí)高于手動(dòng)參數(shù)邏輯參數(shù)還沒(méi)賦值就被過(guò)濾在resolveTestStrategy()里優(yōu)先判斷params.RUN_MODE MANUAL并確保parameters塊在agent之前定義JUnit報(bào)告統(tǒng)計(jì)不準(zhǔn)失敗用例不顯示測(cè)試報(bào)告生成路徑被多級(jí)目錄嵌套junit匹配規(guī)則太寬精確到具體目錄backend/**/target/surefire-reports/*.xml并檢查是否是用了allowEmptyResults掩蓋了路徑錯(cuò)誤定時(shí)構(gòu)建走了FULL策略但郵件通知里沒(méi)有策略信息env.TEST_SUMMARY在sh腳本里被覆蓋Groovy變量作用域沖突使用全局變量STRATEGY作為唯一數(shù)據(jù)源不重復(fù)賦值給環(huán)境變量構(gòu)建卡在策略計(jì)算階段getChangedFiles()在掃描大量文件時(shí)性能很差或Pipeline并發(fā)掃描導(dǎo)致死鎖限制變更文件數(shù)量超過(guò)一定量級(jí)直接返回全量策略4.2 幾個(gè)容易被忽略的細(xì)節(jié)除了上面表格里的問(wèn)題還有幾個(gè)經(jīng)驗(yàn)值得展開(kāi)講。第一個(gè)是Agent標(biāo)簽管理。我的測(cè)試Agent分為兩類linux-build和linux-test。構(gòu)建和測(cè)試分開(kāi)跑避免Maven編譯進(jìn)程搶占測(cè)試進(jìn)程的資源。測(cè)試Agent用restartOrdinarily方式調(diào)度如果該Agent上的測(cè)試服務(wù)版本不對(duì)經(jīng)常出現(xiàn)端口沖突或者污染上一次的測(cè)試環(huán)境。后來(lái)我在構(gòu)建腳本里強(qiáng)行執(zhí)行mvn clean并在每次構(gòu)建前清空${WORKSPACE}/build目錄才把這個(gè)問(wèn)題壓下去。第二條是不要在每個(gè)stage里重復(fù)計(jì)算策略。因?yàn)槲矣龅竭^(guò)這種情況Pipeline前面的STRATEGY變量在stage里被誤改或者并行stage里去訪問(wèn)全局變量時(shí)Groovy沙箱的綁定不一致直接導(dǎo)致NullPointerException。后來(lái)我規(guī)定STRATEGY只能由初始化階段寫(xiě)入后續(xù)所有stage都只讀不允許更新。代碼審查時(shí)這也成了一條規(guī)定。第三條是超時(shí)和重試機(jī)制。測(cè)試任務(wù)掛起是最煩人的。我在options里加了全局timeout同時(shí)在接口測(cè)試stage上還單獨(dú)加了retry(count: 2)。你可能會(huì)問(wèn)全量回歸那么長(zhǎng)超時(shí)設(shè)兩小時(shí)夠不夠我的經(jīng)驗(yàn)是先設(shè)一個(gè)保守時(shí)間跑兩周觀察實(shí)際耗時(shí)再往下調(diào)整。盡量不要一開(kāi)始就設(shè)很緊的超時(shí)否則一個(gè)慢用例就會(huì)讓整個(gè)構(gòu)建莫名其妙失敗。第四條關(guān)于jenkins可用環(huán)境變量。Pipeline里的env有很多變量來(lái)自插件和構(gòu)建配置比如BRANCH_NAME、GIT_COMMIT、CHANGE_TITLE、CHANGE_ID。我一開(kāi)始用GIT_BRANCH判斷分支后來(lái)發(fā)現(xiàn)它和BRANCH_NAME的表現(xiàn)不一樣多分支Pipeline里應(yīng)該優(yōu)先用BRANCH_NAME。這個(gè)小坑不踩一次根本不知道Jenkins的參數(shù)命名這么有“歷史包袱”。5. 這套方案的邊界與后續(xù)擴(kuò)展測(cè)試策略動(dòng)態(tài)切換不是萬(wàn)能的。它的核心假設(shè)是“變更影響范圍可以預(yù)測(cè)”對(duì)于模塊邊界清晰的中型項(xiàng)目這個(gè)假設(shè)成立對(duì)于那種一次提交改動(dòng)幾十個(gè)文件、尤其是公共底層模塊頻繁改動(dòng)的大型單體策略計(jì)算容易失效反復(fù)觸發(fā)全量回歸后反而不如直接把全量跑拆成并行分片來(lái)得實(shí)惠。我目前已經(jīng)在嘗試的后續(xù)擴(kuò)展有兩個(gè)方向。一個(gè)是自動(dòng)失敗用例重跑。全量回歸中偶爾會(huì)有幾個(gè)用例因?yàn)榄h(huán)境抖動(dòng)失敗但并非真實(shí)缺陷。我在策略里新增了“失敗用例自動(dòng)重跑一次仍然失敗才標(biāo)記為真失敗”的邏輯這樣有效減少了人工確認(rèn)的工作量。另一個(gè)方向是結(jié)合AI分析測(cè)試影響。Jenkins已經(jīng)支持AI Agent插件通過(guò)分析代碼變更的調(diào)用鏈和測(cè)試用例之間的關(guān)聯(lián)關(guān)系自動(dòng)生成受影響模塊列表。現(xiàn)在我的parseModulesFromChangeFiles()還是基于目錄約定的靜態(tài)匹配未來(lái)如果能接入AI分析策略的準(zhǔn)確性和精細(xì)度還能再提升一個(gè)臺(tái)階。不過(guò)我要潑一盆冷水動(dòng)態(tài)切換策略這件事真正的難點(diǎn)不在于代碼怎么寫(xiě)而在于團(tuán)隊(duì)是否信任這套策略。要讓開(kāi)發(fā)放心測(cè)試結(jié)果和策略判斷必須透明可查要讓QA放心手動(dòng)指定策略必須始終兜底要讓團(tuán)隊(duì)放心降級(jí)規(guī)則例如公共模塊改動(dòng)量過(guò)大就直接全量必須清晰寫(xiě)在文檔里。CI的本質(zhì)是團(tuán)隊(duì)協(xié)作的潤(rùn)滑劑如果為了省時(shí)間而犧牲了信任那這個(gè)方案走不遠(yuǎn)。我做這套方案最深的感受是Jenkins Pipeline的強(qiáng)大之處從來(lái)不在于語(yǔ)法多花哨而在于它能讓你把“構(gòu)建流程”當(dāng)成一個(gè)真正的軟件工程來(lái)設(shè)計(jì)。參數(shù)、策略、測(cè)試、通知每一層都可以獨(dú)立演進(jìn)穩(wěn)定的底層支撐靈活的頂層。如果你也想在團(tuán)隊(duì)里做類似的事建議從一檔全量、一檔冒煙開(kāi)始跑通之后再加模塊級(jí)測(cè)試一步步把復(fù)雜度控制住。測(cè)試策略動(dòng)態(tài)切換說(shuō)到底不是技術(shù)問(wèn)題而是“如何讓CI更懂業(yè)務(wù)”的問(wèn)題。
返回列表
PREV
查看更多資訊
NEXT
返回資訊列表
精品久操| 亚洲无线码一区国产欧美国| 屌妞视频久久久久久久久久久久| 操B在线观看| 欧美日韩欧美| 美女黄页网站| 91模特在线观看| 亚射在线| 欧美内射少妇| 久久极品伊人| 丁香六月婷婷久久综合| 日本网色| 中文字幕黄色片| 国产无码三级视频在线观看| 九月伊人中文字幕| 精品少妇高潮久久| 9美女超碰在线免费观看| 亚洲天堂第一页| 91久操| 成年人三级黄色片视频| 超碰精品日韩欧美国产| 亚洲熟女av中文字幕| 亚洲欧美国产va在线| 四虎AV无码| 色九月| Blackedraw视频一区二区| 国产高清成人免费视频| 天天看天天日天天操| 久久后入制服| 亭亭在线资源| 亚洲精品久久久久久| 操死我了嗯嗯嗯| 久久不卡一区二区| 亚洲成人妻日韩在线| 精品久久99| 9/A片| 丁香六月综合激情| 黄色小视频日本txt| 欧美亚洲特P| 九久9精品| 亚洲福利中文字幕在线| 尹人大香蕉视频在线| 国产精品青草综合久久| 欧美不卡在线美女| 五月婷婷hd| 综合网~91综合网| 天天操狠狠日夜夜干超大胆开放com大香蕉视频在线观看 | 亚洲国产精品久久久久久久久久| ji熟女.com| 欧美A片中文字幕| 欧美激情在线观看视频| 上特色A在线| 久久一二三四五六七八九区| 国产毛片片精品天天看视频| 国产资源中文字幕在线| 久久亚洲AV无码专区国产精品| 日韩性爱毛片操骚逼| 国产黄色视频久久| 无码外流操逼视频| 2019天天干天天操| 久久久久久精品免费看A级| 日本东京热加勒比久久| 超碰99在线观看| 91久久久久久久久18| 一个人免费HD91视频| 丝袜熟女一区二区三区| 国产一区二区视频在线播放| 婷婷三区| 婷婷五月天无码| 亚洲成人一二三区| 好爽免费视频,| 久久久内射良家| 中文字幕色AV| 东京热一区二区中文字幕| 女性喷水高潮在线观看| 乱伦日本色图AⅤ| 九九无码视频| 午夜天堂精品久久| com 首页 18岁 禁区 女优 免费 精选 同城| 丝袜高跟澳门91视频| 大但人体久久久久| 中文字幕乱亚洲美女精品一区| 国产 日韩 欧美一区| 乱伦1色页| 乱色视频中文字幕| 中文字幕版| 九九九精品一区二区无码| 天天综合网亚洲综合网| 91美女在线观看| 久操网视频| 综合色播| 久久久久久人| 国产精品久久久久亚洲av| 天天干天天做| 国产日韩中文字幕欧美| 亚洲人妻精品一区二区| www.亚洲黄色| 国产精品乱人伊人网| 91成人国产综合久久精品蜜月| 超碰社区97| 久久国产AⅤ| 可以在线观看AV的网站| 亚洲中文制服诱惑| 99热伊人| 亚欧国产无码精品在线| 热久日综合| 97精品久久| 久久久久国产精品片区无码直播| 五月天色电影| 999999精品| 五月综合婷婷久久网站| 91爰爱欧美| 中文字幕蜜乳av| 色婷网| 免费97视频| 人人操人人爽人人操人人| 欧美丰满熟妇XXXX性ppX人交| 亚州精品丝袜-不卡成人免费| 久久久精品,3| 久久久久亚洲Aⅴ无码| 内射中出日韩在线观看视频| 日韩精品亚洲一二三| 成人三级片无码| 久插综合| 欧美呦呦性爱| 级品肉射| 无码WWW免费视频网站| 日本一区二区三区精品| 国产精品久久久久久久久久久久久久吹 | 欧美综合 站| 国产精品99精品视频网站| 麻豆区99999| 日韩欧美性爱电影在线观看| 国产精品熟女AV中文字幕在线播放| 97色操| 99九九久久| 欧美日韩小说| 久久婷婷五月综合| 综合影院永久入口国产| 老熟女91av| 日韩国产精品人妻无码久久久| 五月天大香蕉| 99rre在线精品99re8| 国产尹人在线视频免费| 欧美 亚洲| 9久久精品| 久久伊人影院| 一区二区久久天天干狠狠| 大学生美女口爆| 野狼激情网| 极品销魂美女一区二区| 97超碰超欧美。| 在线无码操| 97爱爱官网| 五月丁香婷婷啪啪| 极品白嫩美少妇在地板上位骑射淫水泛滥| 啊啊啊啊视频免费| 岛国大片国产| 快播电影网日韩新片| 狠狠穞A片一區二區三區| 91亚洲在线| 国产精品视频播放| 久久亚洲婷婷| 国产成人拍国产亚洲精品| 插老姨肥穴| 亚洲一区二区三区AV无码 | 免费av高清无码| 国桃视频产巨乳精品一区二区在线| 最近2019中文字幕国语免费版 | 国产精品熟女乱伦| 中文字幕天堂在线| 久久久精品中文字幕麻豆| 丰满的三级少妇欧美久久久| 青青色在线观看| 亚洲限制级在线| 亚洲精品人妻在线| 天堂性色| 超碰社区97| 天天日日本| 色狠狠 - 百度| 亚洲熟女人妻中文字幕一区二区 | 久久永久无码人妻视频| 色香91| 爱爱60秒免费视频| 久久国内| 久操91视频| 婷婷五月天色网| 欧美老妇女内射网址| 大香蕉综合网| 久操不卡视频| 亚洲国产ⅴ高清在线观看| 欧美姓爱综合网| 日韩国产十八禁| 综合熟女| 天天干夜夜一操| dy888午夜老子影视达达兔| 97一区二区蜜臀| 欧洲色色| 蜜乳av首页| 一本精品日本在线视频精品| 亚洲男人天堂2017| 国内精品久9| 久久亚洲熟妇在线视频| 久久久久久久 九九九九九九九| 91干熟女| 国产高清成人mv在线观看| 久久亚洲中文字幕视频| 91国模| 国产激情在线| 欧美精品,四区。五区| 色天堂综合| 成人熟女视频一区二区三区| 国产高清1234区| av资源在线播放天堂| 园内精品自拍视频在线播放| 亚洲无码超碰免费| 成人五级久久| 国产精品分类在线观看| 综合伊人网12色| 91熟女丨91老女人| 国产福利视频精品视频| 国产91亚洲精品一区二区三区| 日本韩国五十路六十路七十路老熟女作爱视频网站| 伊人在线大香蕉视频久久| 美女大乳久久久久久久女人18| 91美女中出| 久操婷婷| 亚洲影视综合网| 亚洲日韩一区电影| 国产伊人自拍| 亚洲色性情三级| 精品久久大胆人体| 四虎在线免费视频| 密臀成人视频久久久| 99热线麻豆| 桑老女人九区| 综合 亚洲 欧美| 无码一区免费在线不卡| 96久久精品一二三区色欲| 久久精品国产亚洲AV高级北京| 久久夜黄色无码A级大片| 艹精品| 国产高清26uuu| AV免费在线播放一区| 97福利视频| 国内91熟女人妻丝袜天天精品视频在线| 欧美另类色图片| 亚洲精品一二三四区| 婷婷五月天久久精品视频一区二区三区| 2025亚洲男人天堂| 欧美国产操逼| 啊啊啊爽爽| 立川理惠被中出无码| 岛国片在线视频网站| 久久精品亚洲成a人天堂| 成功精品影院| 美女AV一区二区| 九九九九九精品视频| 伊人网免费视频| 中文字幕一二区二三区人妻专区| 午夜精品视频777| 夜夜操狠狠操| 99 国产丝袜在线| 综合久久2017| 成人性爱高清视频免费看| 国产 码在线成人网站| 欧美三级免费伊人| 麻豆一区二区三区在线看| 国产黄色剧情影片麻豆免费播放| 奇米狠999| 麻豆蜜桃视频在线观看 | 欧美东京热精品A∨| 中文字幕 人妻不满 在线视频| 亚洲AV资源| 校园春色AV天堂| 黄色大片免费在线| 天堂资源欧美| 999久久久国产精品| 中文字幕精品一区欧美| 日韩AV电影网站| 色踪合AV| 国产乱伦亚洲色图高清无码| 好吊色一区| 91男人天堂网| 国产精品久久久久综合| 性爱AV天堂| 国产三级片在线观看| 国产视频不卡在线观看| 欧洲小说色图视频另类| 一个人免费视频观看在线WWW| 99精品在线观看| 九一性生活免费视频| se吧提供91精品国产91久久久久久 | 中文久久96| 精品九九九九| 夜夜操91744565| 97日韩超碰超碰中文字幕| 九月丁香综合网| 欧美日韩亚洲天堂网| 97人人夜| 亚洲另类色图片| 99re免费| 9/A片| 97干在线| 97精品视频免费| 男啪女色黄无遮挡免费观看| 日韩中文字幕av在线播放| 欧美亚洲天堂| 欧洲无码一区二区| 女生91网站| 人妻啊啊人妻啊| 亚洲欧美黄| 激情网五月天| 日韩啊V| 国产精品久久久蜜臀| 精品无码一区二区三区色欲| 六月丁香五月婷婷| 91丰满| 欧美99| 欧美 亚洲 在线| 欧美一级色| 久热最新在线杭州| 亚洲熟女国产综合另类| 可以在线观看的黄色网址| 98福利在线视频| 久久99午夜精品一区人妻| 国产精品一区二区麻豆| 91无码中出人妻视频| 日韩欧美传媒一区国产| 一个人在线看的黄色电影网站| 一二三区操逼国产91| 人妻在线臀日韩| 免费一级性爱久久| 成人情色综合网| 中文字幕在线日亚州9| 欧美色图第一页| 欧洲天天在线| 超碰在线观看av不卡| 欧美日韩国产人人| 乱日视频| 97在线精品| 搡老女人老熟女91老熟女综合网| 宅男91视频在线播放| 黄视频免费| 中文字幕精品亚洲熟女| 欧美国产日韩清纯唯美 | 国产农村妇女精品1区二区| 在线免费观看日韩一区| 亚洲超碰综合网| 久久黄色网址| 国内毛片国产专区二| 中文字幕一区二区三区50路| 久久久精品一区二区| 91国产精品在线看| 亚洲无吗在线视频| 人人么人人操| 九九九一二三| 另类欧美| 欧美视频激情久久久久久| 一区在线国产播放| 视频在线观看免费一区二区三区| 91久久青青草原精品| 亚洲熟妇综合久久久久久| 美女露胸露奶头| 日韩精品中文字幕二区| 人人操人人搞人人草| 91老熟妇| 九久精品| 校园春色亚洲色图| 玖玖无码超碰| 中国的操老妇女| 久久久久久久久久久久久久久乱码 | 激情综合97| 乳欲人妻办公室奶水| 欧美天天弄| 欧美日本天堂| 好爽免费视频,| 伊人青青草久久| 日本精品一区三区| 伊人91| 一个人免费HD91视频| 欧美偷拍区| 强被迫伦姧在线观看无码网站| 淫纸中9区| 亚洲天堂久| 99re99视频在线免费观看| 欧美综合97www| 五月综合久久| 色丁香五月婷婷| 超碰在线99| 欧美一级做a爰片免费视频| 亚洲美女自拍偷拍视频| 极品尤物女神在线观看| 无码WWW免费视频网站| 日韩无码精品综合久久| 欲香欲色| 天天干天天燥| 黑人无码一区二区| 欧美人妻一区| 亚洲aV性爱| 久久艹逼视频| 婷婷尹人大香蕉免费| 91啪啪视频| 亚洲欧洲综合视频在线| 啊啊啊啊啊啊在线看| 91久久国产综合久久| 国产人妻精品久久久一区二区三区 | 免费的很黄很污的全部视频| 2017人人操,人人摸| 欧美久久人妻少妇一区二区| 欧美人人天天网| 久久久久ab| Aa东京男人的天堂| 久啪视频| 操操操五月天婷婷丁香影院| 高清国产成人无码| 日本熟女中文| 男人天堂站| 骚逼一区二区| 天天性射网| 91日韩国产欧美亚洲另类精盘州至城都| 免费在线视频97| 亚洲黑人在线| 国产精品激情久久久久久久| 99亚洲天堂| 国产原创自拍| 99蜜桃臀亚洲成人在线观看| 国产精品大屁股999| 伊人久久国产免费观看视频| 狠狠躁天天躁日日躁| 91黑丝操| 亚洲av噜噜噜噜噜噜| 免费观看性欧美一级| h无码动漫在线观看| 男人天堂一区二区| 91成人社区| 亚洲 欧美 第一页| 国产美女在线精品免费看| 乱伦AVxx| 97欧美精品综合| 日韩欧美天堂| 囯戸精品高潮呻吟旡码| 操逼1区| 久久婷婷国产一区二区色| 91爰爱欧美| 2017天天操天天日| 国产日韩欧美中文在线播放| 精品久久一区二区三区四区五区| 精品一国2| 亚洲国产97| 久久夜黄色无码A级大片| 天天弄天天操| 四虎影视国产精品| 中文字幕乱码人妻二区三区| 亚洲情色电影网| 男人的天堂三级| 成人性生活高清视频在线播放| 久久精品国产免费观看99| 97在线视频网站| 一起草日韩| 春色校园综合网| 天天天干977| 岛国艾薇凹凸视频天堂| 亚洲有码第一页| av爱爱爱| 国产suv精品一区二区四区999| 成年在线视频日本亚洲在线视频区精品江靖宇公司 | 国产67194| 欧美亚洲美少妇一区二区| 奇米四色网| 看看小穴| 亚洲国产综合视频| 色情成人五月天| 日韩欧美中文字亚洲慕| 蜜桃av综合网发布| 精品欧美日韩在线观看| 欧美强奸乱能| 午夜精品人妻二区三区| 久久精品国产亚洲AV高级北京| 色诱avtt| 天天色,天天干,天天干| 色色综合97| 久久亚州精品成人Av无| 天天舔九色婷婷| 青娱乐福利99| 蜜臀亚洲中文| 岛国片在线播放| 色偷偷色偷偷欧美日韩| 18禁精品网站在线看| 久久草视频污视频| 日本一区二区成人在线| 久久久免费高清中文视频| 亚洲精品第一| 亚洲九九视频| 女同亚洲欧美一二三区久久电影| 一起草视频在线| 国产女人高潮视频| 国产91福利小视频在线观看| 中文字幕AV片| 免费久久精品麻豆一区二区av| 99热线麻豆| 亚洲AV无码天美传媒一区| 久久狠狠色噜噜狠狠狠狠97| 欧亚第一综合网| 岛国毛片在线观看免费| 欧美专区17页| 狼天天狼天天大香蕉| AV乱伦国产| 人妻黑丝袜电影| 亚洲 欧美 手机在线观看| 亚洲 欧美 综合 91| 婷婷五月天成人| 国内毛片热久久思思热| 操曰本熟女| 99视频自拍| 91社区伊人| 男人的天堂久久狠| 99热精品在线观看| 久久精品午夜国产亚洲AV无码| 手机久操欧美综合色码| 色噜噜综合网| 丰满人妻aA一区二区三区| 天天操美美| 欧洲天天在线| 色五月网址| 亚洲国产成人精品999| 欧美色图97| 欧美性天天影视| 黑人白女精品一区| 亚洲欧美日韩不卡人妻| 麻豆成人av| 日韩AV片| 一区三区啪啪| 国产精品人人爽人人做可爱福利| 久久亚洲欧美一区二区三区-亚洲国产精品第一区二区 | 一个人免费视频观看在线WWW| 狠狠做深爱婷婷久久二区| 九九这里只有精品| 超碰人人超在线观看| 最新亚洲黄色免费电影| 在线天堂资源亚洲| 婷婷久草| 天天夜夜久久| 欧美性爱十八禁| 69少妇一区二区| av中亚| 在线播放中文字幕| 午夜福利在线合集| 97在线欧洲| 天天日少妇逼AV| 女人双腿搬开让男人桶| 久久透逼视频| 国产美女在线精品免费看| 97欧美色| …中文字幕亚洲乱,97人妻无码费视…| 天天综合网国产| 日韩不卡毛片Av免费高清| 99在线无码精品秘 入口黑人 | 国产精品久久发布| 嗯啊不要在线| 天天爽天天爽| 啊啊啊啊嗯嗯嗯用力好爽 | 麻豆黄色五月天| 天天做天天爱天天爽| 粉嫩AV一区夜夜嗨| 东北女人av| 天天欧美欧美亚洲网| 99久在线精品99re8| 久久久久成人亚洲国产| 极品尤物自安慰| 亚洲熟女性高潮久久久| 少妇无码av专区线| 久久久久久亚洲中文| 极品欧美一区二区三区| 永久免费av无码网站国产app | 色婷婷综合视频| a在线观看| av资源在线播放天堂| 国产版a级片直播在线| 无码视频黄色网战| www99热| 国产毛片精品一区二区色欲黄A片| 国产67194| 日韩AV电影网站| 久久av色| 无卡一区=区| 亚洲双插| 国产精品剧情| 日本成人A片网站| 顶级丝袜熟女一区二区三区| www黄片免费看com| 啊视频在线| 91狠婷| 成人色女网| 丁香7月婷婷| 91制服丝袜| 大学生美女口爆| 久久久一区二区三区三州| 超碰在线观看av不卡| 久久鲁干| 熟女丝袜视频| 日本好吊色视频| 午夜亚洲| 无码高清操逼网址| 插穴性爱视频在线观看| 97电影院超碰| 天天看高清麻豆| 伊人久操| 精品久久在线区一区| 久久久网一区| 97国产|免费| 欧美福利视频啊啊啊啊| 中文字幕性感少妇av| 婷婷香蕉欧美在线一区二区三区| 中文字幕-区二区三区四区视频中国| 日韩伦理久 久久 清纯| 99只有精品| 91日韩国产欧美亚洲另类精盘州至城都| 91无码西班牙视频在线| 久久精视频美日韩在线视频| 久悠悠av| 久久精品成人| 日熟女| 欧美夜夜狠| 走光一区92下载| 国产真实子伦对白| 日韩性爱1级片视频| 日本不卡三级网在线播放| 欧美最大综合网| 凹凸视频在线一区二区| 99热欧美| 安微少妇操BBB| AV在线性爱| 大鸡巴久久久| 97欧美资源| 欧美日本国产日韩激情视频| 第二页中文字幕| 久久久无码精品人妻二区| 激情综合网五月婷婷五月天| 99九九久久| 欧美色偷偷| 国产一级片| 久久是精品| 国产一级特黄大片处女| 亚洲麻豆精品二区三区| 综合网97| 欧美一级久久久久久久大片动画| 欧美香蕉视xxx| 91熟女视频| 五月色综合| 四虎av在线| 久久久精品国产亚洲AV无码| 人妻天天爽夜夜爽2| 青青操狠狠撩| 日本东京热大香蕉a片| 2023天天操夜夜操| 99re不伦| 久久亚洲国产成人| 97综合在线观看| 美女91在线| 黄色网址久久精品欧美喷水| 久久久久久久9999| 色婷婷丁香五月| 看全色黄大色大片免费视频| 亚洲天堂色图| 囯产精品久久久久久久久久梁医生| 鲁鲁色综合网| 久久精品国产Aⅴ| 无码欧美有限公司| 久草精品国产99| 国产精品视频| 国产成人免费观看在线视频| 中国91AV| www鬼畜国产男人的天堂| 成人国产视频在线观看| 久久大线蕉一区| 成人性爱av.com| 女上位精品在线| 色综合色综合网| 国产97视频| 五月天开心网| 国产精品永久免费10000| 亚洲无限观看| 久久露脸国产老熟女| 懂色Av一区二区三区| 神马视频久久久久久| 国内亚洲高清无码| 天堂亚洲精品久久老牛| 综合久| 人妻激情视频| 懂色AV中文| 国产女性无套 免费观看| 91美| 中文字幕97色| 精品性爱无码在线播放| 天天日天天操天天射河南省| 怡红院成人av| www.五月天| 在线亚洲 欧美 日本专区| 97精品久久久久中文字幕| 人人色人人操在线| 亚洲欧美国产中文视频| 后入福利| 国精品一区二区三| 日本色色色| 人人操我人人干| 99操逼| 国产精品色| 日少妇亚洲版| www.色99| 色色色色日本| 97超碰美女| 中亚黄色三级大片| 日韩三级网址| 2024人人操人人摸| 亚洲 欧美 偷拍 唯美| 天天欧美| 久久日韩肥臀| 亚拍在线| 欧美se亚洲| www.色婷婷| 麻花传媒免费网站在线观看| 校园春色 欧美| 日韩人妻精品| 97看操| 欧美午夜色妇色鬼| 蜜臀久久99精品久久综合| 可以免费观看的日韩av毛片| 丰满人妻aA一区二区三区| 久久这里只精品| 小骚逼被操的爽不爽| 国产精品乱人伊人网| 亚洲国产成人高清在线| 亚洲乱码尤物193YW| 在线色导航| 电家庭影院午夜69久久夜色精品国产69乱| 任你干在线视频| 伊人久久大香线蕉亚洲五月天,青草青草欧美日本一区二区,欧美日产欧美日产国产 | 国产亚热在线久久| 欧美色天堂网在线视频| 99亚亚热| 天天干天天拍| 欧洲熟妇xxXx欧美老妇裸体| 黄色电影观看久久9| 精品国产91内射久久| 国产精品探花色| 日本国产亚洲一区在线观看| 91精品国产91综合久久蜜臀| 男人天堂资源| 91性网| 亚洲一区二区中文字幕| 久久风骚城市人| 一区超碰一区| 欧美第二页午夜| 久久国语| 久久人妻少妇| 久久精品男人的天堂| 欧美色图人妻| 久久9精品网站| 久草成人影片| 欧美春色| se吧提供91精品国产91久久久久久 | 99精品久久久久久| 久污| 精品视频一区二区| 欧美 色 亚洲| 屁股久久久久久久| 日韩强奸av| 99无码| 隔壁邻居波多野结衣中文字幕| 色综合天天| 国产强奸超碰AV| 亚洲综合成人网| 婷婷五月色| 高树玛利亚无码流出| 啊啊啊97视频| 日韩99999色| 1024午夜激情男人的天堂| 美女天天干| 久久久96| 九九精品99| 亚洲国产欧美中文永久| 亚洲 综合 欧美| 99性爱视频| 97干色天堂| 亚欧洲一区二区视频| 欧美色性情| 综合影院永久入口国产| 亚洲αv一区二区三区| 性一交一乱一交A片久久四色| 亚洲有码 视频一区| 97人肏| 怡红院亚洲怡春院av| 亚洲色电影在线| 午夜视频久久久久一区| 国产自偷自拍一区| 7月婷婷综合| 加勒比性爱成人在线| 97chaopengongkai| 日韩啊V| 国产农村一一级特黄毛片| 国产久久久9999| 免费超碰97久久| 亚洲色宗合| 亚洲欧美日韩精品久久久一区二区 | 婷婷五月天激情四射| 日本不卡码黄色| 超碰97极品9| 亚洲综合另类小说色区亚洲成av人片在www| 日本精品网站在线中文| 亚洲另类综合欧美| 丰满丝袜少妇AV| 日本操逼视频在线| 丁香五月激情综合| 青青伊人加勒比海| 99热| 婷婷五月天激情小说| 丝袜综合| 亚洲天天操| 天天操天天舔| 大香蕉欧美国产日韩高潮| 综合色一区三区二区| 久久一区二区三区入口| 人妻人人澡人人爽人人| 91熟女视频| 日韩人妻播放| 精品国产99| 999综合网| 中文字幕中文字幕一区二区| 国产精品熟女AV中文字幕在线播放| 日韩一级二级三级| 亚洲国产高清福利视频| 九九九九九九九九九五码| 久久六六| 长长久久免费视频| 亚洲综人网| 91精品人妻电影| 色偷偷综合91久久噜噜| 久草国产在线视频| 日韩精品9999| 老司机午夜精品视频| 殴美性色a级欧美| 妇女一区二区三区| 在线可观看的黄色网址| 中文字幕一区二区三四五区日日骚| 国产亚洲精品A在线观看下载| 大香蕉碰碰| 熟女人妻一区二区三区免费看| 人妻激情偷乱视三区频一区二区| 久湿久久| 91精品无码人妻系列| 2019午夜福利视频| 国产日韩在线播放av| 午夜福利在线合集| 岛国网址国产 | 亚洲色图国产另类| 亚州操逼图| 天天热精品| 九九99精品| 国产搭汕a级片| 嗯嗯嗯嗯啊啊啊好紧好大| 性天堂| 爱欲AV| 亚洲伊人a线观看视频| 欧美日韩国产人人| 5月婷婷6月六月丁香| 91狠狠综合网| 色 婷97| 韩国黄片aaaa| 亚洲好色人妻| 欧美日韩成人在线| 午夜性生活av免费在线看| 久久伊人青青草| 国产精品久久久久久久黄无码| 超碰97久久国| 丁香六月啪| 欧美在线播放| baiduhicn.com。| 九九色图| 久久大黄片| 欧美大片天天看| 色欲天天综合网| 狠狠爱综合网| 日韩78m视频| 人人操AV| 久久首页| 国产一区二区在线看| 国产高清1234区| 琪琪精品免费一区二区三区| 欧美综合传媒| 欧洲射精91| 亚洲国产一级精品毛一级精品看免费视频 | 97国产超湿| 久久九九视频九九视频| 国产传媒一区二区三区| 嗯嗯啊好大| 色婷婷电影网| 国产精品网址| 免费在线视频97| 亚州情色j区| 欧美人人AAA| 超碰97人妻免费在线| 人妻色情天天操| 蜜桃视频一区二区三区在线观看| 成人八戒网站| 五月天我淫我色av| 久久久久久人| 国产精品欧美激在线| 色墦五月丁香| 午夜啪啪片| 婷婷爽人人婷婷爽视频| 素人伊尹大香蕉免费下载视频| 艳美熟妇先锋一二三区| 5278欧美一区二区三区| 日韩免费av片高清无码| 国产精品丝袜在线| 天天看高清麻豆| 欧美色图偷拍另类| 色婷婷电影网| 国产三级中文有码在线视频| 欧美性爱第1 页| 99在线观看视频在线高清| 台湾佬中文娱乐自偷自拍| 中亚精品极乱| 熟女突然公开看18禁影片 | 日韩成人精品| 国内一区二区免费| 精品二区久久| 97人人中文网| 天天日日日射| 欧美日韩情色一区二区| 色999亚洲人成色| 国产精品激情久久久久久久| 88xx成人精品视频| 中国操逼无码| 亚洲九九九| 久草资源在线| 男人天堂毛片| 国产91专区| 91电影色诱| 日本精品88888888| 亚洲人精品久久久喷水| 日韩三级一区 | 大香蕉综合网| 三级色影综合网| 夜夜久久久| 欧美日韩不卡传媒| 91熟女丨91老女人| 嗯嗯不要视频| 一区二区三区高清| 好爽视频在线观看| 九九九九九九九九九国产精品| 欧洲综合色| 亚洲视频精选| 97天天摸天天爽| 老熟女综合| 亚洲欧美电影| 97色欧洲| 亚洲av青草久久一区二区| 网友自拍第1页| 亚洲人天堂| 97爱爱爱| 久久97超碰| 老熟女乱伦片| 99老司机精品视频在线观看| 国产一级高跟丝袜| 久久久久久日韩| 日本黄色精品专区网站| 亚洲免费成人在线高清无码视频 | 亚洲 图片 欧美 色图| 97色欧州| 青青草视频在线观看一区二区| 欧美日韩一干二干| 校园春色综合香蕉| 久久亚洲日韩国产欧| 一区二区视频在看| 免费观看一区| 国产精品自拍xxxx| 日本在线视频导航| 中文字幕在线观看丝袜| 日韩AV色图| 九九久久国产精品| 日本二区不卡| 十八禁啪啪视频| 18禁精品网站在线看| 操逼操操操91| 色综合91| 麻豆精品天美| 91操熟女视频| 国产精品久久久久久高清无码免费看 | 黑人综合色| 久久久久夜夜夜夜| 性天堂| 久久9视频| 国产情色在线| 精品欧美不卡在线播放| 围产精品一区二区三区视频播放| 四虎在线视频| 91无摭挡| 精品欧美乱码久| 密乳AV免费观看| 亚洲综合春色| 久久视频少妇美女| 91狠狠综合| a v网站在线播放| 噜噜噜无码AV一级一级久久影院 | 欧美日韩人妻精品一区二区三区| 高清孕妇孕交 交| 中文字幕一区电影在线观看| 日本东京热加勒比久久| www.操| 91狠狠狠| 都市久久精品激情亚洲| 99精品久久| 91女在线观看| 黄页| 中国探花熟女| 五十路熟女工口 | 蜜乳AV免费观看| 狠狠综合| 操老熟女AV| 国产一区二区成人av在线播放| 婷婷久久综合| 超碰综合97在线| 精品久久无码午夜福利| 天堂精品在线| 亚洲日韩东京热一区| 国产无码高清操逼视频| 亚洲丝袜色| 天堂亚洲精品| 日人妻视频91| 日韩八十路老熟女| 免费福利视频中文字幕| 亚洲AV无码| 九色黄站| www.色婷婷色综合| AV色五月天| 91深夜夜| 黄呦呦在线| 天天爽夜夜爽夜夜爽精| 成人影 天天操 亚洲| 超碰美国| 国产少妇肉丝在线观看| 久久久久9999妇女| www亚洲免费| 六月丁操逼| 老熟女乱伦一区| 亚洲五区熟女| 久久青青草原免费视频| 久久亚洲天天做| 日本成人免费一区二区三区| 亚洲精品819| 中文?日韩?免费?精品| 青青青操| 日本操逼视频免费| 操我啊啊啊啊啊| 亚洲啪啪综合?v一区综合精品区| 大胆91| 97综合久久| 欧美亚洲影视| 亚州,欧美在线| 九九碰九九爱97超碰| 青娱乐黄色录像| 六九九九| 日本成人在线不卡一区二区三区| 精品免费1| 9丨亚洲一区二区在线| 精品人妻一区春色| 久久毛卡| 亚洲图片91| 欧美亚洲综合色| 国产一国产一级毛片古装| 香蕉一区二区三区在线视频| 又大又长又粗又爽又黄| 96久久久精品| 337p大胆噜噜噜噜噜91Av| 阿姨一区二区免费视频-高清正片西瓜视频下载app-T450AV | 亚洲婷婷丁香在线| 日本一区99| 国产精品无套内谢| 99re在线视频这里只有精品| 国产在线视视频有精品| 国产精品久久久亚洲第一牛牛_在线观看 | 丰满人妻一区二区三区免费 | 夜夜夜久久| 国产精品一区二区亚洲人成毛片| 先锋音影AV| 操逼www.| 不卡日本一区二区| 1区2区3区中文字幕日韩| 日本免费人成视频播放120秒| 91色s| 99re3这里只有精品| 九月丁香婷婷色| 超碰色大香蕉| 欧美色66| 日韩在线76| 超碰国产精品久| 91久久国产精品| 97欧美精品综合| 日本久久网| 涩涩这里只有精品视频| 亚洲另类色综合网站| 综合网,亚洲,欧美| 妇女性内射冈站HDWWWCOM| 欧美激情精品久久久| 天堂蜜桃无码视频一区二区| 成人av影院在线观看| 国产AB视频| 天美一二三在线观看Av| 爽 好舒服 无码刺激久久| 精品九九九| 久久久久96| 神马久久69| 欧美视频在线第3页| 欧美大香蕉专区网| 亚洲成人在线乱码色午夜| 亚洲资源网| 毛片视频白嫩| 日韩性爱网址| 久久精品国产亚洲5555| 中文字幕人妻丝袜乱一区三区| 国产成人AV麻豆| 五月婷婷六月激情| 亚洲日韩国产欧美综合v| 91人精品妻入口| 偷拍亚洲视频一区二区三区四区| 亚洲国产一级中文综合久久天堂在线免费观看 | 97ai亚洲| 成人黄页| 午夜啊啊啊| 国产SV一线| 久操大香蕉手机视频在线看 | 操我无码| 日本Xx性爱| 国产无码精品高清| 国产h小视频在线观看免费| 啊啊啊啊啊舒服| 高跟伊人julia ann| 小草精彩毛片| 天天日天天色| 99这里有精品| 中文字幕av亚洲在线| 波多野结衣被操50分钟免费视频| 日本精品五区| 青娱乐淫乱1314| 91综合网站| 久草看看看| 999国产精品999久久久久久| 激情啪啪视频| 操死我干死我| 一区二区三区四区五区高清无码永久视频 | 91丨国产丨白浆| 亚洲欧美精品一区天堂久久| 2024人人操人人摸| 日韩欧美国产高清视频| 熟女视频久久| 国产粉嫩出水在线播放| aaaa少妇高潮大片| 精品亚洲一区在线观看|