久久亚洲成a人片熟女精品色一区二区三区|国产精品视频第一精品视频|av天堂热无码手机版|亚洲?v无码久久无遮挡|国产精品偷伦视频免费观看国产|麻豆国产自产精品丰满熟妇|av无码av不卡一区二区|久久亚洲精品中文字

ARTICLE DETAIL

資訊詳情

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

open-code-review:構(gòu)建人機(jī)協(xié)作的高效代碼審查體系

open-code-review:構(gòu)建人機(jī)協(xié)作的高效代碼審查體系 1. 為什么代碼審查總是形同虛設(shè)——open-code-review想解決的真實(shí)問(wèn)題1.1 代碼審查在工程實(shí)踐中的尷尬現(xiàn)狀我在一線做研發(fā)和帶團(tuán)隊(duì)的時(shí)間加起來(lái)超過(guò)十年換過(guò)幾家公司也看過(guò)不少代碼評(píng)審流程從制定到瓦解的全過(guò)程。幾乎所有團(tuán)隊(duì)在創(chuàng)業(yè)初期都說(shuō)要做代碼審查但真正堅(jiān)持下來(lái)的并不多。最常見(jiàn)的狀態(tài)是PR 發(fā)出來(lái)掛在列表里過(guò)了兩三天沒(méi)人看或者有人點(diǎn)了個(gè)看起來(lái)沒(méi)問(wèn)題然后 merge 按鈕就亮了。把關(guān)這件事最后變成了走形式。這背后的原因不復(fù)雜。人工審查天然有惰性人看代碼的注意力曲線大概也就能維持二十分鐘左右超過(guò)這個(gè)時(shí)間后續(xù)的評(píng)論基本在湊數(shù)。另一個(gè)問(wèn)題是審查者看不到上下文沒(méi)有統(tǒng)一的檢查清單全憑個(gè)人經(jīng)驗(yàn)。兩個(gè)開(kāi)發(fā)者的水平參差不齊審查結(jié)論就會(huì)天差地別。更麻煩的是代碼倉(cāng)庫(kù)本身就是一座不斷變大的山跨模塊、跨服務(wù)的改動(dòng)越來(lái)越多人工很難從互通的角度發(fā)現(xiàn)潛在風(fēng)險(xiǎn)。我后來(lái)開(kāi)始關(guān)注 open-code-review 這個(gè)方向的工具倒不是因?yàn)槟硞€(gè)工具多神奇而是因?yàn)樗汛a審查這件事從純?nèi)斯ぷ兂闪巳藱C(jī)協(xié)作。它可以自動(dòng)收集變更內(nèi)容、跑規(guī)則、打評(píng)論、生成審查報(bào)告甚至能在開(kāi)發(fā)者把代碼交上來(lái)之前就完成第一輪篩選。真正讓人工審查者面對(duì)的不是幾百行代碼的大海撈針而是幾處值得深挖的疑點(diǎn)。這才是代碼審查本來(lái)應(yīng)該有的形態(tài)。1.2 從需求倒推一個(gè)開(kāi)放代碼審查工具應(yīng)該具備什么能力open-code-review 不是一個(gè)我在某天突然發(fā)現(xiàn)的成品框架而是我把團(tuán)隊(duì)踩過(guò)的坑、內(nèi)部反復(fù)出現(xiàn)的問(wèn)題列成清單之后逐步驗(yàn)證出的一套思路。一個(gè)稱職的代碼審查工具至少要回答四類問(wèn)題。第一類問(wèn)題是改了什么。大部分開(kāi)發(fā)平臺(tái)自帶的 diff 視圖只展示文件級(jí)別的增刪改但審查者真正需要的是變更影響面比如這個(gè)改動(dòng)涉及了哪些 API、調(diào)用了哪些公共函數(shù)、會(huì)不會(huì)影響老版本兼容性。open-code-review 在獲取變更信息后會(huì)做一次依賴關(guān)系分析把涉及的模塊、入口和潛在調(diào)用方列出來(lái)相當(dāng)于給審查者遞了一張影響范圍地圖。第二類問(wèn)題是是否違反約定。團(tuán)隊(duì)規(guī)范通常有大量顯式和隱式約定比如密鑰禁止明文提交、引入新依賴必須審批、TODO 注釋不能帶上線、錯(cuò)誤日志必須包含請(qǐng)求 ID。這些如果用人工審查去盯又累又容易漏。代碼審查工具的價(jià)值在于把這些約定轉(zhuǎn)成可執(zhí)行的規(guī)則在機(jī)器人層面直接攔截。第三類問(wèn)題是有沒(méi)有人真正看了。很多工具能做到自動(dòng)評(píng)論但評(píng)論本身不是目的。open-code-review 更關(guān)注審查狀態(tài)的流轉(zhuǎn)誰(shuí)會(huì)去處理機(jī)器人提出的問(wèn)題、哪些問(wèn)題被標(biāo)記為不處理、什么原因?qū)е虏惶幚?。這相當(dāng)于給審查過(guò)程加了審計(jì)日志團(tuán)隊(duì)復(fù)盤的時(shí)候能拿出來(lái)看不再是薛定諤的已審過(guò)。第四類問(wèn)題是能不能和現(xiàn)有流程串起來(lái)。一個(gè)審查工具如果獨(dú)立于 Git 倉(cāng)庫(kù)、CI 流水線和即時(shí)通訊系統(tǒng)存在就等于一個(gè)信息孤島用不了兩周就會(huì)被棄用。open-code-review 的設(shè)計(jì)出發(fā)點(diǎn)就是開(kāi)放協(xié)議和可插拔架構(gòu)能監(jiān)聽(tīng)代碼托管平臺(tái)的事件也能把結(jié)果推給企業(yè)微信、釘釘、飛書或者 Slack。這一步走通工具才真正嵌入了工程師的日常工作流。所以我把open-code-review理解為一個(gè)開(kāi)放的、可自托管的代碼審查基礎(chǔ)設(shè)施。它不是來(lái)替代人的而是替代那些重復(fù)性、規(guī)則性的審查勞動(dòng)把人的注意力釋放到真正需要判斷力的地方。2. open-code-review的核心組成與工作流程拆解2.1 變更事件觸發(fā)與差異數(shù)據(jù)提取open-code-review 的工作起點(diǎn)不是代碼掃描而是事件監(jiān)聽(tīng)。以 GitHub 為例當(dāng)有人 push 分支、創(chuàng)建 Pull Request、提交 review comment 或者把 PR 重新打開(kāi)時(shí)代碼托管平臺(tái)會(huì)發(fā)送 webhook 事件到 open-code-review 服務(wù)端。服務(wù)端拿到事件后并不會(huì)直接拿事件里的 payload 去跑規(guī)則而是先用事件里的倉(cāng)庫(kù)信息和分支信息去調(diào)用平臺(tái) API拉取最新的變更數(shù)據(jù)。這里的差異提取很關(guān)鍵。如果事件觸發(fā)的是一個(gè)支持多提交的 PRopen-code-review 不是簡(jiǎn)單對(duì)比 PR 兩端 commit 的差異而是會(huì)按 commit 分別提取同時(shí)計(jì)算這個(gè) PR 從頭到尾累計(jì)的變更全貌。原因是按 commit 查看可以發(fā)現(xiàn)中間步驟是不是引入了問(wèn)題按全貌查看可以判斷最終合入后的整體狀態(tài)是否干凈。兩個(gè)視角缺一不可。我在部署的時(shí)候吃過(guò)一個(gè)虧默認(rèn)配置只拉取了平臺(tái)返回的前 30 個(gè)文件遇到一個(gè)改動(dòng)了大幾十個(gè)文件的 PR后面的文件全部沒(méi)有被審查到。后來(lái)在配置里調(diào)整了max_diff_files參數(shù)并且確保有分頁(yè)拉取邏輯才解決了這個(gè)問(wèn)題。如果你接的是一個(gè)大型單體倉(cāng)庫(kù)建議干脆把上限放開(kāi)否則審查結(jié)果會(huì)少了一大塊。數(shù)據(jù)提取完成后open-code-review 會(huì)生成一份結(jié)構(gòu)化的變更對(duì)象包含文件路徑、改動(dòng)行號(hào)、原始內(nèi)容、新內(nèi)容、是否新增文件、是否刪除文件等字段。后續(xù)的規(guī)則引擎和人工審查摘要全部圍繞這份結(jié)構(gòu)化數(shù)據(jù)展開(kāi)而不是面向純文本的 diff這是它和git diff | grep類腳本的本質(zhì)區(qū)別。2.2 自動(dòng)檢查引擎規(guī)則、過(guò)濾器、動(dòng)作自動(dòng)檢查引擎是 open-code-review 的中樞神經(jīng)。它由三部分組成規(guī)則Rule、過(guò)濾器Filter和動(dòng)作Action。規(guī)則描述的是我們要檢查什么。比如一個(gè)規(guī)則可以定義在.go文件中如果新增行匹配到TODO就產(chǎn)生一個(gè)warning級(jí)別的評(píng)論。規(guī)則可以針對(duì)文件后綴、目錄前綴、提交信息等不同維度生效。規(guī)則之間是獨(dú)立的方便團(tuán)隊(duì)按模塊拆分維護(hù)。過(guò)濾器解決的是這條規(guī)則到底是否需要執(zhí)行。最典型的場(chǎng)景是某些歷史遺留目錄已經(jīng)存在大量問(wèn)題時(shí)如果新規(guī)則一上來(lái)就全量掃描會(huì)產(chǎn)生幾百條噪音團(tuán)隊(duì)一下子就被淹沒(méi)了。open-code-review 支持按路徑、按分支、按提交作者、按文件變更量做過(guò)濾。比如只有src/目錄下的改動(dòng)才需要執(zhí)行某條安全掃描規(guī)則或者只有 master 分支才啟用嚴(yán)格的checkstyle規(guī)則集。這個(gè)能力非常重要它決定了審查工具會(huì)不會(huì)被團(tuán)隊(duì)嫌棄。動(dòng)作則對(duì)應(yīng)發(fā)現(xiàn)問(wèn)題后做什么。我用的版本支持發(fā)送普通評(píng)論、生成 inline review comment、把文件標(biāo)記為 required changes以及通過(guò) webhook 向 IM 工具推送概要。還可以根據(jù)規(guī)則嚴(yán)重級(jí)別做分流error級(jí)別的直接阻塞合并warning級(jí)別的只提示不阻塞info級(jí)別的干脆只在周報(bào)里體現(xiàn)。這里要強(qiáng)調(diào)一個(gè)原則自動(dòng)檢查引擎的定位是提升信息密度而不是決定能否合并。真正決定代碼能不能合并的仍然應(yīng)該是人自動(dòng)檢查只是把已知的、機(jī)械的、可枚舉的問(wèn)題提前擋在門外。2.3 人工審查與機(jī)器人評(píng)論的協(xié)作節(jié)奏有了自動(dòng)檢查引擎人工審查是不是就輕松了對(duì)但不代表可以完全不動(dòng)腦。我實(shí)際的體會(huì)是open-code-review 把審查過(guò)程分成了兩個(gè)階段。第一階段是代碼尚未合入時(shí)的機(jī)器人初篩。開(kāi)發(fā)者提交代碼后幾分鐘內(nèi)就會(huì)收到機(jī)器人的評(píng)論包括哪些地方風(fēng)險(xiǎn)較高、哪些規(guī)范沒(méi)有遵守。開(kāi)發(fā)者可以先自己修掉一批再喊人來(lái)審。這樣審查者拿到的代碼已經(jīng)是被機(jī)器人過(guò)濾過(guò)的干凈版本節(jié)省了大量時(shí)間。第二階段是人在機(jī)器人評(píng)論基礎(chǔ)上的復(fù)核。open-code-review 會(huì)把規(guī)則命中的位置直接標(biāo)在 diff 行上審查者點(diǎn)進(jìn)去就能看到具體的代碼行和規(guī)則說(shuō)明。這比看一條籠統(tǒng)的檢查一下這個(gè)文件要有效得多。審查者關(guān)注的不再是代碼里有什么可疑點(diǎn)而是機(jī)器人覺(jué)得可疑的地方是不是真的存在更深的問(wèn)題。我經(jīng)常跟團(tuán)隊(duì)說(shuō)一句話機(jī)器人負(fù)責(zé)檢查和掃雷人負(fù)責(zé)決策和判斷。比如一條規(guī)則檢測(cè)到某個(gè)新引入的依賴沒(méi)有 license 聲明機(jī)器人能做的只是標(biāo)記出來(lái)并給出許可證文件的鏈接至于這個(gè) license 是否適合當(dāng)前項(xiàng)目法務(wù)要求最后還是要人來(lái)拍板。這種協(xié)作節(jié)奏一旦形成代碼審查的效率能翻倍而且大家不會(huì)那么反感又要去看 PR這件事。3. 從零搭建open-code-review的完整實(shí)操記錄3.1 服務(wù)端部署Docker Compose 文件與實(shí)踐參數(shù)open-code-review 的服務(wù)端設(shè)計(jì)得很輕官方推薦用 Docker 部署。我在一臺(tái) 2C4G 的輕量云主機(jī)上跑得很穩(wěn)內(nèi)存占用大概在 300MB 左右對(duì)于中小團(tuán)隊(duì)完全夠用。部署前需要準(zhǔn)備一個(gè) HTTPS 域名或者能用反向代理轉(zhuǎn)發(fā)到服務(wù)的入口因?yàn)榇a托管平臺(tái)的 webhook 回調(diào)一般要求可達(dá)地址。下面是我實(shí)際使用的 docker-compose.yml 的簡(jiǎn)化版本version: 3.8 services: ocr-server: image: open-code-review/ocr-server:latest container_name: ocr-server restart: always ports: - 8080:8080 environment: - OCR_DB_TYPEsqlite - OCR_DB_PATH/data/ocr.db - OCR_API_TOKENyour-generated-token - OCR_HTTP_PORT8080 volumes: - ./data:/data - ./rules:/etc/ocr/rules - ./config:/etc/ocr/config command: [serve]有幾個(gè)參數(shù)值得說(shuō)明。OCR_DB_TYPEsqlite適合幾十人的小團(tuán)隊(duì)不需要額外維護(hù)數(shù)據(jù)庫(kù)如果團(tuán)隊(duì)規(guī)模上百人建議換 PostgreSQL并發(fā)性能會(huì)好很多。rules目錄用來(lái)放自定義規(guī)則文件每次修改后服務(wù)端會(huì)自動(dòng)熱加載不需要重啟容器。config目錄里放的是平臺(tái)接入配置和通知渠道配置。啟動(dòng)命令用docker compose up -d就夠。啟動(dòng)后訪問(wèn)/healthz路徑能返回ok就說(shuō)明服務(wù)起來(lái)了。我習(xí)慣在反向代理層加一個(gè) Basic Auth防止公網(wǎng)環(huán)境里 management API 裸奔。3.2 接入代碼托管平臺(tái)GitHub App 和 Webhook 配置服務(wù)端起來(lái)了接下來(lái)要接入代碼托管平臺(tái)。這里以 GitHub 為例其他平臺(tái)思路類似。我推薦注冊(cè)一個(gè) GitHub App 而不是傳統(tǒng) Webhook因?yàn)?GitHub App 的權(quán)限粒度更細(xì)而且不會(huì)因?yàn)槟硞€(gè) token 泄露導(dǎo)致整個(gè)組織的信息被別人看到。注冊(cè) GitHub App 時(shí)有幾個(gè)點(diǎn)要注意Permissions 里必須勾選Pull requests: Read write、Commit statuses: Read write、Contents: Read。Webhook URL 填https://your-domain/event/github。Secret 填一串隨機(jī)字符串這段字符串會(huì)用來(lái)簽名校驗(yàn)服務(wù)端也必須配置相同值。安裝到對(duì)應(yīng)的倉(cāng)庫(kù)或組織然后拿到 App ID 和私鑰。私鑰的管理要小心。我見(jiàn)過(guò)有人把私鑰直接塞進(jìn) docker-compose 的環(huán)境變量里其實(shí)有泄露風(fēng)險(xiǎn)。更穩(wěn)的做法是掛載成文件然后配置中填寫路徑讓 open-code-review 自己讀文件。整個(gè)過(guò)程對(duì)應(yīng)到配置文件 config.yml大致長(zhǎng)這樣platform: github: app_id: 12345 private_key_file: /etc/ocr/config/private-key.pem webhook_secret: your-webhook-secret installation_id: 67890配置好之后隨便改一個(gè)測(cè)試分支、提交一個(gè) PR觀察服務(wù)端日志。如果日志中出現(xiàn)event received說(shuō)明 webhook 鏈路通了。如果看不到先去檢查反向代理有沒(méi)有把X-Hub-Signature-256這個(gè) header 透?jìng)鬟^(guò)去這是最常見(jiàn)的配置遺漏點(diǎn)。3.3 配置文件的字段解析與熱加載open-code-review 的全局配置文件集中管理平臺(tái)接入、審查偏好和數(shù)據(jù)上報(bào)策略。配置文件是 YAML 格式初次上手時(shí)最容易困惑的是各個(gè)字段的作用范圍和優(yōu)先級(jí)。一份最小可用配置可以長(zhǎng)這樣server: port: 8080 platform: github: app_id: 12345 private_key_file: /etc/ocr/config/private-key.pem webhook_secret: your-webhook-secret rules: default_severity: warning include_paths: - src/** exclude_paths: - vendor/** - dist/** notifications: webhook: enabled: true url: https://hook.example.com/robot重點(diǎn)說(shuō)一下rules.default_severity。當(dāng)你沒(méi)有給規(guī)則單獨(dú)指定嚴(yán)重級(jí)別時(shí)所有命中都會(huì)按這個(gè)默認(rèn)值處理。我把默認(rèn)值設(shè)為warning這樣即使有人手滑寫了一個(gè)大范圍規(guī)則也不會(huì)直接阻塞整個(gè)合并最多是評(píng)論提醒。真的要讓某條規(guī)則強(qiáng)制阻塞合并可以單獨(dú)指定severity: error。這種灰度設(shè)置思路適合剛引入自動(dòng)審查的團(tuán)隊(duì)能顯著降低工具上線初期的對(duì)抗情緒。服務(wù)端會(huì)監(jiān)聽(tīng) rules 目錄下的.yml文件變化通常在 10 秒內(nèi)完成熱加載。我驗(yàn)證過(guò)這個(gè)機(jī)制修改規(guī)則后不需要重啟容器下一次審查事件進(jìn)來(lái)時(shí)就會(huì)使用新規(guī)則。但要注意如果使用容器 Volume 掛載宿主機(jī)目錄文件權(quán)限和路徑格式可能會(huì)影響監(jiān)聽(tīng)效果遇到不生效時(shí)先看日志再驗(yàn)證掛載路徑是否被識(shí)別。4. 審查規(guī)則設(shè)計(jì)把團(tuán)隊(duì)規(guī)范變成可執(zhí)行代碼4.1 規(guī)則文件語(yǔ)法與三類常用規(guī)則規(guī)則文件是 open-code-review 的靈魂。我習(xí)慣給每類規(guī)范建一個(gè)獨(dú)立文件比如style.yml、security.yml、process.yml這樣職責(zé)清晰也方便在團(tuán)隊(duì)群里討論。規(guī)則的基礎(chǔ)結(jié)構(gòu)是這樣的rules: - id: NO_TODO_IN_MASTER name: 禁止在主分支提交中保留 TODO 注釋 severity: warning filter: events: [pull_request] branches: [master, main] check: type: regex path: .\\.(py|java|go|js|ts)$ pattern: \\bTODO\\b scope: added_lines action: type: comment message: 檢測(cè)到新增代碼中包含 TODO請(qǐng)登記用例編號(hào)后處理或改為關(guān)聯(lián) issue。 advisory: user: tech-lead規(guī)則文件的語(yǔ)法看起來(lái)多核心就三個(gè)字段filter控制規(guī)則在什么事件和路徑下生效check描述用什么方式檢查action定義命中后如何處理。常用的規(guī)則大體分三類。一類是regex正則規(guī)則適合檢查敏感信息、危險(xiǎn)函數(shù)、調(diào)試打印比如把password ...這種硬編碼配置找出來(lái)。缺點(diǎn)是正則容易誤報(bào)需要花精力調(diào)優(yōu)。另一類是path路徑規(guī)則用來(lái)做目錄結(jié)構(gòu)的約束。例如規(guī)定 API 層不允許直接寫 SQL、新代碼不允許出現(xiàn)在legacy/目錄、特定目錄的文件不允許超過(guò) 500 行。這類規(guī)則往往比正則更直接有效因?yàn)樗s束的是設(shè)計(jì)邊界。第三類是size數(shù)值規(guī)則用來(lái)限制單次變更規(guī)模。規(guī)則里可以定義max_added_lines: 400、max_files: 20、max_commits: 10。超過(guò)閾值之后機(jī)器人會(huì)建議拆分 PR。這類規(guī)則在團(tuán)隊(duì)跨模塊協(xié)作時(shí)特別有用因?yàn)榇?PR 的審查質(zhì)量幾乎一定下降。4.2 分層設(shè)計(jì)審查規(guī)則硬性門檻、軟性建議、人工確認(rèn)項(xiàng)把團(tuán)隊(duì)所有想檢查的都塞進(jìn)規(guī)則系統(tǒng)不是一個(gè)好主意。我見(jiàn)過(guò)兩個(gè)比較極端的團(tuán)隊(duì)一個(gè)是規(guī)則太少形同虛設(shè)另一個(gè)是規(guī)則太多每個(gè) PR 都被機(jī)器人打十幾條評(píng)論開(kāi)發(fā)者的反應(yīng)直接變成已讀不回。規(guī)則系統(tǒng)要分層設(shè)計(jì)讓每一類規(guī)則對(duì)應(yīng)不同的處理方式。我自己的分層方法很簡(jiǎn)單硬性門檻severity: error這些規(guī)則一旦命中機(jī)器人在 PR 上標(biāo)記為請(qǐng)求變更并給 CI 查詢狀態(tài)設(shè)置失敗標(biāo)記。適合放密鑰泄露、危險(xiǎn)函數(shù)、編譯錯(cuò)誤、明顯的數(shù)據(jù)安全問(wèn)題。軟性建議severity: warning不合規(guī)但可以討論比如代碼風(fēng)格、命名、配置硬編碼等。機(jī)器人只評(píng)論不阻塞。人工確認(rèn)項(xiàng)severity: info機(jī)器人把比較主觀的問(wèn)題點(diǎn)出來(lái)并 對(duì)應(yīng)模塊的負(fù)責(zé)人讓負(fù)責(zé)人來(lái)確認(rèn)是否需要處理。比如這個(gè)函數(shù)的復(fù)雜度從 12 漲到了 18雖然當(dāng)前通過(guò)測(cè)試但請(qǐng)確認(rèn)后續(xù)是否規(guī)劃重構(gòu)。分層之后團(tuán)隊(duì)的反饋會(huì)舒服很多。硬性門檻攔截的是絕對(duì)不能出的問(wèn)題軟性建議給了討論空間人工確認(rèn)項(xiàng)實(shí)際上是把跨模塊的判斷權(quán)交給了對(duì)應(yīng) owner。這是其他純自動(dòng)化方法論里經(jīng)常被忽略的點(diǎn)。4.3 處理誤報(bào)的閉環(huán)流程規(guī)則系統(tǒng)上線一個(gè)月后一定會(huì)遇到誤報(bào)問(wèn)題。比如正則把測(cè)試代碼里的示例字符串當(dāng)成了真密碼路徑規(guī)則把配置目錄下的合法文件擋住了。如果誤報(bào)率太高開(kāi)發(fā)者會(huì)開(kāi)始忽略機(jī)器人評(píng)論甚至要求關(guān)掉某條規(guī)則。所以一定要建立誤報(bào)處理閉環(huán)而不是簡(jiǎn)單把規(guī)則刪掉。我在團(tuán)隊(duì)里的標(biāo)準(zhǔn)流程是收到任何一條疑似誤報(bào)的評(píng)論開(kāi)發(fā)者不需要現(xiàn)場(chǎng)爭(zhēng)論只做兩個(gè)動(dòng)作——在評(píng)論下回復(fù)#ignore加一句原因同時(shí)把這條問(wèn)題加入周會(huì)上的規(guī)則巡檢清單。每周固定時(shí)間值班的同學(xué)會(huì)做一次規(guī)則召回分析統(tǒng)計(jì)哪些規(guī)則命中率低、被置為 ignore 的次數(shù)多然后去調(diào)整正則表達(dá)式或收窄過(guò)濾范圍。open-code-review 支持從評(píng)論中解析#ignore標(biāo)記命中后自動(dòng)把這條規(guī)則從后續(xù)事件中排除。這樣既保留了規(guī)則的歷史記錄又避免了同一問(wèn)題反復(fù)打擾。我調(diào)整完規(guī)則后記得在描述里寫 changelog這樣團(tuán)隊(duì)能看到規(guī)則是在更新的而不是永遠(yuǎn)一成不變。規(guī)則文件本身也應(yīng)該走代碼審查流程——這聽(tīng)起來(lái)有點(diǎn)像套娃但對(duì)保證規(guī)則質(zhì)量真的有效。5. 接入CI流水線后的真實(shí)收益與潛在坑5.1 阻塞式還是非阻塞式一個(gè)需要明確的決策把 open-code-review 接入 CI 流水線時(shí)第一個(gè)要決策的問(wèn)題就是機(jī)器人審查失敗時(shí)CI 到底要不要掛。這個(gè)決策做錯(cuò)了后續(xù)非常被動(dòng)。有些團(tuán)隊(duì)一上來(lái)就搞阻塞式只要 open-code-review 返回failure整個(gè) PR 就不能合并。這樣做看似嚴(yán)格但規(guī)則成熟度不夠時(shí)每天會(huì)產(chǎn)生大量卡住的 PR開(kāi)發(fā)體驗(yàn)極其糟糕。更現(xiàn)實(shí)的做法是規(guī)則系統(tǒng)上線第一階段設(shè)置成非阻塞式讓機(jī)器人評(píng)論和 CI status 只是記錄不真正阻止合并。跑上一到兩周觀察規(guī)則的誤報(bào)率和團(tuán)隊(duì)反饋再逐步把error級(jí)別的規(guī)則調(diào)整為阻塞式。我的經(jīng)驗(yàn)是阻塞式只適合兩類內(nèi)容一類是安全底線密鑰、憑據(jù)、危險(xiǎn)函數(shù)另一類是流程硬約束缺少測(cè)試、缺少變更描述、目標(biāo)分支不對(duì)。至于代碼風(fēng)格和可維護(hù)性的規(guī)則先做提示等人接受之后再慢慢收緊。這個(gè)漸進(jìn)思路能讓引入工具的過(guò)程更平滑。在 CI 配置中可以用類似這樣的命令直接讓腳本返回狀態(tài)open-code-review check --event pull_request --source refs/heads/feature/xxx --target refs/heads/main --exit-code加不加--exit-code就決定了是否阻塞。我在團(tuán)隊(duì)里用的是先輸出報(bào)告文件再?zèng)Q定是否指定 exit-code的做法讓 CI 日志里能看到完整分析結(jié)果而不是只看到一個(gè)紅色叉。5.2 與現(xiàn)有CI/CD工具鏈整合的兩種方式open-code-review 與 CI/CD 工具的整合方式我在實(shí)踐中驗(yàn)證過(guò)兩種比較順手。第一種是webhook 事件驅(qū)動(dòng)方式。open-code-review 自己監(jiān)聽(tīng)代碼托管平臺(tái)事件跑完檢查之后通過(guò)狀態(tài) API 把結(jié)果寫回 PR。這種方式的好處是無(wú)需改動(dòng)現(xiàn)有 CI 流水線只要你原來(lái)有 webhook 轉(zhuǎn)發(fā)能力就行。CI 本身不感知 open-code-review 的存在兩者是平行關(guān)系互相之間只通過(guò)代碼托管平臺(tái)的狀態(tài)字段交流。第二種是流水線步驟調(diào)用方式。在現(xiàn)有的 CI 流水線腳本里增加一步比如在 Jenkins 或 GitHub Actions 中調(diào)用 open-code-review 的check命令然后把報(bào)告上傳到構(gòu)建產(chǎn)物里。這種方式適合已經(jīng)用了大量自定義流水線、并且希望審查結(jié)果和構(gòu)建記錄放在一起的團(tuán)隊(duì)。兩張方式可以同時(shí)用但要約定清楚避免重復(fù)報(bào)告。如果 webhook 已經(jīng)自動(dòng)評(píng)論了流水線里就不要再加同樣內(nèi)容的評(píng)論否則開(kāi)發(fā)者會(huì)看到兩條重復(fù)信息。我的做法是webhook 負(fù)責(zé)在 PR 里打 inline 評(píng)論流水線步驟負(fù)責(zé)做構(gòu)建層面退出碼判定互不干擾。5.3 實(shí)際運(yùn)行中遇到的三個(gè)典型問(wèn)題接入 CI 之后我踩過(guò)一些坑這里挑三個(gè)典型的說(shuō)。第一個(gè)是時(shí)區(qū)問(wèn)題導(dǎo)致的分支狀態(tài)判斷錯(cuò)誤。open-code-review 在比較分支更新時(shí)間時(shí)如果服務(wù)端和代碼托管平臺(tái)所在的時(shí)區(qū)不一致會(huì)把新提交誤判成已經(jīng)被檢查過(guò)導(dǎo)致機(jī)器人不更新評(píng)論。解決辦法是在服務(wù)端環(huán)境變量里顯式指定TZUTC并在日志里確認(rèn)時(shí)間和平臺(tái)一致。這個(gè)問(wèn)題特別隱蔽我當(dāng)時(shí)排查了一晚上最后才發(fā)現(xiàn)是時(shí)區(qū)偏移了 8 小時(shí)。第二個(gè)是大倉(cāng)庫(kù)的 diff 拉取超時(shí)。接入大型倉(cāng)庫(kù)后PR 的 diff 可能非常龐大。默認(rèn)的 HTTP 客戶端超時(shí)時(shí)間是 30 秒在拉取超過(guò)幾百 MB 的差異數(shù)據(jù)時(shí)會(huì)超時(shí)失敗。解決方式是把服務(wù)端配置中的api_timeout調(diào)高并且開(kāi)啟use_pagination分批拉取文件列表。同時(shí)建議在過(guò)濾器里跳過(guò)vendor/、node_modules/這類依賴目錄它們完全不需要做規(guī)則檢查。第三個(gè)是機(jī)器人評(píng)論在 PR 重構(gòu)后殘留在舊代碼行上。當(dāng)開(kāi)發(fā)者因?yàn)闄C(jī)器人評(píng)論修改了代碼原評(píng)論的位置可能已經(jīng)不在最新 diff 里但評(píng)論本身不會(huì)自動(dòng)撤回。這會(huì)導(dǎo)致 PR 上掛著過(guò)期的評(píng)論給人問(wèn)題還沒(méi)有解決的錯(cuò)覺(jué)。解決辦法是給規(guī)則配置resolve_on_update: true一旦檢測(cè)到對(duì)應(yīng)行內(nèi)容已經(jīng)變化open-code-review 會(huì)自動(dòng)把該評(píng)論標(biāo)記為過(guò)期并在新的位置重新評(píng)估。上線這個(gè)配置后團(tuán)隊(duì)反饋干凈了很多。6. 團(tuán)隊(duì)落地過(guò)程中的行為推動(dòng)與數(shù)據(jù)度量6.1 從工具到制度審查文化的建立工具解決了能不能審的問(wèn)題但真正決定團(tuán)隊(duì)能不能把這套東西用起來(lái)的是愿不愿意審。這個(gè)和文化相關(guān)單靠工具做不到。我在團(tuán)隊(duì)里推動(dòng) open-code-review 時(shí)做了三件具體的事。第一件是讓規(guī)則文件成為公開(kāi)文檔。規(guī)則文件放在倉(cāng)庫(kù)里任何人可以看到每一條規(guī)則存在的理由和背后的討論記錄。這樣團(tuán)隊(duì)不會(huì)覺(jué)得是某個(gè)人在拍腦袋立規(guī)矩而是一起沉淀出來(lái)的共識(shí)。第二件是把代碼審查納入開(kāi)發(fā)任務(wù)的驗(yàn)收標(biāo)準(zhǔn)。一個(gè)任務(wù)的定義完成不只是代碼合入還包括收到 open-code-review 的檢查報(bào)告后所有error級(jí)別問(wèn)題都已處理或有人工確認(rèn)記錄。這個(gè)口徑寫進(jìn)團(tuán)隊(duì) wiki 后大家的行動(dòng)就統(tǒng)一了。第三件是定期做審查意見(jiàn)復(fù)盤。每個(gè)月挑一個(gè)小時(shí)的會(huì)議把機(jī)器人打出來(lái)的典型問(wèn)題和人工審查中有價(jià)值的評(píng)論拿出來(lái)一起過(guò)一遍。不是為了批評(píng)誰(shuí)而是讓團(tuán)隊(duì)看到機(jī)器人和人的配合產(chǎn)生了什么效果同時(shí)收集規(guī)則的改進(jìn)建議。慢慢地大家會(huì)覺(jué)得 open-code-review 不是用來(lái)找茬的而是用來(lái)降低犯錯(cuò)的。6.2 度量指標(biāo)設(shè)計(jì)與統(tǒng)計(jì)口徑度量是一個(gè)容易做形式主義的環(huán)節(jié)。我的建議是不要一開(kāi)始就設(shè)計(jì)十幾個(gè)指標(biāo)那純粹是給自己找負(fù)擔(dān)。以我實(shí)際使用的經(jīng)驗(yàn)真正值得定期看的指標(biāo)只有三個(gè)。第一個(gè)是審查覆蓋率合入的 PR 中有多少比例經(jīng)過(guò)了至少一次人工 review 和機(jī)器人 review。第二個(gè)是平均首次響應(yīng)時(shí)間從 PR 創(chuàng)建到收到第一條有效審查意見(jiàn)的耗時(shí)。這個(gè)指標(biāo)直接反映了團(tuán)隊(duì)審查的響應(yīng)效率。第三個(gè)是規(guī)則命中分布每個(gè)規(guī)則在一個(gè)周期內(nèi)命中多少次、被忽略多少次、真正推動(dòng)代碼修改的次數(shù)是多少。通過(guò)這個(gè)分布你能夠一眼看出哪些規(guī)則是高效有用的哪些規(guī)則只是擺設(shè)。統(tǒng)計(jì)口徑也要提前約定。比如只看合入主干的 PR不含依賴機(jī)器人產(chǎn)生的自動(dòng)合并如果是包含多個(gè) commit 的 PR響應(yīng)時(shí)間以 PR 創(chuàng)建時(shí)間為準(zhǔn)。open-code-review 的報(bào)表功能會(huì)把這些指標(biāo)按周聚合輸出方便做趨勢(shì)對(duì)比。我強(qiáng)烈建議所有指標(biāo)掛在同一個(gè)看板上不要既有的看板又說(shuō)一套數(shù)據(jù)口徑不一致會(huì)讓人徹底喪失信任。6.3 應(yīng)對(duì)開(kāi)發(fā)者的抵觸情緒無(wú)論工具設(shè)計(jì)得多妙總會(huì)有開(kāi)發(fā)者覺(jué)得又多了一個(gè)來(lái)管我的東西。常見(jiàn)的說(shuō)法是這個(gè)規(guī)則太苛刻了又要在 PR 里等機(jī)器人了自動(dòng)化審查根本沒(méi)有理解我的業(yè)務(wù)場(chǎng)景。這些反饋有一定合理性但不能因此放棄自動(dòng)審查。我的應(yīng)對(duì)方式很簡(jiǎn)單讓開(kāi)發(fā)者參與規(guī)則制定。如果機(jī)器人評(píng)論里出現(xiàn)了一條你認(rèn)為不合理的規(guī)則你可以直接提一個(gè)規(guī)則修改的 PR把理由寫在描述里。一旦通過(guò)合并后規(guī)則就變了。這句話聽(tīng)起來(lái)很常規(guī)但真正做到之后團(tuán)隊(duì)中的抵觸情緒會(huì)大幅下降。因?yàn)榇蠹野l(fā)現(xiàn)自己不是在被動(dòng)接受機(jī)器人規(guī)則而是在一起維護(hù)一套團(tuán)隊(duì)質(zhì)量標(biāo)準(zhǔn)。同時(shí)我也刻意把機(jī)器人評(píng)論的話術(shù)調(diào)整得中性一些不出現(xiàn)你違反了規(guī)則這種指責(zé)性詞匯而是當(dāng)前變更中檢測(cè)到以下風(fēng)險(xiǎn)點(diǎn)請(qǐng)確認(rèn)是否需要處理。人去看待機(jī)器人和人審視自己的感受差異是很大的中立的話術(shù)能減少情緒對(duì)抗。堅(jiān)持跑上一兩個(gè)月團(tuán)隊(duì)成員會(huì)慢慢把 open-code-review 的評(píng)論當(dāng)作一個(gè)提前自查的信號(hào)用力。我在實(shí)際使用中最深的體會(huì)是開(kāi)放代碼審查工具的價(jià)值不在一鍵解決所有問(wèn)題而在它能把審查變成一件可以持續(xù)改進(jìn)、可以數(shù)據(jù)驗(yàn)證、可以全員共建的事。規(guī)則寫了可以調(diào)效果差了可以看數(shù)據(jù)異議多了可以提交修改。這種持續(xù)演進(jìn)的循環(huán)才是讓代碼審查真正從形同虛設(shè)走向扎實(shí)落地的關(guān)鍵。
返回列表
PREV
查看更多資訊
NEXT
返回資訊列表
欧美日韩国产色图在线| 国产精品 午夜福利| 少妇天堂网络| 天天做天天爱| 婷婷99狠狠躁天天躁| 日本一级不卡一二区| 无码人妻一区二区三区色欲aⅴ| 欧美亚洲尤物久久| 九九自拍伦理| 成人av福利在线观看| 日韩三四五区| 亚洲中文字幕一区二区| 日本人人操人人操| 啊啊啊轻点在线观看| 久久久久免费看少妇A片特黄| 蜜色网色哟哟| 色妺妺AⅤ| 国产精品自在线发布| 干少妇视频| 333kkkk·亚洲com久久| 成人天天爽| 日本成人A片免费看| 久久大线蕉一区| 91麻豆天美传媒在线| 国产av美女被艹的乱叫| 欧美综合传媒| 大香蕉五月天婷婷| 精品人妻一区二区三区视频在线| www.婷婷六月天| 中文字幕日韩情色| 久久婷婷综合国际产色怕| 天天操天天日青青草超碰av| 无码少妇精品一区二区60岁老人| 视频二区美腿制服人妻欧美| 亚洲精品视频二区| 久久久久亚洲熟妇熟女| 精品国产久久乱码| 久久精品美女一区| 无码78| 大香交伊人网| 国产一区免费午夜视频| 人人噜夜夜操| 乱伦3P视频| 亚洲AV在线资源| 一区二区三区欧美激情| 蜜臀99久久精品久久久久| 亚洲 欧美 中文 日韩超碰 | 妇人噜噜| 亚洲国产一区二区三区四区国产| 国产精品日日摸天天碰| 色老牛| 黄色电影在线播放综合网站 | 中文字幕jul-617人妻熟女| 日曰骚久久精品| 亚洲情色第一页| 青青草国产欧美非洲黑人| 欧美内射少妇| 91热爆在线| 丰满人妻区一区二区三| 成熟熟女国产精品一区二区| 丁香婷婷啪啪| 欧美高清18A片| 91天天c| www.91色| 欧美大香蕉同搞| 中文字幕无码不卡啪啪| AV老汉| 333kkkk·亚洲com久久| 亚洲毛片久久| 农村妇女精品一区二区| 开心激情婷婷| 中国少妇XXXX做受| 日韩无限资源| 天天天堂影视日韩亚洲91| 25国产精品免费观看| 操逼1区| 97鸡把在线视频| 好爽免费视频,| 婷婷五月天社区| 精品国产丝袜一区二区三区乱码| 天堂综合网| 亚洲精品国产精品乱码不卡| 国产精品色| 亚洲无线码欧洲精品区别| 欧美综合综合| 综合91网| 色欲色香天天天综合网www-亚洲综合国| 青草精品视频-日本久久久久网站| 搞中出视频在线观看| 精品一区二区啪啪啪| 中文字幕中文字幕一区二区| 性色AV蜜色av色欲av| 日本五区不卡| 亚av顶级裸体一区二区三区四区五区 | 精品小视频在线| 99婷婷| 韩国一级AAA| 午夜爽爽爽| 超碰是碰在线观看| 亚洲一区二区 麻豆传媒| 婷婷国产精品九区| 国产精品老熟女一区二区| 91操人| 丁香六月东京热| 无码外流操逼视频| 午夜福利1区2区3区| 日韩肏逼视频| 91色交| 大粗鳼巴久久久久| 伊香蕉综合久久久久久久噜噜噜| 亚欧操逼片在线观看 | 中文字幕国产| 欧美自拍偷拍综合图片| CCYY草草影院地址入口| 国产精品免费1区2区视频| 久久大| 成人怡红院| 欧美色干| 91无遮挡| 东京热男人的天堂精品| 人人操人人搞人人草| 以及麻豆国产入口在线观看免费| 久久精品国产欧美日韩亚洲欧美日韩中文久久国产一区 | 综合久久久久久久综合网| 亚洲 无码 偷拍| 亚洲春色一区二区三区| 精品成人无码| 自拍大香蕉乱插| 国产白嫩漂亮KTV在线| 91人妻做a观看视频| 亚洲男人综合| 欧美十八禁导航成人| 日韩卡一卡二卡三在线| 九九综合久久| 九九九九久久久| 丰满人妻一区二区三区四| 欧美.亚洲.另类.丝袜.制服.诱惑| 色情婷婷| 动漫区日韩区欧美区| 精品久久久不卡一区二区| 九九九草| 凹凸 69堂 在线播放| 青青草好吊色| 中文字幕一区二区日韩网| 飘花国产午夜精品不卡| 亚洲图片欧美日韩| 色综合加勒比四四季| 蜜桃久久久久久久久久久久| 亚州大图综合色图| 亚洲自拍97| 美日韩男女操屄视频| 国产日韩欧美中文在线播放| 国产中文字幕曰本毛片| 久久精品国产精品亚洲艾通辽熟妇| 爽爽淫人网| 好吊色一区| 色色青青久久| 中日韩免费看男女操逼大全| 黄色片大香蕉| 欧美性,色九九| 黄站在线免费观看| 人妻献身系列第54部| 强奸a片网| 九九热视频在线观看| 91色鬼| Julia Annxxxxx| 麻豆91熟妇人妻中文字幕茄子| 欧美v日韩v亚洲v最新在线| 秋霞成人做爱| 热久久这里只有精品| 嗯~啊~快点 死我视频| 欧洲站一级二级三级h| 日本爽爽爽爽爽爽免费视频| 五月婷婷激情综合| 欧洲性人爱视频| 超碰97护士| 日韩亚洲中文字幕在线| 欧美91网站| 久久精品无码专区| 久久久久久久亚洲Av无码| 日本高清久久| 天天天堂影视日韩亚洲91| 亚洲欧美自拍偷拍| 亚洲免费人妻在| 上特色A在线| 国产极品99热在线播放69| 2010男人的天堂| 91久久国产综合精品| 不卡视频一区蜜桃视频| 日韩不卡av一二三| 亚洲欧洲色情高清| 啊啊啊好想要| 天天做天天爽| 台湾佬大香蕉| 久久99网站| 在线情色电影 91大 | 久久乐| 亚洲精品黑丝| 天天天天天天天天天天干美女| 成人AV素股で擦久久| 欧美性高潮| 韩日无码在线观看| 久久久精品久久| 一本久道在线综合视频| 一区二区三区日韩欧美| 日韩人妻有码免费视频| 97se综合网| 男女无套 免费网站| 丁香婷婷啪啪| 国产99热| 嗯~啊~快点 死我视频| 好吊色综合| 五月激情影院| 91欧美综合| 射 色综合| 男人综合网| 日本久久99| 蜜臀99久久国产| 中文字幕 国产 精品| www.av不卡中文字幕| 人人干人人操人人..com| 中文字幕综合人妻| av无码av无码专区| 精品国产乱码久久久影院| 女人双腿搬开让男人桶| 人妻熟女一区二区三区视频| 国产suv精品一区二区四| 97超碰久久| 国产精品经典一卡久久久 | 精品999日本| 这里只有精品视频在线观看麻豆| 综合天天。| 色欲日韩欧美在线一区| 亚州综合色| 天天透伊人| 99re热有精品视频国产| 蜜桃午夜视频一区二区 | ji熟女.com| 涩涩久久精品| 久久精品99| 亚洲日韩电影| 中文字幕久久精视频久久大全| 99精品欧美一区二区三区桃色| 好舒服视频| 岛国黄色大片网站| 中文字幕三四区| 骚熟女吞| www.超碰| 韩国午夜理伦三级好看| 亚洲无码一区成人免费午夜| 欧美中文字幕一区| 国产男人又猛又粗又爽| 亚洲国产精品无码AV久久| 人妻 欧美 中文| 色五月综合| 国产午夜精品在线观看| 亚洲 日本 不卡| 天天天天天天天天综合| 日日爽夜夜爽| 精品成人动漫一区二区| 东京热大香蕉| 欧美色图99| 亚洲男人的天堂AV| 人妻出轨一区二区三区| 91一起操| 国模无码一区二区三区在线| 秋霞网无码| 丰满少妇精品一区二区| 日本中文字幕熟妇| 天天综合欧美综合| 嗯啊不要啊在线 | 97在线亚洲| 夜夜爽妓女| 91丨九色丨43老版熟女| 牛牛aV| 国产无码久久高清| 五月情色天| 激情啪啪视频| 日韩少妇丰满亚洲| 五月色丁香| 操逼啊啊啊91| 国产日韩区| 国产老太乱伦一区| 国产久久久| 自拍啪啪视频| 亚洲脚交| 日韩精品怡红院| 国产有码一区| 91成人在线| 亚州色图第三区| www国产天美久久久| 亚洲小电影免费涩涩成人在线高清| 99999亚洲| 亚洲风情综合网| 精品久久久久久久久久久久 | 免费久久一级毛片大黄| 精品国产Av无码久久久伦古装| 黑人精品欧美一区二区蜜桃| 九九免费影片| 国产欧洲精品亚洲午夜拍精品| 佐山爱中文字幕| 黑丝91视频| 性色一线| 欧日韩不卡视.频| 九九成人视频| 亚洲欧洲偷拍一区| 国内精品不卡无毒99999| 色色热| 玖玖色综合| 欧美黄色片AAAAA| 殴美在线AⅤ| 午夜福利精品| 日本性爱不卡视频| www久久久| 天天干,夜夜爽| 色999亚洲人成色| 啪啪综合网| 色99视频| 真实高潮91| 大香蕉伊在线久草麻豆天堂故事| 久久国产精品熟女人妻| 亚洲美女黄色| 性91| 激情五月综合开心五月| A 在线网址| 国产无马视频| 久久9视频| 中文高清一区二区的| oumeisetu综合| 欧美色九九九| 欧美亚洲清纯| 97香蕉网| 91碰超| 国语对白在线播放视频| 婷婷五月天影院| 爱爱动态120秒| 国产精品经典一卡久久久| 一及黄久一点| 中文字幕色AV| 少妇综合| 在线国产福利网址导航| 人妻丝袜无 码视频专区| 免费视频在线观看啊啊啊啊啊| 美欧老女人97| 91n欧美| 国产AV色黄看到爽| www久| 精品v1区| 肥佬影院91| 久久中文字幕不卡人妻| 亚洲一区二区三区AV无码 | 久久亚州精品成人Av无| 亚洲av强奸乱伦| 东北夫妻性偷拍| 人人噜夜夜操| 欧美综合第一页| 欧美天天干| 亚洲激情久久| 欧美中字不卡| 国产精品内射婷婷一级二| 肉嘟嘟www视频在线观看高清| 先锋精品av色鲁| 老司机久久| 欧美成人精品一区| 亚洲国产麻豆一区二区三区| 国产青视频| 88在线一区二区三区| 夜夜草天天| 色综合色色| 免费成人在线熟妇网| 欧美色图第一页| 日韩Va亚洲va欧美Ⅴa久久| 人妻天天爽夜夜爽爽| 91欧美情色| 人妻 丝袜美腿 中文字幕| 亚洲人成色9999精品久久| 四虎在线观看网站| 三级特黄60分钟播放| 91在线美女| 国产日韩美女小穴视频网站不卡| xxx0国产在线播放| 日韩美女,国产传媒,视频一区| 综合久久97| 岛国片在线观看视频亚洲| 青青草啪啪网| 99久久久无码国产精品性啊聊| 国产精品99久久久www| 午夜性生活av免费在线看| 人妻中文字幕日韩电影| 1024手机看片欧美日韩| 亚洲精品三区在线观看| 制服少妇欧美| 日韩人妻有码免费视频| 久久久久ab| 香伊人在线| 三级片大波波| 一级性爱视频免费在线| 91九色丨国产丨爆乳| 九九AV| 六九九九| 精品国产一区探花在线观看| 欧美大香蕉在线观看| 特色a在线上| 日本久久久久久久久| 亚洲风情在线观看| 精品无吗久久| 高清国产精品无码| 久久视频,这里只有精品| 伊人网综合在线视频| 青青草色插素人| 黄色电影观看久久9| 亚洲成人妻日韩在线| 北约熟女超碰| 日本天堂在线播放| 伊人激情| 岛国1区2区3区在线观看| 嗯嗯,好大,好爽,好骚| 岛国毛片在线观看免费| 色爽——AV| 999国产精品999| 色婷婷日韩精品一区二区三区| 韩国一级做A片免费的| 97在线日韩中文字幕| 插欧洲美女欧美精品| 青青五月天| 啊a一区在线| 自怕偷自怕亚洲精品| 黄色十八禁| 五月丁香啪啪| 国产日韩精品suv| 国产一区二区在线播放,久久亚洲精品中文字幕第一区,亚洲精品在线中文字幕视频 | 精品人妻免费观看| 97精品在线| 欧美十八禁在线看| 香港澳门日本三级网站| 97视频在线观看网站| 精品久热| 国产精品一区二区亚洲人成毛片| 2017天天透天天通天天擦| 国内自拍 日韩激情 99| 国产精品人妻免费精品| 久久久男人的天堂| 亚洲熟女国产综合另类| 九九久久一区二区伦理| 久久久久九九九九| 国产自啪精品视频网站黑丝| 久久极品伊人| 久操凹凸视频| 9久在线视频只有精品| 香蕉av一区二区三区| 大香蕉av在线| 上海一级黄片| 国产一国产一级毛片古装| a人片中文字幕一区二区| 欧美日韩成人在线| 日韩一级特黄av毛片| 亚洲图片欧美色| 国产精品在线一区二区| 亚洲免费日韩在线一区二区| 午夜丁香婷婷| 日韩乱伦影音先锋| 精品欧美老熟女一二区| 人妻蜜桃臀| 国产熟妇一区二区| 亚洲精品819| 亚洲中文字幕精品久久久久久直播| 久久久精品网站| 欧洲一区二区三区四区在线观看| 亚洲丝袜色图| 口爆综合网| 大地资源在线观看中文第二页| 翔田千里爆乳巨臀无码| 一区二区三区四区理论片| 97操综合| 久久宗合亚洲| a片亚洲一本通视频| 久久精品免费| 97久久精品亚洲| 九月婷婷综合| 亚洲中文一区二区三区视频| 91精品无码人妻系列| 高清国产成人无码| 激情网色| 亚洲成人av电影在线| 色y情视频免费看| 超碰欧美| 天美传媒精品一区二区| 2020中文字幕在线观看| 国产免费内射视频| 操熟女91| 亚洲无码日韩电影| 亚洲色图欧洲| 91肉片| 97天堂| 97在线视频免费| 超碰色老头| 激情欧美97| 欧美不在线| 2017天天操| 久久啊啊| 日本中文字幕不卡视频| 91精品人妻偷情| 无遮挡男女激烈动态图| 成人性爱免费播放| 国产成人自拍视频视频| 乱论91| 日本五十路熟女一区二区| a v网站在线播放| 操比国产| 啊…啊…操我用力操我| 超碰午夜在线| 香蕉免费一区二区三区不读 | 一区二区偷拍拍视频| 亚洲最大91网| 高树玛利亚无码流出| 操操操操操操| 麻豆黄站| 玖草在线视频| 大香蕉一区二区在线观看.| 无码操逼网| 五月丁香啪啪网| 夜夜爽77777| 人妻美腿丝袜制服诱惑综合天堂-| 中文字幕制服欧美久久一区| 亚洲性图91| 青青草影视蜜久久| 欧美亚洲小说| 国产a片操逼| 91三级理论片播放器| 激情四射五月天| 国产日本熟女顶级一区二区三区视频| 青青草色情网站视频| 日韩色图 一区二区| 欧美+日产+中文| 日韩无码精品综合久久| 静品嫩模一区二区| 91欧美偷拍| 中文字幕乱偷人妻久久艾草网| 日本不卡一二区| 亚洲欧洲av影音| 免费作爱一级视频| 天天看天天综合成人网| 精品一区二区三区蜜桃臀www| 日本大香蕉综合网红本杳社区| 韩国三级一线观看久| 国产激情av女片自拍| 欧美制服网站美腿丝袜| 99re在线视频国产| 97无码视频在线播放| 天天精品| 1二区9| 久久黄人人爽视频| 亚洲精品官网在线观看| 中文字幕视频一区视频二区| 九九久精品| 国产精品露脸在线观看| 天天日日夜夜| 久久9免费视频| 国产日韩欧美操逼视频| 91大胆欧美| 99最新日韩偷拍视频| 国产又黄又粗又猛大片| 丝袜美腿诱惑亚洲欧美视频在线观看 | 极品欧美一区二区三区| 嗯嗯啊中文字幕| 色色青青久久| 欧美黑人精品在线播放| 2019AV天堂| 风月影院十八禁| 爱我干综合| 色偷综合| 成人无码在线超碰网| 综精品久久久aaaa| 天天噜| 婷婷99狠狠| 97欧美色| 久久精品色欧美aⅴ一区二区| 五十路熟女工口 | 久久久96精品| 欧美日韩 强奸乱伦| 久久曰曰| 人妻无一区二区三区| 爱爱60秒免费视频| 97 色综合| 99色色网| 激情欧美97| 久操大香蕉手机视频在线看| 91精品人妻一品二品三品| 欧美一二在线| 亚洲 小说 欧美 激情 另类| AV一二区| 97无码视频在线播放| 超碰97欧美在线| 东京热天堂网| 偷窥自拍亚洲色图| 国产综合日韩伦理| 国产性感在线观看| 欧美激情性久久久久久| 熟女一区二区三区| 日韩欧美国产一区二区三区四区| 色综合99999| 天天色综亚洲91污| 黑人性欧美| 欧美成人精品A片免费一区99| 欧美欧美少妇| 大胆91| 中文字幕久久婷婷丁香五月天| 久久精品视频久久久| 日本阿v天堂在线观看| 国产大片精久久久久久| 伊人久久在线视频观看| 人人九九精| 97碰在线视频| 精品一区二区三区国产| 我中文字幕6区| 大香蕉免费乱伦视频| 亚洲欧美校园| 日本裸体久久色噜噜| 强奸国产精品视频| 0755午夜福利视频| 中文字幕亚洲欧美在线不卡| blacked精品一区国产| 婷婷国产精品一区二区| 超碰97资源大奶| 欧美日韩免费性爱| 欧美色综合网| 午夜啊啊啊| 欧美刺激色黄片免费看| 加勒比海色香蕉婷婷| 欧美狠狠操| 中国探花熟女| 狠狠婷婷亚洲中文综合久久| 嫩草影院永久在线制服丝袜| 99视频内射三四| 久久性爱视频免费看| 免费超碰97久久| 久久久久久亚洲精品不卡人乳| 国产精品白丝在线播放| 亚洲日精品| 欧美精品91| 日韩成人大片在线观看| 操婢日韩| 色臀AV| 牛牛久久国产精品视频一二三| 日韩av乱伦| 欧美呦呦性爱| 欧美色网络| 亚洲精品1区| 久操视频免费在线观看| 欧美性爱视频免费一区一A| 人人操欧美风骚| 中文无线日韩一区| 殴美综合色88| 日本顶级天天操狠狠操夜夜操中文字幕| 精品无码不卡视频| 精品无码久久久久| 无码91| 国语av最新自产拍在线观看| 乱伦强奸区日韩| 超碰综合97在线| 诱惑人妻欧美一区在线播放| 欧美性天天影视| 特级丰满少妇一级AAAA爱毛片| 亚洲中文字幕精品一区| 97超碰9| 丰满欧美放荡少妇在线| 深田咏美亚洲精品福利社| 99久久无色码| 一级久久性爱视频| 欧美 日韩 亚洲 春色| 五月亭亭六月丁香| 精品视频久久| 亚州性色| 欧美色蜜桃97| 亚洲清纯综合| 啊啊在线| 亚洲精品97久久中文字幕| 99热18这里只有精品| 91五月天| 激情视频一二三| 国产熟女精品区| 日日夜夜草草草| 欧美97日韩精品| 超碰在线97国产| 激情小说亚洲色图| 大香蕉中文在线| 美女久久久久久久久久久| 中文字幕一区二区三区人妻不卡| 一区二区三区四区五区久久久久久| 骚人妻少妇视频| 国产后入清纯| 精品人妻视频一区二区在线播放 | av在线一区二区三区| 3P乱轮视频| 留下AⅤ黄色片| 色色色五月婷婷| 丁香五月色情| 99精品丰满人妻无| 1二区9| 蜜臀th| 男生通女生屁股| 天天综合中文字幕 91| 九九九免费视频| 91一区二区三区蜜桃| 吖在线不卡一区二区国产剧情| 午夜激情成人在线观看| 精品一区二区人妖| 久久久五月天| 久久久啊啊| 四虎国产成人精品免费一女五男| 一本一首道人妻少妇免费久久| 日日日大屁股骚女人精品| 啊啊在线| 3PAV乱伦视频| 亚洲va有码在线天堂| 激情啪啪拍91| 97爱爱爱综合| 欧美亚洲日韩16色| 色路综合| A片A5445444| 国产激情av女片自拍| AV中文在线可看| 亚洲视频一二区| 日韩特一级久久| 蜜臀久久99精品久久久久久婷婷| 日本中文字幕不卡视频| 蜜乳AV一区二区三区四| 中文字幕日韩国产传媒欧美精品| 熟妇精品juliaannAV| 亚洲人精品久久久| 午夜啪| 一区二区三区免费岛国片| av中文在线| 九九热超碰97亚洲最新香蕉| 日韩成人人妻网站| av爱爱爱| 99色婷婷| 一区,二区,三区视频| 久久线上视频免费看| 国产91av在线播放| 亚洲欧美精品福利在线| 亚州精人品大香蕉| 精品人妻一二三四区视频| 中文一区二区三区影院| 波多野结衣先锋影音| 99re6久热只有精品6在线直播 | 日韩亚洲中文字幕在线| 99无码| 1.igao73.com 加入收藏 免费专区 国产精品 中文字幕 日韩精品 欧美精品 精彩 | 在线一道啪| 久久天天摸| 91精品少妇搡搡搡| 久久免费99精品久久久久久| 天天躁日日躁AAAXX| 欧美白嫩在线放| 精品一区二区三区18| 男人高清无码一区二区| 国产成人无码网站在线视频| 人人噜夜夜操| julia国产在线 | 欧美一级专区免费大片| 国内偷拍精品一区二区| 九色视频91| 中文字幕诱惑制服人妻丝袜美丝袜美 | 91久久99久久91熟女精品| 操B久久| 色婷婷成人| 美欧老女人97| 日韩免费高清大片在线| 亚洲色图殴美色图激情乱伦| 啊啊啊快操我视频| 人人干人人操人人爱| 五月激情天| 嗯嗯不要 视频| 嫩草一区二区在线观看| 亚洲综合骚逼| 久久精品国内Av熟女高清| 精品久久在线区一区| 色噜噜日韩精品| 国产a级午夜毛片| 日韩欧美资源| 粉嫩粉嫩一区性色AV片| 夜夜国产一区| 天天日天天搞天天干| 澳门成人网站久国产日韩| 亚洲熟女av中文字幕| 99九九久久| 大香久久| 精品国产www久久| 国产中午字一暮区| 国产热RE99久久6国产精品首| 日韩美女高潮喷水视频| 精品人妻av在线播放| 极品粉嫩少妇视频| 日韩色| 1024手机看片欧美日韩| 超97在线精品视频| 亚洲精品蜜桃久久久久久久| 精品中文字幕第一页| 久久一二三四不卡 | 国精品一区二区三| 五月丁香六月综合缴清无码| 欧美无圣光在线| 日韩免费簧片| 91日产欧美| www.99中文字幕| 大香蕉日亚洲日本亚大 | 青青在线视频日韩欧美| 性色一线| 一本色道综合久久欧美| 欧美性暴力猛交XXXX| 高清国产性猛交xxxx乱大交| 久久久久久久久久久久久久久久9| 欧美成人A天堂片在线观看| 亚洲天堂日本| 色人久久| 起碰97| AV高清一区| 人妻人人做人人澡人人爽欧美一区| 老司机午夜福利视频一区二区| 婷婷中文网| 另类欧美综合| 韩国女主播青草在线| 色在线亚洲视频www| 中文字幕第二页| 婷婷久草一区二区三区| 精品成人无码| 91亚洲网站| 天天添天天干电影| 国内毛片热久久思思热| 欧美高潮| 免费视频在线观看啊啊啊啊啊| 欧美真人抽搐一进一出gif| 色偷偷男人的天堂麻豆| 免费黄色视频网址| 一个人免费视频观看在线WWW | 欧美一级特黄淫片在线观看| 日韩成人小视频| 丝袜喷水在线| 亚洲少妇综合在线播放| 啊啊嗯嗯好爽| 啊啊啊好大好湿| 精品久久視頻在线| 日本三级A片网站com| 综合色区偷拍| 999日韩中文精品观看视频。| 日韩免费大片一级播放| 97超碰碰| 蜜臀一二三区| 丁香婷婷激情五月天无毒不卡| 高清在线偷拍自拍视频| 74成人在线| 精品夜夜澡人妻无码AV| 97在线青| 色九月综合| 中文字幕在线免费观看视频| 家庭乱伦国产精品| 蜜区区视频79 | 久久久久夜夜夜夜| 久久久久婷婷精品av电影| 大香蕉伊人久久| 国产AV无码AV| 午夜超爽| 国产精品ww久久| 鸥美中出| 91色综合色| 久久久111| 日韩美一区| 9色在线| 簧片免费看视频| 免费αⅴ在线观看| 亚洲日本激情| 亚洲综合91| 久久久久久久久久9| 超碰在线1234区| 91丝袜美腿片| 日韩人妻精品中文字幕| 婷婷国产精品九区| 97WW精品| 婷婷丁香五月综合| www.色综合| 嗯啊抽插大香蕉网页| 国产精品爽爽v| 亚欧免费| 日韩操p| 成人97人人超碰人人| 美女诱惑久久| 亚洲人天堂| 欧美瑟综合| 呻吟 欧美 日本 中出| 九九九九九九九九九九九九九九九女| 久极品在线观看| 精品一区96| 激情六月婷婷| 麻豆久久视频在线地址| 男女打扑克高清网站| 亚洲 日韩 欧美 国产综合体| 五月丁香婷婷色| 岛国成人av在线播放网址| 亚洲AV成人无码一区二区三区在线观看| 麻豆成人影音在线| 97综合久久| 13小男生GAY自慰脱裤子| 青娱乐国产剧情av一区| 日韩欧美福利视频看看| 精品人妻视频入口| 草草影院日本第一页| 欧美极品性爱天天射| 欧美黄色大片在线观看| 老司机射| 91强热人妻| 天天天天干| 内射日韩大臀美女| 久久久久久久久久久久久9999| 人人爽夜夜操| 夜夜国产一区| 精品无码产区一区二| 欧美日韩另类字幕中文| 久久久无码精品人妻二区 | 色九九九九久| 亚洲最大91网| 高潮嗯啊性感美女久久久| 国产熟女| 亚春色色| 日本操逼无码| 超清福利精品视频在线| 99久久久er直播网址| a级理论午夜日本| 另类图片五月| 97精品综合久久网| 任你干在线视频| 日韩综合色图| 国产成人亚洲精品无码最新在线| 中国国产精品一区视频| 色婷婷丁香五月天| 日韩三级久久久| 涩涩久久精品| 国产激情在线| 翔田千里无码中出中文字幕| 国产第25页在线观看| 五月婷婷色色| 日韩99神马视频片| 欧美色爱综合| 国产视频人人网| 亚洲国产一级精品毛一级精品看免费视频| 黄色一区二区秘书性感| 先锋精品av色鲁| 久久久久久久久久精| 又黄又硬又粗又长国产视频| 在线人成亚洲视频免费观看| 强奸乱伦日韩AV| 国产日本熟女顶级一区二区三区视频 | 国产精品不卡av免费在线观看| 特级毛片特黄久久免费看| 九九99精品| 综合天天网| 狠狠色一区二区中文字幕| 黄页| AV无码久久久精品| 久久久久性熟视频| 熟人人妻少妇精品久久| 波多野结衣一级视频| 99精品久久| 天天操天天谢| 神马久久久久| 久久久久久人妻| 999熟女精品| 久久精品国产精品一区 | 黄片qw| 六月丁香啪啪| 91亚洲欧美综合高清在线| 91天天综合| 99色色网| 成年在线视频日本亚洲在线视频区精品江靖宇公司 | 丁香六月激情| 天天添天天干电影| 国产精品日日摸天天碰| 亚洲乱码精品一区二区| 日日干日日| 男人天堂无码| 天天操人人操狠狠插| 亚洲色图 欧美热图 清纯唯美 另类自拍 | 天天爱天天操| 久久日韩精品一区二区| 超碰爽人妻熟女Av| 欧美在线啊啊| 乱伦熟女区| 智利AV在线网| 亚洲欧综合另类无码一区| 成人精品视频一区二区| 秋霞怕怕片| WWW4虎| 麻豆91熟妇人妻中文字幕茄子| 欧美黄片视频在线观看免费 | 色情综合网| 操一对老熟妇爽上天视频| 国产精品极品美女视频| 成熟熟女国产精品一区二区| 国产真乱mangent| 天美麻豆精品视频99| 四虎精品一区二区| 天美麻豆精品视频99| 欧美亚洲首页| 色噜噜狠狠色综无码久久合欧美| 日日碰视频网| 91人妻素女| 亚洲,欧美,综合网| 国产 日韩 欧美 中文 另类,国产 欧美 另类 制服 变态,高清 日韩 欧美 中文,高 | 天天插天天插| 在线免费试看60秒| 秋霞曰韩R级| 另类老少妇| 亚洲精品中文字幕一区在线视频 | 亚洲精品亚洲人成在线麻豆| 超碰97首页| www.色婷婷色综合| 春色综合免费| 色色99| 91亚洲欧美| 97色插| 嫩呦国产一区二区三区AV| 色天堂在线观看| 国产 日韩 欧美 中文 另类,国产 欧美 另类 制服 变态,高清 日韩 欧美 中文,高 | 精精夜夜| 婷婷伊人五月| AV中文字幕剧情1区2区3| 免费看欧美美女黄色大片| 蜜臀一二三区| 97操操| 日日摸日日碰夜夜爽视频| 人妻少妇色综合| 亚洲在线网站| 欧美A√综合网| 久久社区一区二区三区| 超碰吊日色| 青草av在线| 思思热国产高清| 91天美传媒在线| 久久久久久国产精品免费网站| 天天操天天干美女网址导航| 999日韩中文精品观看视频。| 亚洲成人激情小说视频| 国产欧美黑人丰满在线| 天天日天天舔| 国产精品黑人一区二区三区| 天天干1区2区在线| 日本韩国一本产品小视频日本韩国一本产品久久久产品小视频日本韩国一本产品久 | 北约熟女超碰| 九九超碰综合网| 91色碰| 亚洲精品aa久久伊人| 熟女熟妇一区二区三四区| 欧美色66| 久99热| 欧美AAAA黄片| 婷婷人妻激情| 亚洲色图国产另类| 偷窥自拍A片| 91被操| 五月天婷婷社区| 毛片17S| 国产成人+综合亚洲+天堂| 豆花视频操逼网址| 欧美在线大香999| 超碰人妻中文在线| 国内91熟女人妻丝袜天天精品视频在线| 人妻丝袜一区二区三区在线| 青青欧洲黑| 亚欧美天堂在线| 把腿张开老子CAO烂你| 国内偷拍精品一区二区| 97在线免费公开视频| 91亚洲不卡一区| 五月丁香婷婷综合网| 岛国片在线播放| 国产超碰欧美| 97国产天堂岛| 九九久久首页| 天天操天天插| 国产免a费看黄片在线| 看全色黄大色大片免费视频| 亚洲熟妇白浆无码AV| 日本九九久久99播| 六月色婷婷| 九九无码视频| 国产成人无码a| 日本不卡一区二区| 九九九久久久W精品| 97碰碰日本乱偷人妻中文的| 国产精品熟女乱伦| 啪啪视频免费在线观看| 一本大道久| 男人的天堂在线| 亚洲精品蜜桃久久久一区二区三区| 伊人久久在线视频观看| 熟妇乱伦一区二区| 精品国产AV一区天美传媒| 91精品国| 97超碰色屌| 97激情97激情| 精品熟女一区=区三区| 96AV精品| 欧美在线干| 九色婷婷| 大香蕉黄色一区| 国产乱码精品一区二区三区四川| 国产久久成人| 国产又黄又爽又刺激久久久久久| 中文字幕99999| 91亚洲人| 九月伊人中文字幕| 男人久久天堂| 日本幼女18+| 久九九九九九九九热| 97中文综合| av橘色网站| 大色网久久| 中文有码9| 国产三级中文字幕粉嫩| 中出91视频| 亚洲色婷婷综合久久一区二区三区| 精品免费成人久久| 青青青草伊人精品| 97超碰免费生活| 国产1727欧美| 嗯嗯啊啊好大好爽| av72网| 日本高清加勒比| 蜜乳av一区二区三区| 粉嫩AV一区夜夜嗨| 亚洲本色精品一区二区久久| 少妇高潮九九九九| 欧美92| 中文字幕熟女人妻丝袜| 亚洲国产另类在线中文| 人妻三级在线中文字幕| 欧美成人性爱视频在线播放| AA级电影三区| 五月丁香拍拍激情综合三级| 亚洲国产ⅴ高清在线观看| 色久桃花影院在线观看| 久久精品美女一区| 秋霞视频一区二区| 欧美少妇熟女| 日韩中文字幕av在线播放| 91国精产品| 5252色欧美在线男人的天堂| 蜜桃久久一区二区| 8x福利精品第一福利视频导航| 日本色色视频网站| 丰满人妻大屁一区二区| 天天射,天天操,天天爽-国内精品一区二区三区-成人AV | 九九热免费国产视频婷婷伊人五月 | 欧美96交| 欧美同性恋 的搜索结果 - 91n| 国产乱子伦久久精品综合一区二区三| 亚洲午夜未满十八勿入网站日本又色又爽又黄 | 首页中文字幕中文字幕免费| 91精品丝袜在线观看| 久操高青|