99精品久久精品一区二区-亚洲熟妇无码?v在线播放-日本国产精品无码字幕在线观看-久久久亚洲永夜AV-亚洲一级无码一区二区一-免费国产成高清人在线视频-中文字幕乱码免费观看-国产毛片精品妇女久久久

ARTICLE DETAIL

資訊詳情

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

CLI-Anything:用聲明式配置自動生成標(biāo)準(zhǔn)命令行工具

CLI-Anything:用聲明式配置自動生成標(biāo)準(zhǔn)命令行工具 接手團(tuán)隊(duì)內(nèi)部工具鏈維護(hù)的第一周我光是把七個(gè)分散的腳本拿出來對齊參數(shù)格式就花了整整兩天。有人用 argparse有人用 click還有人直接拿$1拼邏輯。難受的還不只是格式不統(tǒng)一——新腳本加進(jìn)來的時(shí)候幾乎每個(gè)人都在重新發(fā)明輪子重復(fù)實(shí)現(xiàn)--help、參數(shù)校驗(yàn)、錯(cuò)誤碼、日志級別。CLI-Anything 就是在這個(gè)背景下冒出來的想法能不能把做一個(gè)命令行工具這件事抽象成一份聲明式配置讓任何腳本、任何 API、任何工作流都能在統(tǒng)一規(guī)則下變成一套標(biāo)準(zhǔn) CLI真正做到anything。這篇文章會完整拆解這個(gè)項(xiàng)目的設(shè)計(jì)思路和實(shí)現(xiàn)過程核心的配置即程序機(jī)制、把老舊 HTTP API 包裝成規(guī)范命令行工具的真實(shí)案例、從能跑到好用的細(xì)節(jié)打磨以及插件化擴(kuò)展和踩坑記錄。如果你平時(shí)經(jīng)常寫內(nèi)部工具、自動化腳本或者維護(hù)過多個(gè)互相之間毫無章法的命令行程序這篇應(yīng)該能給你一些可直接抄作業(yè)的參考。1. 被重復(fù)造輪子逼出來的想法CLI 腳手架為什么值得被標(biāo)準(zhǔn)化先說說痛點(diǎn)到底在哪。命令行工具的生態(tài)其實(shí)已經(jīng)很成熟了Python 系有 argparse、click、typerNode 系有 commander、yargsGo 系有 cobra、kong。每一個(gè)單獨(dú)拿出來都挺好用但落到一個(gè)團(tuán)隊(duì)、一個(gè)長期維護(hù)的項(xiàng)目群里面問題就變了每個(gè)工具用不同的庫、不同的參數(shù)風(fēng)格、不同的報(bào)錯(cuò)方式維護(hù)者要么忍受碎片化要么花大力氣統(tǒng)一。我當(dāng)時(shí)的處境是內(nèi)部系統(tǒng)有二十多個(gè)自動化任務(wù)有的直接是 shell 腳本有的是 Python 寫的定時(shí)任務(wù)有的要調(diào)用內(nèi)部 API 再格式化輸出。每個(gè)任務(wù)的入口參數(shù)、日志輸出、退出碼約定都不一致。上線一個(gè)新任務(wù)光是把輸入?yún)?shù)怎么解析、錯(cuò)誤怎么反饋這些樣板代碼寫一遍就得大半天而且寫出來的東西沒法復(fù)用。真正促使我動手做 CLI-Anything 的是一次線上故障。一個(gè)維護(hù)了很久的部署腳本突然跑掛了排查下來不是腳本邏輯錯(cuò)了而是它解析參數(shù)的方式和別人不一樣——?jiǎng)e的工具都接受--envprod這種長選項(xiàng)寫法這個(gè)腳本只認(rèn)位置參數(shù)$2操作手冊里也寫得含糊不清。那次事故之后我意識到CLI 的體驗(yàn)問題本質(zhì)上是一個(gè)工程規(guī)范問題不是某個(gè)腳本單點(diǎn)能解決的。1.1 為什么不做成又一個(gè)解析庫最初我確實(shí)考慮過直接選一個(gè)解析庫寫進(jìn)團(tuán)隊(duì)規(guī)范里比如強(qiáng)制大家用 click。但調(diào)研了一圈發(fā)現(xiàn)庫層面的規(guī)范約束力很弱新人來了不一定遵守存量腳本不會主動遷移而且每個(gè)庫的 help 風(fēng)格、校驗(yàn)機(jī)制、錯(cuò)誤處理差異依然存在。更關(guān)鍵的是很多內(nèi)部工具根本不缺一個(gè)更好的參數(shù)解析庫缺的是從業(yè)務(wù)函數(shù)到完整 CLI 程序的那一整段膠水代碼——幫助文檔、參數(shù)校驗(yàn)、配置讀取、日志級別、環(huán)境變量注入、shell 補(bǔ)全。這些事務(wù)性的工作高度重復(fù)跟業(yè)務(wù)邏輯本身沒有關(guān)系。既然這樣與其讓大家重復(fù)寫不如把它變成自動生成的東西。1.2 生成器加運(yùn)行時(shí)混合架構(gòu)的選擇所以 CLI-Anything 的定位很明確它不是一個(gè)解析庫而是一個(gè)CLI 腳手架生成器加輕量運(yùn)行時(shí)。用戶用一份聲明式配置描述這個(gè)命令長什么樣參數(shù)、選項(xiàng)、執(zhí)行邏輯、輸入輸出工具負(fù)責(zé)把它編譯成一套完整可執(zhí)行的命令行程序同時(shí)保留一個(gè)精簡的運(yùn)行時(shí)來加載業(yè)務(wù)邏輯。這個(gè)架構(gòu)參考了市面上一眾 CLI 框架的通用做法聲明式配置負(fù)責(zé)描述意圖代碼生成負(fù)責(zé)產(chǎn)出樣板運(yùn)行時(shí)負(fù)責(zé)執(zhí)行。為什么不用純運(yùn)行時(shí)解釋因?yàn)樯沙鰜淼某绦蚩梢源虺梢粋€(gè)自包含目錄單獨(dú)部署到任何機(jī)器上不依賴生成器本體而且對使用者來說生成出來的代碼是可讀、可改、可 audit 的不會變成黑盒。2. 核心機(jī)制一份 manifest 跑遍所有場景的配置即程序CLI-Anything 的入口文件叫manifest.yaml它描述一個(gè) CLI 程序的全部元信息命令名、簡介、版本、參數(shù)、選項(xiàng)、執(zhí)行器、鉤子。整個(gè)系統(tǒng)的設(shè)計(jì)哲學(xué)可以濃縮成一句話配置即程序。你不需要手寫 main 函數(shù)不需要寫 if/else 分支去處理參數(shù)只描述這個(gè)命令收什么、做什么、吐什么其余交給引擎。2.1 manifest 長什么樣以下面這個(gè)查詢天氣的命令為例這是最簡單的一類場景——執(zhí)行一個(gè)本地腳本并傳參command: weather description: 查詢?nèi)我獬鞘械膶?shí)時(shí)天氣 version: 0.3.0 arguments: city: type: string required: true help: 城市名稱如 beijing、shanghai options: units: type: choice choices: [metric, imperial] default: metric help: 溫度單位默認(rèn)公制 verbose: type: flag short: v help: 輸出詳細(xì)日志 adapter: type: exec command: scripts/fetch_weather.py args_template: {{city}} --units {{units}}這份配置說明命令叫weather必須接收一個(gè)位置參數(shù)city可選的--units參數(shù)只能在兩個(gè)值里二選一-v/--verbose是布爾開關(guān)真正干活的是后面的scripts/fetch_weather.py。CLI-Anything 的生成器讀這份 YAML 后會產(chǎn)出一個(gè)標(biāo)準(zhǔn)化的入口程序。用戶看到的幫助文本、參數(shù)解析、校驗(yàn)邏輯、退出碼處理都是自動生成的。不同命令的 manifest 即使內(nèi)容完全不同產(chǎn)出的交互風(fēng)格也完全一致這就從根源上解決了之前那種參數(shù)風(fēng)格七零八落的問題。2.2 為什么選 YAML 而不是 JSON 或 TOML這是一個(gè)被問過很多次的問題。選 YAML 有幾個(gè)實(shí)際考量一是 YAML 支持注釋manifest 里可以把每個(gè)參數(shù)的取值范圍、業(yè)務(wù)含義寫清楚這份配置本身就能當(dāng)文檔用二是多行字符串寫起來自然描述復(fù)雜的默認(rèn)值或模版不費(fèi)勁三是團(tuán)隊(duì)里大部分工程師都熟悉它運(yùn)維配置、CI 管道里到處是 YAML認(rèn)知成本低。當(dāng)然 YAML 也有坑比如縮進(jìn)錯(cuò)誤不易排查、某些值會被自動類型轉(zhuǎn)換。但生成器會做 schema 校驗(yàn)一旦字段類型不對、缺少必填項(xiàng)會在生成階段就報(bào)錯(cuò)而不是等你跑起來才爆。實(shí)踐中我把 manifest 的 schema 定義得非常嚴(yán)格command只能是合法標(biāo)識符arguments和options不能重名adapter.type必須在已注冊的適配器列表里。嚴(yán)格 schema 是配置文件能當(dāng)程序用的前提。2.3 運(yùn)行時(shí)怎么理解這份配置生成出來的程序啟動后運(yùn)行時(shí)會做四件事解析參數(shù)、校驗(yàn)輸入、規(guī)范化數(shù)據(jù)、分發(fā)執(zhí)行。解析參數(shù)這步生成器其實(shí)已經(jīng)根據(jù) manifest 把解析代碼寫死了運(yùn)行時(shí)只是執(zhí)行。校驗(yàn)發(fā)生在解析的同時(shí)——類型不對、必填缺失、枚舉值不合法都會被攔在業(yè)務(wù)邏輯執(zhí)行之前。規(guī)范化數(shù)據(jù)是個(gè)容易忽略但很實(shí)用的環(huán)節(jié)。比如--unitsmetric這種選項(xiàng)在 YAML 里是字符串到了執(zhí)行器那里weather 腳本期望的可能是整數(shù)枚舉。manifest 里可以配置transform字段做映射甚至寫一段內(nèi)聯(lián)表達(dá)式把輸入轉(zhuǎn)成執(zhí)行器想要的形態(tài)。分發(fā)執(zhí)行則是適配器的活兒。執(zhí)行器拿到標(biāo)準(zhǔn)化后的參數(shù)按照適配器類型去調(diào)腳本、調(diào) API、調(diào)容器再把結(jié)果收回來統(tǒng)一處理。這層抽象是整個(gè)Anything的核心具體展開放在第 5 節(jié)。3. 實(shí)戰(zhàn)把一個(gè)沒人維護(hù)的 HTTP API 包裝成規(guī)范 CLI 的完整過程理論講再多不如看一個(gè)貫穿到底的例子。團(tuán)隊(duì)里有個(gè)歷史悠久的內(nèi)部系統(tǒng)對外暴露了一組 REST API沒有 SDK文檔也停留在三年前。其中一個(gè)接口是查詢構(gòu)建任務(wù)的當(dāng)前狀態(tài)另一個(gè)接口是觸發(fā)重建。業(yè)務(wù)方經(jīng)常要在排查問題時(shí)手動 curl每次都要記 token、記參數(shù)、還要肉眼解析 JSON。用 CLI-Anything 包裝這個(gè) API整個(gè)過程大約花了四十分鐘產(chǎn)出是一個(gè)叫buildctl的命令行工具同事不需要懂 HTTP 細(xì)節(jié)就能用。3.1 把 API 描述成 manifest兩個(gè)接口GET /api/v1/builds/{id}查詢狀態(tài)POST /api/v1/builds/{id}/rebuild觸發(fā)重建。自然映射成兩個(gè)子命令buildctl status id和buildctl rebuild id。manifest 的寫法如下command: buildctl description: 構(gòu)建任務(wù)的查詢與重建工具 version: 1.0.0 options: server: type: string default: https://build.internal.example.com help: API 服務(wù)地址一般不用改 env: BUILDCTL_SERVER api_token: type: string secret: true help: 訪問令牌也可通過 BUILDCTL_TOKEN 環(huán)境變量傳入 env: BUILDCTL_TOKEN subcommands: status: description: 查詢構(gòu)建任務(wù)狀態(tài) arguments: id: type: string required: true help: 構(gòu)建任務(wù) ID adapter: type: http method: GET endpoint: {{server}}/api/v1/builds/{{id}} headers: Authorization: Bearer {{api_token}} output: json rebuild: description: 觸發(fā)一次構(gòu)建重建 arguments: id: type: string required: true help: 構(gòu)建任務(wù) ID adapter: type: http method: POST endpoint: {{server}}/api/v1/builds/{{id}}/rebuild headers: Authorization: Bearer {{api_token}} output: table這里有幾個(gè)設(shè)計(jì)細(xì)節(jié)值得解釋。API token 配置了secret: true生成器會把它從幫助文本、調(diào)試日志、錯(cuò)誤提示里全面屏蔽。用戶在 shell 里敲--api_tokenxxx會出現(xiàn)在 history 里所以更推薦用環(huán)境變量BUILDCTL_TOKEN傳入。運(yùn)行時(shí)會優(yōu)先讀命令行參數(shù)其次讀環(huán)境變量最后讀配置文件這個(gè)優(yōu)先級順序是 CLI 工具領(lǐng)域的通用約定我也沿用了。輸出格式分了兩種。status返回 JSON因?yàn)橐A敉暾侄喂┠_本消費(fèi)rebuild輸出表格因?yàn)槿丝吹氖沁@次觸發(fā)成沒成功、新任務(wù)號是多少。適配器內(nèi)部做了響應(yīng)解析狀態(tài)碼 2xx 正常輸出4xx 映射成使用錯(cuò)誤5xx 映射成運(yùn)行時(shí)錯(cuò)誤并附上響應(yīng)體里的錯(cuò)誤信息。3.2 生成后的使用效果生成出來的buildctl自帶完整的--help說明子命令各自有獨(dú)立的幫助文本。同事排查問題時(shí)只需要buildctl status 48293輸出會被格式化不再是一坨 JSON。必要的時(shí)候還可以接-v看到底層的 HTTP 請求細(xì)節(jié)方便定位 API 側(cè)的問題。值得注意的是這個(gè)工具也繼承了 CLI-Anything 的退出碼約定0 代表成功1 代表執(zhí)行時(shí)錯(cuò)誤2 代表參數(shù)用法錯(cuò)誤3 代表配置錯(cuò)誤。這樣它在 CI 腳本里可以放心地被判斷成敗不用解析 stderr 文本。圍繞退出碼、補(bǔ)全、交互體驗(yàn)的細(xì)節(jié)是下面一節(jié)的重點(diǎn)。4. 從能跑到好用錯(cuò)誤碼、補(bǔ)全腳本和交互細(xì)節(jié)的打磨生成器跑通只是第一步。CLI 工具的價(jià)值在日復(fù)一日的使用中體現(xiàn)而使用體驗(yàn)往往藏在細(xì)節(jié)里。這一節(jié)聊聊我在 CLI-Anything 里打磨得最多的幾個(gè)點(diǎn)。4.1 退出碼與錯(cuò)誤信息的規(guī)范很多內(nèi)部腳本的退出碼是亂來的有的直接exit 1有的exit -1本質(zhì)是 255有的干脆不設(shè)置。CLI-Anything 強(qiáng)制統(tǒng)一為四段式約定退出碼含義觸發(fā)場景0成功正常執(zhí)行完畢1運(yùn)行時(shí)錯(cuò)誤腳本崩潰、API 5xx、網(wǎng)絡(luò)不通2用法錯(cuò)誤參數(shù)缺失、類型不對、枚舉值非法3配置錯(cuò)誤manifest 校驗(yàn)失敗、配置文件不存在、密鑰缺失錯(cuò)誤信息統(tǒng)一寫到 stderr格式固定為[error] 簡短描述加提示可能的解決方案。這個(gè)錯(cuò)誤信息要帶建議的習(xí)慣是從 Go 的錯(cuò)誤處理哲學(xué)里借鑒來的光告訴用戶不對沒用要告訴他怎么改對。比如參數(shù)校驗(yàn)失敗時(shí)輸出不只是invalid value而是[error] --units 的值只能是 metric 或 imperial當(dāng)前收到 celsius [error] 提示在 buildctl.status --help 中查看 --units 的完整說明這在內(nèi)部工具的日常使用里省了太多的來回溝通。4.2 補(bǔ)全腳本不是錦上添花我見過很多 CLI 工具不提供 shell 補(bǔ)全內(nèi)部工具尤其如此。但實(shí)際用起來補(bǔ)全對效率的提升非常大——不是少敲幾個(gè)字母的問題而是減少記憶負(fù)擔(dān)。一個(gè)命令有哪些子命令、哪些參數(shù)、參數(shù)有哪些可選值全靠大腦記是不現(xiàn)實(shí)的。CLI-Anything 的生成器支持從 manifest 直接產(chǎn)出 bash、zsh、fish 三種 shell 的補(bǔ)全腳本。參數(shù)名、枚舉值、子命令名全部從 manifest 提取不需要額外維護(hù)一份補(bǔ)全定義。安裝方式也很簡單生成工具時(shí)帶--completions bash /usr/share/bash-completion/completions/buildctl即可。做補(bǔ)全時(shí)有個(gè)細(xì)節(jié)HTTP adapter 的場景里某些參數(shù)值來自遠(yuǎn)端 API比如構(gòu)建任務(wù) ID 列表。補(bǔ)全腳本沒法實(shí)時(shí)請求 API我就在 manifest 里支持了completions.command字段允許指定一個(gè)本地命令來動態(tài)生成候選項(xiàng)滿足這類高級需求。4.3 TTY 感知與交互式提醒終端工具的另一個(gè)細(xì)節(jié)是分清交互與非交互場景。CLI-Anything 在輸出上做到了 TTY 感知標(biāo)準(zhǔn)輸出重定向到文件或管道時(shí)自動去掉 ANSI 顏色只有在真正的終端里才展示彩色和進(jìn)度條。NO_COLOR環(huán)境變量也是被尊重的這在 CI 日志里特別重要——帶顏色轉(zhuǎn)義的日志傳到日志系統(tǒng)里就是一堆亂碼。還有一個(gè)我比較得意的設(shè)計(jì)當(dāng)必填參數(shù)缺失時(shí)如果檢測到當(dāng)前是交互式 TTY會提示用戶輸入而不是直接報(bào)錯(cuò)如果非交互比如在 CI 里就直接以退出碼 2 失敗并明確指出缺少哪個(gè)參數(shù)。這個(gè)行為模仿了現(xiàn)代 CLI 工具該省事時(shí)省事該嚴(yán)格時(shí)嚴(yán)格的普遍做法。4.4 日志級別與進(jìn)度展示manifest 里可以聲明verbose風(fēng)格的選項(xiàng)是否內(nèi)置。CLI-Anything 默認(rèn)注入-v顯示 INFO 級日志、-vv顯示 DEBUG 級日志、-q安靜模式只輸出關(guān)鍵結(jié)果。日志統(tǒng)一走 stderrstdout 永遠(yuǎn)只留主輸出這樣buildctl status 48293 | jq .result才不會被日志污染。耗時(shí)較長的任務(wù)比如觸發(fā)重建后等待完成會顯示進(jìn)度條但進(jìn)度條只在 TTY 下出現(xiàn)。進(jìn)度信息的實(shí)現(xiàn)我特意要求不能用第三方進(jìn)度庫因?yàn)樵\斷時(shí)進(jìn)度條到底在干什么很難追溯最終用了一套簡單的階段標(biāo)記加時(shí)間戳方案非 TTY 下直接輸出[3/5] 等待構(gòu)建完成...這種純文本行。5. 插件化擴(kuò)展如何讓 CLI-Anything 適配任意私有協(xié)議前面提到的adapter.type: exec和adapter.type: http其實(shí)是兩個(gè)內(nèi)建適配器。CLI-Anything 真正的野心在Anything這個(gè)詞上——它要能對接一切執(zhí)行形態(tài)。為此我設(shè)計(jì)了一套非常薄的插件接口任何團(tuán)隊(duì)私有協(xié)議都可以在半小時(shí)內(nèi)接入。5.1 適配器接口只有三個(gè)方法適配器本質(zhì)上是一個(gè) Python 模塊暴露三個(gè)鉤子parse把 manifest 和標(biāo)準(zhǔn)化參數(shù)轉(zhuǎn)成執(zhí)行動作、execute執(zhí)行動作并拿到原始結(jié)果、format把原始結(jié)果轉(zhuǎn)成用戶可讀的輸出。以 HTTP 適配器為例parse負(fù)責(zé)用 Jinja2 渲染 endpoint 和 headersexecute用 httpx 發(fā)請求并處理超時(shí)、重試、錯(cuò)誤碼映射format把 JSON 轉(zhuǎn)成表格或原始輸出。整個(gè)結(jié)構(gòu)非常簡單# adapter_demo/simple_mq_adapter.py class SimpleMQAdapter: name simple_mq def parse(self, ctx): return { queue: ctx.args[queue], message: ctx.args[text], priority: ctx.options.get(priority, normal), } def execute(self, action): return mq_client.publish(action[queue], action[message], action[priority]) def format(self, raw, output_mode): if output_mode json: return json.dumps(raw, ensure_asciiFalse) return f已發(fā)送到隊(duì)列 {raw[queue]}消息ID {raw[message_id]}插件只需要放到約定的目錄比如~/.cli-anything/adapters/或項(xiàng)目內(nèi)的adapters/目錄生成器會自動發(fā)現(xiàn)并注冊。manifest 里寫adapter.type: simple_mq就能直接用。5.2 鉤子機(jī)制解決執(zhí)行前后要做額外動作的需求很多真實(shí)場景不只是一個(gè)動作比如調(diào)用 API 之前要刷新 token執(zhí)行腳本之前要檢查依賴。CLI-Anything 提供了hooks段hooks: before: - command: scripts/refresh_token.py args_template: {{api_token}} after: - command: scripts/notify.py args_template: {{status}}鉤子可以串任意命令也可以調(diào)用其他 adapter。這套機(jī)制和 CI 工具里的前后置腳本一個(gè)思路但它跑在本地命令執(zhí)行前所有鉤子共享同一個(gè)上下文字典鉤子產(chǎn)生的輸出可以注入到主執(zhí)行器的參數(shù)里。比如刷新 token 那個(gè)鉤子會把新 token 寫回上下文主 HTTP 請求就能直接用上。5.3 插件發(fā)現(xiàn)的細(xì)節(jié)與安全性插件放目錄、自動發(fā)現(xiàn)聽起來很美好但有個(gè)安全點(diǎn)必須處理自動發(fā)現(xiàn)的插件等于任意代碼執(zhí)行。所以 CLI-Anything 對非內(nèi)建適配器做了一個(gè)限制使用插件前需要顯式聲明信任生成器會提示該適配器來自非官方路徑是否信任并把信任記錄寫到用戶級配置文件里。這個(gè)設(shè)計(jì)參考了現(xiàn)代包管理器普遍采用的首次使用需確認(rèn)機(jī)制不算首創(chuàng)但確實(shí)能擋掉不小心的攻擊面。6. 若干坑位記錄與我的最終取舍最后寫幾個(gè)真實(shí)踩過的坑。CLI-Anything 前后迭代了快一年凡是能在文檔里查到的方案我都不想重復(fù)說這里挑幾個(gè)最容易被忽視、又最影響實(shí)際體驗(yàn)的問題。6.1 生成代碼與運(yùn)行時(shí)解釋的邊界第一版我傾向全量生成——把解析代碼、幫助文本、校驗(yàn)邏輯全部生成到目標(biāo)目錄好處是產(chǎn)物完全獨(dú)立。但很快發(fā)現(xiàn)一個(gè)問題manifest 一變整個(gè)目錄都要重新生成代碼 diff 一片混亂審計(jì)困難。后來改成生成薄殼加運(yùn)行時(shí)解釋生成器只產(chǎn)出入口腳本和編譯后的 manifest解析邏輯統(tǒng)一走運(yùn)行時(shí)庫。這樣改 manifest 后 diff 很小運(yùn)行時(shí)升級也能直接給所有已部署的工具打補(bǔ)丁。產(chǎn)品形態(tài)上這是正確的取舍寧可讓產(chǎn)物多一個(gè)運(yùn)行時(shí)依賴也不要每一次小改動都通篇重生成。6.2 Windows 兼容性比想象中惡心內(nèi)部工具有一部分同事在 Windows 上跑Git Bash 環(huán)境這里全是細(xì)節(jié)exec適配器執(zhí)行外部命令時(shí)路徑分隔符、.py腳本解釋器的選擇、CRLF 與 LF 的混用稍微不注意就會翻車。我最終的策略是能少依賴 shell 就少依賴exec適配器默認(rèn)用 Python 的subprocess以列表形式傳參不做字符串拼接所有外部腳本統(tǒng)一在 manifest 里聲明解釋器避免依賴系統(tǒng)默認(rèn)關(guān)聯(lián)。Windows 的另一個(gè)坑是 stdout 編碼。很多腳本在 Windows 控制臺輸出 GBK 編碼文本被日志系統(tǒng)收集后顯示亂碼。處理方式是運(yùn)行時(shí)統(tǒng)一以 UTF-8 作為輸出編碼遇到無法解碼的字節(jié)流時(shí)做替換而不是拋異常。這個(gè)小改動讓上海同事那邊的日志終于能看懂了。6.3 子進(jìn)程輸出緩沖導(dǎo)致的日志遲到exec適配器最初直接調(diào)用外部腳本腳本的 stdout 和 stderr 混在一起輸出看似正常但一旦腳本阻塞日志會積壓到最后一次性噴出來。排查了半天才發(fā)現(xiàn)是子進(jìn)程的管道緩沖問題——外部程序檢測到 stdout 不是 TTY 時(shí)會啟用塊緩沖而不是行緩沖。解決方案是給exec適配器加了一個(gè)stdbuf兼容層Linux 下用stdbuf -oL強(qiáng)制行緩沖其他平臺退化為不設(shè)置同時(shí)把 stdout 和 stderr 分成兩條管道獨(dú)立讀取。這個(gè)坑非常隱蔽如果沒有在真實(shí)的長任務(wù)里觀察根本不會暴露。6.4 什么情況不建議用 CLI-Anything說了這么多也得潑點(diǎn)冷水。CLI-Anything 適合的是命令結(jié)構(gòu)清楚、參數(shù)規(guī)則明確、主要工作是調(diào)用現(xiàn)有能力的工具典型如內(nèi)部 API 客戶端、運(yùn)維腳本封裝、CI 輔助命令。它不太適合高度交互式的終端應(yīng)用比如那種要畫全屏菜單的工具也不適合對性能極致敏感的超高頻小命令——啟動一個(gè) Python 運(yùn)行時(shí)畢竟有固定開銷一次調(diào)用幾十毫秒的性能敏感場景直接用 C 或 Go 寫更合適。這也不算缺陷更準(zhǔn)確的說是定位清晰。我做這個(gè)項(xiàng)目的初衷就是消滅重復(fù)的 CLI 腳手架讓團(tuán)隊(duì)的內(nèi)部工具收斂成一套統(tǒng)一交互風(fēng)格這件事的收益遠(yuǎn)遠(yuǎn)大于那點(diǎn)運(yùn)行時(shí)開銷。最后分享一個(gè)踩過多次坑后沉淀下來的習(xí)慣manifest 一定要放進(jìn)版本庫并且從生成產(chǎn)物里反解出 manifest 的版本號。因?yàn)樯晒ぞ呤欠稚⒉渴鸬木€上跑著的是老版本產(chǎn)物你改完 manifest 之后根本不知道哪臺機(jī)器還跑著舊邏輯。給 manifest 加一個(gè)generated_from字段記錄生成時(shí)的 git commit排查問題的時(shí)候能少掉一半頭發(fā)。我實(shí)際維護(hù)中靠這個(gè)字段定位過至少三次因?yàn)楦耐隂]重新生成導(dǎo)致的詭異故障。CLI-Anything 本身終歸是個(gè)工具真正讓工具鏈變得可靠的是這一層工程紀(jì)律。
返回列表
PREV
查看更多資訊
NEXT
返回資訊列表
日韩av高清| 婷婷丁香激情| 色爽干| 激情黄色五月天| 久久综合五月天激情小说网站| 日日日天天干| 日日色五月天| 九九视频免费| 色欲丁香| 99人妻碰碰碰久久久久视| 五月丁香香蕉| 超碰97免费在线| 再次出发二| 色yeye欧美| 丁香婷婷五月综合色情| www激情| 久久网站免费亚洲| 99在线视频色版| 九月婷婷在线视频| 丁香8月手机综合| 91九色丨国产丨爆乳| 久久黄色网扯| 久久99这里只有精品| 5月丁香美女影院| 色综合大香蕉| 九九青草热| 五月婷婷丁香大陆免费| 天天天操天天天爰| 人人操Av| 色色色精品无码区| 26uuu国产色| 99九九综合久久九九| 九月色婷婷婷| 成人性生活免费观看。| 日韩欧美不卡| 99riAV成人在线视频| 97碰免费视频在线| 99re8这里只有精品99re8热视频| 91狠狠色丁香婷婷综合久久| 天天色天天日| 五月激情综合网| 操日视频| 久99久视频| 五月天四色房丁香亭亭| 日本色婷婷| 1010日日无码| 欧美色五月天| 99热这里是精品| 天天综合亚洲综合| 色婷婷裸体色性在线| 26UUU亚洲欧美| 26UUU成人网| 九九香蕉网| 日本人人干| 九九美女视频| 五月婷婷丁香六月| 九月丁香婷婷| 5月婷婷综合| 天天综合久久| 激情5月天天天| 丁香五月婷婷呀| 99在线精品视频观看免费下载| 日本综合色色| 91精品熟女| 精品视频这里只有精品| 婷婷丁香五月激情中文字幕版| 伊人六月丁香婷婷| 五月激情综合网| 五月婷婷天天| 久热这里只有精品6| 香蕉综合在线| 99ER热精品视频| 欧美性生交XXXXX无码小说| 国产超碰在线| 69久久久| 香蕉久久国产AV一区二区| 99自拍视频网站| 97AV在线视频| 激情综合网亚洲色图| 夜夜爽天天日| 婷婷五月激情五月激情| 激情婷婷护士激情| 欧亚色色| 天天色综网| 97碰人人操| 色九九综合| 能看的av| 九九99热久久精品66中文字幕| 精品网站:999WWW| 激情综合五月天| 五月天天天综合| 五月丁香婷婷AV天堂| 六月婷色六月| 亚洲AV网站| 操碰97| 亚洲精品V天堂中文字幕| 天天久久婷婷| 久久成人性爱| 九色视频91疯狂| 色婷婷亚洲婷婷| 国产在线网| 九九热91| 涩涩婷婷五月| 五月天丁香| 五月丁香色停停啪啪啪| 亚洲热手机在线观看| 五月婷在线色视频| 六月天婷婷| 色婷婷狠狠18yy| 9月色婷婷| 婷婷丁香五月激情图片| 99精品视频免费观看| 九九色网专区| 欧美久久五月婷婷| 亚洲色综合| 丁香五月婷婷色综合| www.91九色| 五月丁香va| 色综合色| 婷婷丁香大香蕉| 久久之人妻| 色婷婷视频在线| 五月天成人综合| 五月天婷婷丁香基地在线观看| 天天操天天草天天草天天| 中文av网站| 天天插天天插天天插天天插 | 色婷婷综合影院| JAPANRCEP老熟妇乱子伦视频| 成人五月天。COM| 久久九区| 97av在线视频| 丁香激情网| 久狠日av| av一区免费看| 六月久久狠狠| 九月停停| 韩国天天婷婷| 任你搞在线观看视频| 色综合久久88色综合天天人守婷| 色偷偷五月天| 婷婷 久综合| 国产精品色色| 成人Av在线大片| 色婷婷五月天不卡| 激情熟女网| 精品一区二区三区木瓜| 久久九九激情五月天| 夜夜人妻五月天| 97干网站| 色情婷婷| 国产FREESEXVIDEOS性中国| 婷婷涩五月| 91免费看片| 琪琪色热色色| 26uuu精品一区二区| 婷婷伊人网| 任你日视频| 婷婷涩涩五月天| 婷婷婷婷婷婷婷婷| 精品久久9| 女人天堂久久| 91超级碰| 综合色五月亭亭| 99re这里只有精品首页| 九九九九成人| 婷婷色播婷婷| 九九综合精品| 综合久久综合五月天婷婷| 婷婷丁香五月激情图片| 9色免费网| 婷婷六月丁| 99久久久久久久| www.色婷婷| 婷婷天堂视频| 操碰91| 五月婷婷综合色啪首页| 九月丁香八月婷婷久久综合久97| 大香蕉人妻| 色综合色综合婷婷热| 第九色区av天堂| 69婷婷丁香午夜| 大鸡巴伊人网| 天天射综合网站| 日本精品在线噜噜噜| 婷婷97| 五月婷婷色吧!| 大香蕉人人网| 五月天综合在线| 3p日韩网站视频| 丰滿爆乳一区二区三区| 91婷婷在线| 99re最新地址视频| 婷婷玖玖丁香| 亚洲日韩乱码一区二区三区四区| 丁香五月天激情综合| 婷婷在线播放av| 香蕉久久国产AV一区二区 | jizzdr| 武则天精品久久| 亚洲色婷婷| 婷婷六月五月天综合| 97超碰在线免费观看| 成人av免费观看| 五月色导航| 亭亭玉月丁香| 成人.在线日韩| 色色亚洲五月天| 9l视频自拍9l九色成人| 五月婷婷之综合激情在线| 中文字幕AV在线播放| 综合婷婷六月| 久久欧洲久久| 五月 成人 婷婷| 久草热8精品视频在线观看| 婷婷天天婷婷天天澡| 久久这里都是精品免费| www.jiujiujiu| 《亚洲操B久久免费在线观看,亚洲操B久久在线播放》在线播放 - 高清资源 - 97 | 狠狠狠狠狠干| 91超级碰| 天天插天天插| 99热这里只有精品86| 久久五月丁香婷婷| 色欧美影院| 婷婷五月天性色| 97干在线| 五月婷婷av| 丁香五月激情鲁| 丁香五月天偷拍| 婷婷综合九月| 92久久久| 一区无码| 91美女啪啪| 国产FREESEXVIDEOS性中国| 久久人人九| 久久AV电影| 婷婷色五月噜噜| pom538精品视频| 色色色丁香| 无码日本精品XXXXXXXXX | 九九九九国产| 亚洲精品影视| 99久久久久| 真实亲子乱子伦高清在线观看| 婷婷六月丁香色| 五月综合色播播丁香婷婷| 99热福利| 538在线| 超碰九九热| 日本三级毛片| 午夜九九九九九九九九九九九九九| 国内熟女黄色系列| BlACKEDRAW视频一区二区| 免费看欧美成人A片无码| 变态另类9| 婷婷五月综合网| 操一操干一干| 九九色综合网| 激情五月小说婷婷| 国内外色色色色色成人视频| 欧美内射AAAAAAXXXXX| 久久人人妻| 五月综合无码| 亚洲国产精品VA在线看黑人| 大香蕉婷婷婷| 中文字幕亚洲-区久久99婷婷| Www.se.久久| 午夜微拍福利| 人人操人人爰人人一天天碰夜夜拍夜夜爽-中国A级毛片天天看天天谢… | 亚洲人妻一区二区| 五月婷婷激情久久| 亚洲综合草草| 大香蕉人妻| 美日韩成人| www狠狠| 99久久婷婷国产综合精品草原| 26uuu国产| 丁香五月激情综合| 精品热九九| 2022久久婷婷| 久久精彩免费视频精彩免费视频| 九九久久这里只有精品XB| 欧美99热| 人人视频人人干人人做| 99自拍视频网站| 婷婷啪啪| 97成人丁香| 五月开心啪啪| 亚洲亚洲激情| 综合久久99| 91婷色| 五月天综合久久| 嫩草AV久久伊人妇女超级A| 天久综合91综合首页| 婷婷综合玖玖五月| 久久婷婷激情五月天一区二区| 婷婷丁香五月天在线视频| 五月天激情婷婷小说| 人人摸人人搞| 午夜69成人做爰视频| 丁香五月欧美婷婷| 色婷婷色五月另类综合| jiZZdr| 久久五月丁香| 激情丁香五月天图片| 99精品久久久| WWW,五月| 久久精品国产一区二区三区四区 | 熟女激情五月天| 中文字幕在线资源| 婷婷综合偷拍| 九九热短视频在线观看| 成人在线99| 亚洲 成人 电影av在线观看| 电影《战争与艾拉》免费观看| 五月天久久综合婷婷丁香| 热久久91| 丁香天堂夜| 五月天激日本色情在线| 最新av在线观看| 久久黄色片| 超碰免费成人| 超碰人人操| 大伊香蕉精品视频在线| 精热在线综合网| 婷婷五月天在线一区| 丰满老熟妇BBBBB搡BBB| 丁香综合婷婷开心激情网| 色色网站免费| 狠狠色婷| 精品皮股午夜AV| 99热国产免费| 五月6香色婷婷视频| 婷婷色色婷婷| 操人精品| 丁香六月婷婷综合缴| 精品一二三区久久AAA片 | 天天做天天视天天谢| 五月天婷婷在线播放| 无码少妇高潮喷水A片免费| 九九 激情 网| 婷婷五月综合啪| 色婷婷精| 99热在线免费| 久久免费干| 婷婷五月天xxx| 婷婷色五月天在线观看| 97久久视频| 思思热在线| WWW久久99久久99久久| 电影蜘蛛女| 老司机日日夜夜青草| 狠狠情色| 91精品婷婷国产综合久久| 九九精品婷| www久热com| 99热九九在线| 另类国产欧美视频| 99激情视频| 午夜九九九九九九| 丁香五月婷婷基地| 婷婷伊人久久| 人妻久久久| 永久的网站AAAA| 丁香婷婷久久 | 这里只精品| 色综合五月| 婷婷欧美激情综合| 国产XXXX搡XXXXX搡麻豆| 五月婷婷狠天天色综合| 五月丁香婷婷钟和色图| 色噜噜狠狠插综合| 综合狠狠干| 激情五月丁香社区| 色婷婷五月天亚洲| 666555。COm毛片| 五月天激情Av| 亚洲AV无码成人精品电影| 婷丁香五月天| 五月天婷婷在线观看精品男人| 国产毛片精品一区二区色欲黄A片| 噜噜噜噜噜日本视频| 久久无码成人| 婷婷性福五月天| 中文字幕欧美久久| 亚洲免费看片| 久久久久久性爱视频| 成人在线网站| 超碰人人草| 九九操综合网| 六月婷婷香蕉| 日产精品一线二线三线芒果| 五月婷婷色五月| 亚洲在线综合| 久久大大香| 色播播婷婷| 久久久久久综合88| 综合久久五| 泰州成人视频| 韩国情人在线电视剧免费观看高清版全集 | 人色五月天婷婷| 久久ri精品视频| 色综合色五月| 国语精品探花| 欧美色图45678| 久久久久亚洲AV综合| 婷婷色五月色| 久久er九九| 五月婷婷婷色| 97久久视频| 性爱视频99| 99re66热这里只有精品| 国产成人亚洲综合亚洲| 午夜天堂一区人妻| 99日本在线| 少妇口诉沐足视频播放器网址| 色久99| 色婷婷九月| 天天日天天干天天天| 久久精彩综合视频| 秋霞丝袜啪啪啪| wwwss在线观看| 第四色五月天| 天天综合网亚洲综合网| 五月天另类小说亚洲| 婷婷激情97| 女人天堂AV| 丁香五月天综合| 久久狠狠色| 99久久9| www.9色色色| 激情99| 99热在线观看| 婷婷瑟瑟五月天| 久久这里只有国产| 色婷婷亚洲| 欧美日韩中国| 第四色色色色色丁香五月天| 97干干干丁香| 超碰v| 久久婷婷综合网| 激情五月四色| 五月丁香婷庭在线| 九九热在线观看视频网站| 99ri精品视频在线观看| 991国产精选视频在线播放下载| 91丁香色| 99在线精品免费视频| 久久婷婷六月综合| 99热在这里只有精品| 色噜噜狠狠色综无码久久合欧美 | 婷婷五月天天爽| 欧美综合激情五月天| 亚洲激情 久久| 久久丁香五月天| 青青草轻轻操| 久99久在线| 日本久久精品18| 9 1大香蕉| 九九热视频精品999| 成熟妇人A片免费看网站| 99久久激情视频| 婷婷五月天久久| 久热中文字幕| 婷婷九月色| 噜噜噜狠狠色综合| 人人播| 这里只有精品视频99| 欧美日韩成人在线网| 亚洲国产99| 五月婷婷综合丁香视频| 久久婷五月综合| 操逼巨乳91| 激情亭亭五月| 丁香成人五月天| 亚州操人在线视频| 五月婷婷激情综合| 婷婷香蕉精品| 在线看av| 91热爆在线| 婷婷色色网| 久久最新色色色| 99精品这里只有免费视频| 久久最新色色色| 襙比视频| 99精品网| 色婷婷五月天偷拍| WW婷婷五月天com| 日韩AV在线免费| 丁香综合久久| 中文网AV| 精品人妻久久久久| 丁香色婷婷| 99精品成人无码A片观看金桔| 丁香五月天久久| 97久久超级| 一区二区免费看| 久/久精品99看9| 亚洲综合网激情小说| 婷婷五月久久| 婷婷丁香人妻天天久久| 日本 @ va 免费| 91成人性爱视频| 五月婷婷影院| 国产肥白大熟妇BBBB视频| AV在线免费观看不卡| 久久婷婷五月综合色丁香| 日本久久高清| 五月开心激情网| 99性爱视频| 丁香五月综合| 婷婷五月天大香蕉| 深爱激情网婷婷| 深爱五月激情五月| 99欧美| 色99xx| 97操操| 五月婷婷久草在线视频综合| 色色射| 亚洲啪啪自拍| 激情综合网五月天天| 一本久道综合色婷婷五月| 日本久久婷婷| 丁香五月激情啪啪啪啪| 色情五月丁香婷婷网| 色吧五月婷婷| 国产特级毛片AAAAAAA高清| 激情五月婷黄版| 日韩砖区| 亚洲AV成人在线| 啪啪五月婷婷| 人妻videos人妻高清| 亚洲无码11| 99视频在线9| 9久久精品| 九九热这里只有精品6| 国产成人精品一区二三区熟女在线 | 五月天婷婷色播| 日本操碰碰| 婷婷五月天最新网址| 国产99美少妇| 97色色婷婷| 丁香五月天婷婷91| 狠狠操狠狠做| 97日韩无套内| 激情的五月| 国产精品电影| 秋霞成人毛片一级A片| 99精在线| 婷婷五月成人社区| 色5月婷婷| 欧美成人AAA片一区国产精品| 婷婷操超碰| 婷婷丁香五月亚洲| 丁香五月 性爱| 伊人六月无码视频| 中文字幕人妻熟女在线| 综合久久婷婷五月丁香| 婷婷五月在线观看| 久久婷婷成人视频| 大香蕉啪啪网| 婷婷97狠狠干| 国产看真人毛片爱做A片| 五月丁婷香| 9999久久久久| 丁香五月婷婷六月婷婷| 精品人妻一区| 99高级会所久久| 婷婷导航| 综合性视频99| 五月久久丁香| 婷婷六月啪啪| 国产avapp 网| 五月丁香综合激情网| 久九色| 成人日韩欧美| 夜夜骑操AV| 最近中文字幕大全免费版在线| 丁香无五月网| 日产精品一线二线三线芒果| 亚洲五月天婷婷综合| 热99色| 亚洲成人在线五月天| 五月婷九九草| 激情爱爱网站| 婷婷色五月婷婷姐妹| 激情五月天视频| 日韩99色| 色黄啪啪| 中文字幕视频在线播放| 九九热这里只有精品556| 天天日天天舔| 五月花丁香婷婷| 99热在线看| 一级精品999WWW| 99国产小视频2013| 久久R激情| 人人爱摸视频| 色之综合网| 婷色天堂| 热99免费在线| 婷婷激情五月天在线视频| 五月天丁香久久综合| 五月天婷婷视频小说| 激情黄色小说色五月| 久草五月| 天天摸天天做天天爱天天爽| 这里只有精品偷拍| 婷婷色狠狠| 亚洲综合1024| 五月色天五月色| 五月婷婷日| 日本狠狠色| 婷婷五月天香蕉| 97操操操| 91操女| 国产性爱亚洲是图| 深爱激情丁香五月| 婷婷五月天中文字幕.| 操B无码视频国语| 毛片新网地| 久久婷婷五月草视频在线播放| 色欲色香,www,com| 激情四射五月天| 天天激情欧美美女| 九六五月天婷婷| 香蕉婷婷色五月| 小香蕉av| 亚州色色色| 一级操逼内射在线视频| 婷婷久久婷婷色五月| 久热精品在看| 黄色国久久| 色吧五月婷婷| 可以免费观看的AV| 激情五月,深深爱五月| 亚洲啪啪啪啪| 51XX嘿嘿午夜无码| 精品一区久热| 欧美私人家庭影院| 五月丁香六月成人| 丁香五月婷婷综合精品素人| 日日夜夜天天爽| 婷婷五月蜜桃成人桃色丁香| 曰曰久久| 日本九九网| 超碰2021| 99在线资源视频| 色99在线| 26uuu日韩| 99人碰碰碰| 亚洲另类视频| 激情五月丁香六月| 人人看人人摸人人| 色综合久久88色综合中文字幕| 五月丁香| 亚洲av成人在线| 91pornav在线| av在线不卡播放| 97搞在线| 欧美日本不卡黄色片| 婷婷五月花| 精品色色| 国产国产乱老熟女视频网站97| 婷婷激情五月综合| 亚洲色综合| www.精品99| 狠狠干综合网| 91操片| 五月色丁香| 欧美啪啪9| 色色无码| 新97人人上人人| aa久久| 丝袜人妻| 开心激情综合| 超碰免费人人| 成人精品视频99在线观看免费| 性做久久久久久久免费看| 99热| Www.sesese丁香| 日韩不卡123| 丁香五月婷婷www..com| 久久一级片| www久久艹| 亚洲另类婷婷综合| 天天操天天爱天天日| 亚洲 综合中文| 就99这里只有精品| 色丁香五月综合网| 这里只有精品1| 五月婷婷激情| 九九色综合| 婷婷激情五月| 伊人狼人干| 天天肏天天肏| 亚洲综合99| 少妇丁香婷婷 | 婷婷综合中文字幕| 综合久久伊人| 天天爽人人综合免费7799| 欧美噜噜免费观看| 夜夜做夜夜愛| 丁香婷婷五月综合| 超碰在线成人| 五月丁香 狠狠爱| 天天综合 99久久婷婷| 九九RE视频在线精品| 天天摸天天舔天天爽| 日韩综合大黄| 操九色| 99久在线精品99re8热| 草草色情综合网| 色99婷婷五月天| 密黄站| 日韩色色视频www| 婷婷激情视频| 无遮挡国产高潮视频免费观看 | 五月婷婷AV| 夜夜谢天天干| 殴美97色| 激情五婷精品网在线观看网址| 日韩欧美骚货| 99久在线精品99re8热| 综合av在线| 97欧美在线| 啪啪婷婷五月天激情| 久热这里| 色级停停| 五月丁香成人网| 五月丁香六月婷婷视频| 99色视频| 久久九九精彩| 五月丁香欧美综合免费视频| 色欲婷婷五月天| AV色色天堂中文| 一区二区三区视频| 狠狠干夜夜干| 五月天开心色色网| 天天弄天天爽| 丁香六月激情四射| 亚洲天堂青草| 极品 少妇 内射| 欧美色图天堂网| 色色色五月| 丁香婷婷久久激情| 婷婷中文字幕| 91久久综合亚洲噜噜成人在线| 天天橾日日橾夜夜橾17| 九九热在线精品视频| 久久99精品久久久久子伦| 五月婷婷九月婷婷九月婷婷| 91蜜桃婷婷狠狠久久综合9色| 97综合色片| 婷婷婷婷色| 日本三级成人秘书精品片| 丁香蜜臀黄色婷婷五月天| 激情图片婷婷丁香五月| 亚洲人人艹| 九九热视频免费| 老师的粉嫩小又紧水又多A片视频| 五月婷在线观看| 五月天综合网| 激情五月份婷婷| 婷婷干五月综合在线播放| 国产AV一区二区三区最新精品| 狠狠舔| 五月天婷婷基地| 六月色播| 丁香激情网| 久久精品系列| 婷婷的色色五月天| 丁香玖玖| 久久婷婷色综合| 1024婷婷综合久久五月天| 99激情视频| 久久9RE热视频精品98| 久久这里都是精品| 热996精品在线观看| 色五月丁香网| 狠狠久综合| 欧美精品18| 六月婷色| 五月丁香婷婷久久| 九色婷婷| 这里只有精品视频在线| 天天做综合| 午夜少妇在线观看视频| 六月丁香婷婷网| 超碰日韩成人| 26uuu欧美激情另类| 9999热免费视频视频| 婷婷五月天综合久久| 婷婷性爱视频在线| 97碰碰视频在线观看| 六月丁香久久| 六月丁香五月婷婷| 99热99这里有免费的精品| 久久91久久精品久久| 天天日,天天插| 99久精品| wwwss在线观看| 天天做天天爱天天日| 99视频| 日韩在线五月天婷婷| 五月婷婷激情日本| 深爱综合网| 亚洲Av入口| 大香蕉在线观看9| 久久婷婷五月综合激情国产| 综合久久99| 五月天色色无码| 天天干夜夜想| 色五月综合在线| 国产精品18久久久| 俺去啦综合网| 久久东京热婷婷五月| 丁香成人五月天| 五月丁香激情婷婷综合| 成人色图情色成人网 www.5b5b5bcom 五月天| 9999三级片| 五月天亚洲最大成人| 色五月天 丁香| 五月色婷婷中文字幕| 欧美久久五月婷婷| 亚洲AV无码成人精品电影| 国产午夜一区二区三区| 操熟女成人网| 在线中文字幕视频| 亚洲黄色网址| 九九99九九99| anquye五月| 亚洲AV综合在线观看| 粉嫩AV久久一区二区三区| 丁香六月五月天| 亚洲国产精品五月天| 丁香婷婷婷婷十二月在线观看视频| 婷婷99视频精品| 九九婷婷五月天影视| 操人久久| 亚洲黄网AV| 337p大胆噜噜噜噜噜91Av| 五月天婷婷导航| 五月天啪啪视频| 九九色网| 内射爽无广熟女亚洲| 狠狠狠色激情综合适合| 婷婷爱综合| 91人操| 麻豆忘忧草午夜| 久热9| www99在线观看视频| 开心五月婷婷激情网| 日本69日人视频| 超碰99成人在线| 欧美精品XXXXBBBB| 丁香婷婷性爱| 丁香六月婷婷综合缴| 中文aV网| 色婷婷婷av| 丁香六月狠狠干| 国产精品黑丝| 香蕉AV777XXX色综合一区| 99啪| 欧洲色色| 激情99在线视频| 色五月av伊人| AV大香蕉| 九色91视频| 丁香花操逼| 综合五月激情| 欧美性猛交99久久久久99按摩| 九九精品热| 色九月婷婷综合| 婷婷五月丁香在线视频| 婷婷激情五月天小说| 亚洲综合干| 色激情综合狠狠婷婷| 久草A片| 99在线视频资源| 婷婷六月综合基地| www,色综合| 超碰中文字幕在线| www.九月婷婷丁香.com| 天堂在线观看视频| 2025超碰| 五月伊人91| 九月丁香很很色| 琪琪色五月婷婷老师| 天堂成人A片永久免费网站| 日本三级韩三级99久久| 五月天色丁香| 色色色色综合| 五月婷婷色五月| 激情五月天婷婷丁香| 久久99综合| 天天精品视频免费观看| 婷婷丁香五月亚洲17cao| 99免费热视频在线| 亚洲激情另类| 午夜大香蕉| 九九视频在线观看视频6 | 五月天激情小说| 极品少妇高潮啪啪AV无码| 国产FREESEXVIDEOS性中国| 日日做A爰片久久毛片A片英语| 成人做爰A片免费看网站找不到了| 精品一区二区三区免费毛片爱| 韩国真做片在线观看| ..真实国产乱子伦对白在线_欧| 中文字幕免费高清电视剧| 丁香五月激动深爱欧美| 五月婷无码| 大香蕉人人网| 成人网站在线观看视频| 五月在线婷色| 亚洲成人乱码av网站| www.色五月.com| 无码橾| 丁香成人五月天| 少妇高潮呻吟A片免费看软件| 亚洲综合网在线| 日韩天堂久久| 91精品在线看| 婷婷狠狠久久| 79色色色色| 六月婷久久| 久久久97| 五月天婷婷色综合| 久久免费操| 久久黄色免费视频| 天天操夜夜爽歪歪| 自拍偷窥99热| 99久久精品免费精品国产_国产精品久久久久久_国产在线|日韩_久久国产精品电影 | 丁香五月天在线观看视频| 综合久色五月| 丰满熟女人妻一区二区三| 超碰人人超碰| 青青草免费公开视频| 精品导航在线x不卡| 五月天激情小说| 性色99| 大香蕉九操| 国产精品激情AV久久久青桔| 亚洲第二AV| 五月丁香爱婷婷深深| 五月婷导航| 91碰碰碰| 99精品综合在线| 色欲久久综合| 丁香六月婷婷综合啪啪| 91狠狠色丁香婷婷综合久久精品| 色欲色欲久久宗合网| 日韩啪| 色综合综合网| 99热久| 久久九九re热| 色综合色综合色综合高潮| 欧美Va日本Va| 无码少妇高潮喷水A片免费| 久久视频婷婷| 99黄色| 精品人妻久久久久久| 9久热在线视频| 中文字幕婷婷五月天| 九九热精品视频| 99ER热精品视频| 色综合综合色| 丁香桃色网| 无码人妻精品一区二区蜜桃色欲| 色情婷| 99爱无码| 欧美性猛交99久久久久99按摩| 久久婷婷色综合| 亚洲aV写真天天综合网久久| 色色婷婷五月天| 97视频.干com| 人妻无码精品一区| 国产真实乱了老女人视频| 日韩黄黄| 丁香五月激情网| 亚洲人成播放网站| 激情五月天之六月婷婷| 狠狠操综合| 97碰人人操| 开心激情网在线| 丁香五月婷中字在线| 二人电影免费版在线观看| 成人片在线播放| 1区2区视频| 五月开心激情| 亚洲中文字幕在线电影| 丁香五月天婷婷中文| 日日夜夜天天| 婷婷久久网| 久久婷婷综合网| 夜夜久久综合网 | 丁香六月啪| 视频一二区| 丁香五月婷婷香| 五月丁香婷婷激情图片| 九热视频这里只有精品| 疯狂做受XXXX高潮A片| 狠狠夜夜五月丁香| 大香网伊人久久综合| www。五月天激情| 色欲色香综合网| 91久热| 色五月天在线观看| 激情五月天视频| 91久久久久久| 久操操| 天天干 夜夜爽| 玖玖在线视频福利| 色色色成人网| 婷婷五月综合婷婷| 97色婷| 五月花成人网| 五月天丁香色色| 中文字幕性爱丰满| 精品九九九久| 婷婷五月丁香手机在线视频| 丁香综合久久| 欧美色色色色色色色色色色| 日韩精品999| 激情综合婷婷| 黄色99视频| 五月婷在线| 婷婷五月天影视| 伊人九热| 五月丁香在线观看| 中文字幕精品在线观看| 日韩九区| 色色色777| 中国丰满熟女A片免费观| 色五月色综合| 亚洲天堂青草| 操人久久| 激情五月开心五月在线视频| 国产乱子轮XXX农村| 天天日日爽| 五月婷婷色啪| 99re8在这里只有精品| 五月深爱婷婷| 婷婷酒色网| 九九色欲网| xxxx五月| 在线sebiav精品视频| 26.uuu丁香五月婷婷| 五月婷婷新网站| 99超碰欧美| 98永久精品| 五月婷婷色播视频| 五月激情婷婷偷拍| 另类激情五月| 久久婷婷五月综合激情国产| AV变态另类一区二区| 97中文在线| 国产精品国产VA片国产| 婷婷欧美激情| 大香蕉啪啪啪| 深爱婷婷网| 综合亚洲色色| 五月婷综合| 五月天综合视频| 五月婷婷福利| 九九99免费视频| 久月久在线视频| 久久精典| 色丁香五月综合网| www.五月婷婷| 伊人喵咪a V| 亚洲中文字幕网| 这里只有精彩视| 九九伊人网| 婷婷丁香综合在线| 日本人妻A片成人免费看片| 色狠狠色噜噜AV天堂五区消防| 国产成人网| 成人网站高清无码| 狠狠精品干练久久久无码中文字幕| www.激情五月| 三十路磁力链接| 色婷婷久久久| 久久丁香九| .精品久久久麻豆国产精品| 九热视频在线精品15| 99热这里有精品2| 五月6香色婷婷视频| 精品九九网| 婷婷的五月天另类视频| 26uuu欧美日本| 丁香五月婷婷香| 欧美性色五月天| 那里有AV网址| 九九青草热| 国模九区| 91精品久久久久久综合五月天| 丁香婷婷社区| 五月婷婷啪啪网| 五月丁香 六月婷婷a| 第四色五月婷婷| 久久3级片| 国自产拍偷拍精品啪啪一区二区| 天天综合 99久久婷婷| 色色色色色色色色色999| 国产乱码久久| 日本三级中文字幕| 婷婷五月超碰| 婷婷狠狠干| 天天色情站| 天天拍天天操| 精品婷婷| 强伦轩人妻一区二区电影| 婷婷色5月激情网| 久久婷婷欧美| 热久久77777| 婷婷性爱| 六月激情婷婷| 91操片| 婷婷五月电影| 伊人色综合久久久| 久久久噜噜噜www成人| 百度一下国产精品A| 久久caop| 国产性爱在线| A片女女女女女女BBBB| 婷婷色婷婷| 色五月欧美| 五月天成人免费视频| 五月婷婷片| 性综合网| 亚洲黄色影视| 能看的AV| 成人午夜视频精品一区| 国产肥白大熟妇BBBB视频| 国产欧美熟妇另类久久久| 综合五月天| AA片在线观看视频在线播放| 亚洲色五月| 国产伦亲子伦亲子视频观看| 五月网站| 激情综合五月丁香六月婷婷| 97luluse| 成人va在线| 婷婷亚洲久久| 人人操人人爽成人AV| 99久久婷婷五月综合| 91精品91久久久中77777久久玖玖九九| 99久在线精品99re5热视频| 91九色欧美| 超碰人人操在线| 五月天婷婷色在线视频免费观看 | 亚洲色五月| 九七色色六月丁香| 色五月激情问网站| 久xxxx| 香蕉久久国产AV一区二区| 美女丁香五月天| 深爱激情久久| 99久在线精品99re8热| 五月天色色婷婷| 超碰99在线观看| 婷婷色九月| 激情五月天婷婷| www.99热国产| 岛国午夜视频| 99玖玖免费视频| 99热这里只有精品国产免费| 第六色在线| 六月丁香社区| 午夜成人综合| 99re这里只有| 五月激情四射网站| 好色婷婷| 天天插综合在线| 精品,99| 99男人的天堂| 97人人草| 五月天激情黄色网址| 日韩无码成人电影| 亚洲五月婷天天操| 日日爽夜夜爽| 婷婷五月激情综合| 久久38视频| 无码激情| 性天天中文网| 久操大香蕉| 99久久婷婷国产综合精品电影| 欧美乱码国产一级A片| 丁香六月婷婷开心| 五月婷亚洲精品| 六月激情婷婷| 丁香五月婷婷操逼| 91操人| jiqingliuyuetian| 婷婷久久色| 激情骚五月| www.精品99| 国产婷婷综合在线免费视频| 被强行糟蹋的女人A片| 99热费观看| 九九爱看亚洲| 婷婷久月| 9久操| 亚洲婷婷五月草久| 五月丁香综合激情网| 狠狠婷婷色综合| 六月99天天婷婷激情综合| 橾逼网| 综合天堂AV久久久久久久| 二色AV| 丁香五月天中文字幕| 专区无日本视频高清8| 色噜噜夜夜夜综合网| 99热在线观看免费| 91久操| 色琪琪一综合久久激情五月视频| 一级二级香港秋霞欧美欧美秋霞| 色婷婷五月综合| 婷色视频| 亭亭五月天成人| 久久99国产综合精品免费 | 玖玖资源站国产| 久久综合婷婷五月| 熟妇天天综合| 五月丁激情| 激情第四色| www.五月婷婷久久.com| 欧美综合激情丁香五月六月婷| 亚洲色图欧美色图日本视频| 色婷婷成人| 热久国产| 97久久五月丁香婷婷| 情婷婷五月天| 日韩一级一片内射视频4K| 欧洲亚洲最新精品| 婷婷五月激情五月激情| 人人操人人操919999| 日本va欧美va国产激情| 超碰cap| 日逼免费视频| 97碰碰碰免费公开在线视频| 九九视频免费| 超碰在线国产| 香蕉狠狠爱视频| 99操免费视频| 波多野结衣AV无码Porn| 婷婷va| 超级97碰碰| 丁香五月天论坛| 东京热人妻一区二区三区在线| 国产在线另类五月婷婷| 国产AV一区二区三区最新精品| 久草久青福利| 女人高潮内射99精品| 婷婷五月色花丁香社区| 色综合五月| 99热无码精品| 99热久久这里只有精品| 色婷婷五月丁香在线观看| 五月丁香| www,色中色| 九日日夜夜69| 夜夜躁爽日|