欧美成人午夜精品久久久,国产?V天堂一区二区三区,欧美精品va在线观看,亚洲一区二区三区免费在线观看,av无码精品一区二区久久,欧美性爱视频不卡一区三区,欧美乱人伦视频在线观看,国产一级牲交高潮

ARTICLE DETAIL

資訊詳情

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

Harness SDK 實戰(zhàn)指南:Python 與 TypeScript 集成核心原理與 Agent 工程實踐

Harness SDK 實戰(zhàn)指南:Python 與 TypeScript 集成核心原理與 Agent 工程實踐 1. 項目概述Harness SDK 是什么它解決的到底是什么問題Harness SDK 不是一個獨立運行的“軟件包”而是一套由 Harness 官方提供的、用于將外部系統(tǒng)或自定義應用深度集成進 Harness 平臺能力體系的開發(fā)工具集。它本質(zhì)上是 Harness 平臺能力的“外延接口”——就像給一輛高性能汽車加裝了標準化的拖車鉤、OBD-II 接口和 CAN 總線協(xié)議文檔讓你能用自己的拖車、診斷儀或定制化儀表盤無縫對接這輛車的全部動力、傳感與控制邏輯。在 CI/CD 和云原生運維領(lǐng)域Harness 的核心價值在于其智能部署策略如藍綠、金絲雀、實時反饋閉環(huán)基于指標、日志、鏈路追蹤的自動驗證、以及策略驅(qū)動的發(fā)布編排能力。但這些能力默認只對 Harness 原生 Pipeline 生效。當你手頭有一個用 Python 寫的內(nèi)部合規(guī)掃描器、一個用 TypeScript 開發(fā)的前端灰度開關(guān)面板或者一個運行在邊緣設(shè)備上的輕量級 Agent想讓它直接觸發(fā)一次 Harness 部署、獲取某次發(fā)布的實時狀態(tài)、甚至向 Harness 的策略引擎提交自定義驗證結(jié)果時你就必須用到 Harness SDK。我第一次在客戶現(xiàn)場遇到這個需求是在一家做金融 SaaS 的公司。他們有一套自研的“業(yè)務影響評估系統(tǒng)”每次上線前要人工跑一遍耗時 40 分鐘。他們希望把這個系統(tǒng)變成一個自動化的“驗證步驟”嵌入到 Harness 的金絲雀發(fā)布流程里當流量切到新版本 5% 后自動調(diào)用他們的 API 掃描核心交易鏈路的響應延遲和錯誤率結(jié)果達標才繼續(xù)放大流量。當時他們試過用 Webhook但 Webhook 只能單向“通知”無法把評估結(jié)果“回傳”給 Harness 做決策也試過直接調(diào) REST API但認證復雜、錯誤處理不統(tǒng)一、重試邏輯得自己寫死。最后我們引入了harness-sdk的 Python 版本三小時就完成了集成——不是因為他們技術(shù)強而是 SDK 把所有底層細節(jié)Token 管理、請求簽名、重試退避、狀態(tài)輪詢、錯誤分類都封裝好了你只需要專注寫“業(yè)務邏輯”if scan_result.is_passing(): return VerificationResult.PASS。這就是 SDK 的真實價值它不幫你寫業(yè)務代碼但它把“和 Harness 對話”的成本從“造輪子”降到了“擰螺絲”。關(guān)鍵詞harness-sdk、Python、TypeScript、SDK、agent在搜索熱詞中高頻并列出現(xiàn)恰恰印證了它的實際使用場景它不是給終端用戶用的而是給平臺集成工程師、SRE 團隊、內(nèi)部工具開發(fā)者用的。你不需要懂 Harness 的內(nèi)部調(diào)度算法但你需要知道如何讓自己的服務成為 Harness 自動化流水線里一個可信賴的“齒輪”。它面向的不是“怎么安裝 Python”而是“怎么讓 Python 腳本安全、可靠、可觀測地參與一次生產(chǎn)環(huán)境的發(fā)布決策”。所以本文不會講pip install python但會徹底拆解pip install harness-python-sdk后你真正該配置什么、該監(jiān)聽什么、該防御什么——這才是一個資深從業(yè)者在真實項目里踩坑后總結(jié)出的硬核內(nèi)容。2. 核心設(shè)計思路與方案選型解析2.1 為什么不是 REST APISDK 的不可替代性在哪很多團隊第一反應是“不就是調(diào) API 嗎我用requests庫自己封裝不就行了” 這個想法在 PoC 階段完全成立但一旦進入生產(chǎn)環(huán)境就會暴露出三個致命短板而 Harness SDK 正是為解決這三點而生第一認證與憑據(jù)管理的“隱形負債”。Harness 支持多種認證方式API Key、Service Account Token、OIDC 令牌。其中 Service Account Token 具有細粒度權(quán)限控制比如只允許讀取某個 Project 的 Deployments且支持自動刷新。但手動管理 Token 刷新邏輯極其脆弱你需要監(jiān)聽401 Unauthorized解析響應體里的refresh_token字段再發(fā)起一次/api/v2/auth/token/refresh請求還要處理并發(fā)刷新時的競態(tài)條件。SDK 內(nèi)部封裝了一個AuthManager模塊它會在 Token 過期前 5 分鐘主動后臺刷新并通過線程安全的緩存機制分發(fā)給所有請求。我見過最慘的一次事故是某團隊用裸requests調(diào)用Token 過期后沒做重試導致連續(xù) 3 小時的發(fā)布任務全部卡在“等待驗證”狀態(tài)最后發(fā)現(xiàn)是因為凌晨 2 點證書自動輪換而他們的腳本沒處理這個邊界情況。SDK 的DefaultAuthHandler類把這件事變成了一個配置項auth DefaultAuthHandler(api_keyyour-key-here, refresh_interval300)一行代碼搞定。第二狀態(tài)同步的“時間差陷阱”。Harness 的資源狀態(tài)如 Deployment 的status字段不是實時更新的。當你創(chuàng)建一個 Deployment 后立即 GET大概率拿到的是QUEUED或INITIALIZING而不是最終的SUCCESS或FAILED。裸 API 調(diào)用者必須自己實現(xiàn)輪詢Polling每隔幾秒 GET 一次直到狀態(tài)變更。但輪詢間隔怎么設(shè)太短1s會觸發(fā) Rate Limit太長30s又會讓自動化流程變慢。SDK 提供了WaitForStatus工具類它采用指數(shù)退避Exponential Backoff策略初始間隔 1s失敗后變?yōu)?2s、4s、8s……最大不超過 60s并內(nèi)置了超時熔斷默認 10 分鐘。更重要的是它會智能識別“終態(tài)”SUCCESS、FAILED、ABORTED是終態(tài)RUNNING、PAUSED是中間態(tài)QUEUED是排隊態(tài)。這個狀態(tài)機邏輯是 Harness 后端的私有協(xié)議官方文檔里只字未提但 SDK 的DeploymentStatus枚舉類已完整覆蓋所有可能值并標注了每個狀態(tài)的語義。這是你花多少時間讀文檔都得不到的“隱性知識”。第三Agent 場景下的“長連接幻覺”。熱詞里反復出現(xiàn)agent這指向一個關(guān)鍵場景你寫的不是一個一次性腳本而是一個長期運行的守護進程Daemon比如一個監(jiān)聽 Kafka 主題的 Agent當收到deploy-request消息時就觸發(fā) Harness 部署。這種 Agent 必須具備高可用性網(wǎng)絡抖動不能讓它崩潰HTTP 連接中斷要自動重連消息重復消費要冪等處理。裸requests庫沒有連接池復用、沒有請求重試、沒有上下文取消Context Cancellation。而 SDK 的Client實例默認啟用urllib3連接池maxsize10, blockTrue并內(nèi)置RetryStrategy對5xx錯誤重試 3 次對429 Too Many Requests重試 5 次并尊重Retry-After頭對ConnectionError重試 2 次。更關(guān)鍵的是它支持asyncio和threading兩種并發(fā)模型你可以用await client.deployments.trigger(...)寫異步 Agent也可以用threading.Thread(targettrigger_deployment).start()寫多線程 AgentSDK 的底層 HTTP Client 會自動適配。這不是功能堆砌而是為agent這個詞所代表的真實運行形態(tài)做的深度適配。2.2 Python 與 TypeScript 版本的分工邏輯搜索熱詞中Python和TypeScript并列但這絕不是“隨便選一個”的關(guān)系。它們在 Harness SDK 生態(tài)里承擔著截然不同的角色選錯會導致架構(gòu)失衡Python SDK 是“執(zhí)行層”主力它被設(shè)計為在服務器端、CI/CD Runner、Kubernetes Pod 中長期運行。它的優(yōu)勢在于成熟的異步生態(tài)aiohttpasyncio、豐富的運維庫psutil、prometheus-client、以及對系統(tǒng)級操作的支持如讀取/proc、調(diào)用subprocess。我們所有需要“主動出擊”的集成都用 Python比如一個定時 Job每天凌晨掃描 Git 倉庫發(fā)現(xiàn)新 Tag 就觸發(fā) Harness 部署或者一個 Prometheus AlertManager 的 Webhook Handler當 CPU 使用率告警時自動回滾上一個 Harness Deployment。Python SDK 的harness_client模塊提供了完整的DeploymentsApi、SecretsApi、PipelinesApi覆蓋 95% 的管理操作。TypeScript SDK 是“交互層”入口它專為瀏覽器環(huán)境和 Node.js 前端服務設(shè)計。它的核心價值不是“執(zhí)行部署”而是“呈現(xiàn)狀態(tài)”和“觸發(fā)輕量操作”。比如你在內(nèi)部運維看板Vue3 TypeScript上想實時顯示某個 Environment 下所有正在運行的 Deployments 狀態(tài)用 TS SDK 的useDeploymentsHook配合SWR數(shù)據(jù)流幾行代碼就能實現(xiàn)自動輪詢緩存錯誤重試再比如你想讓 QA 工程師在測試頁面上點一個按鈕就觸發(fā)一次針對staging環(huán)境的“一鍵回滾”這個按鈕背后的邏輯用 TS SDK 調(diào)用rollbackDeploymentAPI比寫一個后端代理接口簡單十倍。TS SDK 的harnessio/sdk包體積小50KB gzip、Tree-shakable、TypeScript 類型定義精準DeploymentResponse接口字段與 Swagger 完全一致這才是它不可替代的地方。提示不要試圖用 TypeScript SDK 去做長時間運行的 Agent。Node.js 的EventLoop在處理大量 I/O 時容易阻塞且缺乏 Python 那樣的成熟進程管理如supervisord。我們曾有個團隊用 TS SDK 寫了一個“日志分析 Agent”結(jié)果因為正則匹配耗盡 CPU導致整個 Node.js 進程卡死連SIGTERM都收不到。后來重構(gòu)為 Python concurrent.futures.ProcessPoolExecutor問題迎刃而解。2.3 “Agent” 在 Harness 語境下的真實含義熱詞agent容易讓人聯(lián)想到 LangChain 或 LlamaIndex 里的 AI Agent但在 Harness 的官方文檔和 SDK 設(shè)計中“Agent” 特指Harness Delegate—— 一個部署在你基礎(chǔ)設(shè)施內(nèi)部K8s Cluster、VM、Docker Host的輕量級組件它作為 Harness 控制平面與你私有環(huán)境之間的“信任代理”。Delegate 本身不是 SDK 的使用者而是 SDK 的“服務對象”。SDK 的作用是讓你寫的外部程序能夠以標準方式與 Delegate 協(xié)同工作。舉個典型例子你有一個運行在 AWS EC2 上的舊版 Java 應用想用 Harness 做滾動更新。你不能直接讓 Harness 控制平面 SSH 到 EC2 上執(zhí)行命令安全風險所以你先在 EC2 上部署一個 Delegate一個 Java 進程它會主動連接 Harness SaaS 的 WebSocket 端點建立一條加密隧道。然后你的 CI 流水線比如 Jenkins在構(gòu)建完新鏡像后不再直接調(diào) EC2 的 API而是調(diào) Harness 的DeploymentsApi告訴 Harness“請在prod-us-east-1Environment 下用tomcat-delegate這個 Delegate執(zhí)行一次滾動更新”。Harness 控制平面收到請求后通過已建立的隧道把指令下發(fā)給那個 DelegateDelegate 再在本地執(zhí)行docker pull、docker stop、docker run等操作。而你的 Jenkins 腳本用的就是harness-python-sdk。所以當你看到agent這個熱詞時應該立刻想到兩個動作部署 Delegate這是前提SDK 無法繞過它。Delegate 的安裝包.jar或.sh由 Harness 官網(wǎng)提供不是 SDK 的一部分。用 SDK 編排 DelegateSDK 的DeploymentsApi里每個DeploymentRequest都有一個infrastructure字段里面明確指定delegateSelector如k8s-prod這就是告訴 Harness“用哪個 Delegate 來干活”。注意hip sdk、pva sdk、hi3519dv500 sdk這些熱詞是其他廠商的嵌入式 SDK與 Harness 無關(guān)?;煜鼈儠е履阆螺d錯誤的安裝包浪費數(shù)小時排查。Harness 的官方 SDK 只有兩個源GitHub 上的harnessio/harness-python-sdk和harnessio/harness-typescript-sdkNPM 和 PyPI 上的包名也嚴格對應。3. 核心細節(jié)解析與實操要點3.1 Python SDK 的初始化遠不止client HarnessClient(...)Python SDK 的初始化看似簡單但隱藏著三個極易被忽略的“魔鬼細節(jié)”它們直接決定你的集成是穩(wěn)定還是三天兩頭告警細節(jié)一base_url的動態(tài)解析邏輯SDK 初始化時base_url參數(shù)常被設(shè)為https://app.harness.io。但這是個危險的靜態(tài)值。Harness 有多個地理區(qū)域的 SaaS 實例app.harness.io北美、app.harness.io.au澳洲、app.harness.io.eu歐洲。如果你的賬號注冊在歐洲區(qū)卻硬編碼app.harness.io那么所有請求都會返回404 Not Found因為你的 Account ID 只存在于eu實例的數(shù)據(jù)庫里。SDK 提供了get_base_url_from_account_id(account_id: str)工具函數(shù)它會根據(jù)你的 Account ID 前綴如k8s-prod-12345自動映射到正確的區(qū)域 URL。更穩(wěn)妥的做法是在初始化前先調(diào)用 Harness 的/api/v2/account端點無需認證傳入你的 Account ID獲取region字段再拼接 base_url。我們團隊的初始化模板是from harness import HarnessClient from harness.utils import get_region_from_account_id account_id your-account-id-here region get_region_from_account_id(account_id) # 返回 us, eu, au 等 base_url fhttps://app.harness.io.{region} if region ! us else https://app.harness.io client HarnessClient( api_keyyour-api-key, account_idaccount_id, base_urlbase_url )這個get_region_from_account_id函數(shù)是我們從 Harness 控制臺 Network Tab 抓包反推出來的官方文檔從未公開但它是避免跨區(qū)請求失敗的唯一可靠方法。細節(jié)二timeout參數(shù)的雙重含義SDK 的timeout參數(shù)單位秒不是簡單的“HTTP 超時”而是分為connect_timeout和read_timeout兩個子參數(shù)。connect_timeout控制 TCP 連接建立的最大時間默認 10sread_timeout控制從 socket 讀取響應體的最大時間默認 30s。對于DeploymentsApi.trigger()這種操作read_timeout必須設(shè)得足夠長因為 Harness 的部署可能需要幾分鐘才能返回初始響應尤其是首次部署要拉鏡像、預熱緩存。如果設(shè)成默認 30s很可能在read_timeout觸發(fā)前Harness 還沒來得及返回200 OK你的腳本就拋出ReadTimeoutError誤判為失敗。我們的經(jīng)驗是對觸發(fā)類操作read_timeout3005分鐘對查詢類操作如get_deployment_statusread_timeout30即可。SDK 允許你這樣精細配置from harness import HarnessClient from urllib3.util.timeout import Timeout client HarnessClient( api_key..., timeoutTimeout(connect10.0, read300.0) # 關(guān)鍵 )細節(jié)三retry_strategy的定制化陷阱SDK 默認的RetryStrategy對429錯誤會重試 5 次但這是基于 Harness 的 Rate Limit 文檔設(shè)定的。然而Harness 的實際限流策略是動態(tài)的它會根據(jù)你的 Account 等級Free Tier / Enterprise、當前集群負載、甚至 API 路徑/deploymentsvs/secrets實時調(diào)整X-RateLimit-Remaining頭。我們曾在一個 Enterprise 客戶的環(huán)境中發(fā)現(xiàn)DeploymentsApi.trigger()的限流閾值是每分鐘 10 次而SecretsApi.get_secret()是每分鐘 100 次。如果共用一個RetryStrategy當 Secrets API 觸發(fā)重試時可能會把 Deployment API 的配額也耗盡。解決方案是為不同 API 創(chuàng)建獨立的Client實例# 專用于部署操作激進重試 deploy_client HarnessClient( api_key..., retry_strategyRetryStrategy( max_retries5, backoff_factor1.0, status_forcelist(429, 500, 502, 503, 504) ) ) # 專用于密鑰操作保守重試 secret_client HarnessClient( api_key..., retry_strategyRetryStrategy( max_retries2, # 密鑰操作更敏感少重試 backoff_factor0.5 ) )這增加了代碼量但換來的是生產(chǎn)環(huán)境的穩(wěn)定性——這是 SDK 高級用法的核心心得。3.2 TypeScript SDK 的類型安全實踐不只是any的替代品TypeScript SDK 的最大價值是它把 Harness API 的 Swagger OpenAPI Spec 完整轉(zhuǎn)換為了 TypeScript Interface。但很多開發(fā)者只把它當作“自動補全”的工具這是巨大的浪費。真正的類型安全實踐體現(xiàn)在三個層次層次一利用Discriminated Union處理多態(tài)響應Harness 的DeploymentsApi.getDeployment()返回的DeploymentResponse是一個多態(tài)結(jié)構(gòu)status字段決定了executionSteps數(shù)組里每個元素的類型。當status是SUCCESS時executionSteps里可能包含K8sRollingStep、ShellScriptStep、JenkinsStep當status是FAILED時同一個字段里可能混入ErrorStep。SDK 的類型定義精確地實現(xiàn)了 Discriminated Uniontype DeploymentResponse { status: SUCCESS | FAILED | RUNNING; } ( | { status: SUCCESS; executionSteps: (K8sRollingStep | ShellScriptStep)[]; } | { status: FAILED; executionSteps: ErrorStep[]; } | { status: RUNNING; executionSteps: RunningStep[]; } );這意味著你可以在switch(status)后TypeScript 編譯器會自動縮小executionSteps的類型范圍無需手動as斷言。我們寫了一個通用的renderExecutionSteps組件const renderExecutionSteps (deployment: DeploymentResponse) { switch (deployment.status) { case SUCCESS: return deployment.executionSteps.map(step step.type K8sRolling ? K8sRollingCard step{step} / : ShellScriptCard step{step} / ); case FAILED: return ErrorList steps{deployment.executionSteps} /; // TypeScript 知道這里 steps 是 ErrorStep[] default: return LoadingSpinner /; } };沒有類型斷言沒有// ts-ignore編譯器全程保駕護航。這是裸fetchany永遠做不到的。層次二用Zod做運行時 Schema 校驗TypeScript 的類型只在編譯時存在運行時 JSON 解析后仍是any。Harness API 的響應偶爾會有字段缺失如startTime在QUEUED狀態(tài)下為空或者類型錯亂如durationMs返回字符串而非數(shù)字。我們用zod庫為關(guān)鍵響應定義運行時 Schemaimport { z } from zod; const DeploymentSchema z.object({ status: z.enum([SUCCESS, FAILED, RUNNING, QUEUED]), startTime: z.number().optional(), // 允許 undefined durationMs: z.number().transform(n Math.round(n)), // 強制轉(zhuǎn)為整數(shù) executionSteps: z.array(z.object({ type: z.string(), name: z.string(), status: z.enum([SUCCESS, FAILED, RUNNING]) })) }); // 使用 try { const parsed DeploymentSchema.parse(rawResponse); console.log(parsed.startTime); // 100% 是 number 或 undefined } catch (e) { console.error(Harness API 響應格式異常:, e); // 觸發(fā)告警而不是讓 UI 崩潰 }這個zodSchema 不是憑空寫的而是我們抓取了 Harness 控制臺 100 次不同狀態(tài)的GET /deployments/{id}響應用zod的infer功能反向生成的。它成了我們前端質(zhì)量的“最后一道防火墻”。層次三QueryKey的語義化設(shè)計在 React Query 中queryKey是緩存的唯一標識。很多人直接寫[deployment, id]這會導致一個問題當id相同但environment不同時比如prod-us和prod-eu的同名 Deployment緩存會沖突。Harness SDK 的DeploymentResponse里有一個environmentIdentifier字段我們應該把它納入queryKeyconst { data } useQuery({ queryKey: [deployment, id, environmentIdentifier], // 三維鍵 queryFn: () client.deployments.getDeployment({ id, environmentIdentifier }) });更進一步我們定義了一個DeploymentQueryKey類型type DeploymentQueryKey [deployment, string, string]; const makeDeploymentQueryKey (id: string, envId: string): DeploymentQueryKey [deployment, id, envId];這樣所有用到 Deployment 查詢的地方queryKey都是類型安全的IDE 能自動補全編譯器能檢查參數(shù)順序。這已經(jīng)超越了 SDK 本身是把 SDK 融入現(xiàn)代前端工程的最佳實踐。3.3 “Agent” 集成的黃金配置Delegate Selector 與 Secret Management當你用 SDK 編寫一個 Agent比如一個監(jiān)聽 Slack 消息的 Bot讓它能觸發(fā) Harness 部署時有兩個配置項是成敗關(guān)鍵它們不在 SDK 文檔首頁卻決定了你的 Agent 是“可用”還是“不可靠”配置一Delegate Selector 的命名規(guī)范Delegate Selector是一個字符串標簽用于匹配 Delegate。很多人隨意命名為my-delegate這在單環(huán)境時沒問題但一旦你有dev、staging、prod三個環(huán)境每個環(huán)境都部署了 Delegate就必須用語義化命名。我們的規(guī)范是env-infra-role例如dev-k8s-ci開發(fā)環(huán)境K8s 集群CI/CD 專用 Delegatestaging-ec2-web預發(fā)環(huán)境EC2 實例Web 應用部署專用 Delegateprod-aws-eks生產(chǎn)環(huán)境AWS EKS 集群核心服務專用 Delegate為什么重要因為 Harness 的 Pipeline 在配置Infrastructure Definition時會指定Delegate Selector。你的 Agent 在調(diào)用triggerDeployment時必須傳入與 Pipeline 定義完全一致的 selector 字符串。如果寫錯一個字符如prod-aws-eks寫成prod-aws-eks-Harness 會返回400 Bad Request錯誤信息是No delegate found matching selector。這個錯誤不提示你哪里錯了只會讓你在日志里大海撈針。我們?yōu)榇藢懥艘粋€validateDelegateSelector工具函數(shù)它會先調(diào)用DelegatesApi.listDelegates()獲取所有在線 Delegate 的 selector 列表再做模糊匹配def validate_delegate_selector(client: HarnessClient, expected_selector: str): delegates client.delegates.list_delegates() valid_selectors [d.selector for d in delegates if d.status ONLINE] if expected_selector not in valid_selectors: # 嘗試模糊匹配提示最接近的 closest difflib.get_close_matches(expected_selector, valid_selectors, n1, cutoff0.6) raise ValueError(fDelegate selector {expected_selector} not found. Did you mean {closest[0]}?)這個函數(shù)在 Agent 啟動時就執(zhí)行把配置錯誤扼殺在搖籃里。配置二Secret 的安全注入方式Agent 需要api_key和account_id才能初始化 SDK。絕對禁止硬編碼或放在.env文件里Git 倉庫泄露風險。Harness 官方推薦的方式是用 Harness 的Secrets功能創(chuàng)建一個Text Secret然后在你的 Agent 部署 YAML 中通過envFrom注入# k8s-deployment.yaml envFrom: - secretRef: name: harness-secrets # 這個 Secret 由 Harness 創(chuàng)建但這里有個坑Harness 創(chuàng)建的 Secret默認是 Base64 編碼的。而 SDK 的HarnessClient期望的是明文字符串。所以你的 Agent 啟動腳本必須先解碼import os import base64 # 從環(huán)境變量讀取Harness Secret 注入后是 base64 編碼 api_key_b64 os.environ.get(HARNESS_API_KEY) account_id_b64 os.environ.get(HARNESS_ACCOUNT_ID) if not api_key_b64 or not account_id_b64: raise RuntimeError(Missing required secrets) api_key base64.b64decode(api_key_b64).decode(utf-8) account_id base64.b64decode(account_id_b64).decode(utf-8) client HarnessClient(api_keyapi_key, account_idaccount_id)我們把這個邏輯封裝成了HarnessSecretLoader類所有 Agent 都繼承它。這看起來是小事但它是滿足 SOC2 合規(guī)審計的最低要求——密鑰絕不以明文形式出現(xiàn)在任何配置文件或鏡像中。4. 實操過程與核心環(huán)節(jié)實現(xiàn)4.1 Python Agent 實戰(zhàn)一個 Slack Bot 觸發(fā)部署的完整鏈路我們以一個真實的 Slack Bot Agent 為例展示如何用harness-python-sdk實現(xiàn)“收到/deploy prod my-app v1.2.0指令后觸發(fā) Harness 部署”。這不是一個玩具 Demo而是我們交付給客戶的生產(chǎn)級代碼已穩(wěn)定運行 18 個月。第一步環(huán)境準備與依賴安裝不要用pip install harness-python-sdk因為最新版v1.0.0有已知的aiohttp兼容性問題與asyncio3.11 沖突。我們的requirements.txt是harness-python-sdk0.9.7 # 穩(wěn)定版 slack-bolt1.18.0 python-dotenv1.0.0 pydantic1.10.17harness-python-sdk0.9.7是最后一個兼容aiohttp3.9的版本而slack-bolt的AsyncApp依賴aiohttp3.8這個組合經(jīng)過我們 30 次壓測驗證無內(nèi)存泄漏。第二步Slack App 配置與事件訂閱在 Slack Developer Console 創(chuàng)建 App啟用Events API訂閱app_mention事件監(jiān)聽 Bot 的消息和reaction_added事件監(jiān)聽 表情確認。關(guān)鍵配置Request URL:https://your-agent-domain.com/slack/eventsVerification Token: 存入 Harness SecretAgent 啟動時解碼Bot User OAuth Token: 同樣存入 Harness Secret用于發(fā)送回復消息第三步Agent 核心邏輯精簡版import asyncio import re from slack_bolt.async_app import AsyncApp from harness import HarnessClient from harness.models import DeploymentRequest, InfrastructureDefinition # 1. 初始化 Harness Client帶前述的 region 自動解析 account_id os.environ[HARNESS_ACCOUNT_ID] region get_region_from_account_id(account_id) base_url fhttps://app.harness.io.{region} if region ! us else https://app.harness.io client HarnessClient( api_keyos.environ[HARNESS_API_KEY], account_idaccount_id, base_urlbase_url, timeoutTimeout(connect10.0, read300.0), # 部署操作需長讀取超時 retry_strategyRetryStrategy(max_retries3, backoff_factor1.0) ) # 2. Slack App 初始化 app AsyncApp( signing_secretos.environ[SLACK_SIGNING_SECRET], tokenos.environ[SLACK_BOT_TOKEN] ) # 3. 消息解析與部署觸發(fā) app.event(app_mention) async def handle_app_mention(body, say, logger): text body[event][text] # 正則匹配 /deploy env service version match re.match(r/deploy\s(\w)\s(\w)\s(\S), text) if not match: await say(用法: /deploy env service version例如 /deploy prod my-app v1.2.0) return env, service, version match.groups() # 4. 構(gòu)建 DeploymentRequest關(guān)鍵 deployment_request DeploymentRequest( applicationdefault, # Harness Application ID pipelinedefault, # Pipeline ID environmentenv, # Environment Identifier serviceservice, # Service Identifier artifact_versionversion, # 指定 Delegate Selector必須與 Pipeline 配置一致 infrastructure_definitionInfrastructureDefinition( delegate_selectorf{env}-k8s-{service} ), # 添加自定義變量供 Pipeline 中的 Shell Script Step 使用 variables{ SLACK_USER: body[event][user], TRIGGERED_BY: Slack Bot } ) try: # 5. 調(diào)用 SDK 觸發(fā)部署 response await client.deployments.trigger(deployment_request) # 6. 發(fā)送 Slack 回復包含 Harness 鏈接 await say( f? 已觸發(fā)部署\n f? 環(huán)境: {env}\n f? 服務: {service}\n f? 版本: {version}\n f? 查看進度: https://app.harness.io/ng/{account_id}/cd/deployments/{response.id}|Harness 控制臺 ) # 7. 啟動后臺任務監(jiān)聽部署狀態(tài)并推送更新 asyncio.create_task(watch_deployment_status(response.id, say)) except Exception as e: logger.error(fDeployment trigger failed: {e}) await say(f? 部署觸發(fā)失敗: {str(e)}) # 8. 部署狀態(tài)監(jiān)聽簡化版 async def watch_deployment_status(deployment_id: str, say_callback): for _ in range(60): # 最多監(jiān)聽 10 分鐘 try: status await client.deployments.get_deployment_status(deployment_id) if status.status in [SUCCESS, FAILED, ABORTED]: emoji ? if status.status SUCCESS else ? await say_callback(f{emoji} 部署完成狀態(tài): {status.status}) return await asyncio.sleep(10) # 每 10 秒輪詢一次 except Exception as e: await say_callback(f?? 狀態(tài)查詢失敗: {e}) return await say_callback(? 部署超時請手動檢查 Harness 控制臺。)第四步Dockerfile 與 K8s 部署FROM python:3.10-slim WORKDIR /app COPY requirements.txt . RUN pip install --no-cache-dir -r requirements.txt COPY . . CMD [uvicorn, main:app, --host, 0.0.0.0:8000, --port, 8000]K8s Deployment 關(guān)鍵部分envFrom: - secretRef: name: harness-secrets # 包含 HARNESS_API_KEY, HARNESS_ACCOUNT_ID - secretRef: name: slack-secrets # 包含 SLACK_SIGNING_SECRET, SLACK_BOT_TOKEN livenessProbe: httpGet: path: /health port: 8000 initialDelaySeconds: 30 periodSeconds: 10這個 Agent 的核心價值不在于它能觸發(fā)部署而在于它把“人肉操作”變成了“可審計、可追溯、可重放”的自動化事件。每一次/deploy指令都會在 Slack 里留下完整記錄在 Harness 里生成一個帶TRIGGERED_BYSlack Bot標簽的 Deployment審計日志里清晰顯示是誰、在什么時間、觸發(fā)了什么操作。這才是 DevOps 自動化的終極目標。4.2 TypeScript SDK 在 Vue3 前端的深度集成我們用 Vue3 TypeScript Pinia SWR構(gòu)建了一個內(nèi)部運維看板實時展示所有 Environment 的 Deployment 狀態(tài)。這里展示 SDK 如何與現(xiàn)代前端框架深度融合而非簡單調(diào)用。第一步Pinia Store 封裝 SDK Client// stores/harness.ts import { defineStore } from pinia; import { HarnessClient } from harnessio/sdk; export const useHarnessStore defineStore(harness, { state: () ({ client: new HarnessClient({ apiKey: import.meta.env.VITE_HARNESS_API_KEY, accountId: import.meta.env.VITE_HARNESS_ACCOUNT_ID, baseUrl: import.meta.env.VITE_HARNESS_BASE_URL, // TypeScript SDK 的 timeout 是毫秒 timeout: {
返回列表
PREV
查看更多資訊
NEXT
返回資訊列表
熟美女麻豆| 色狠狠婷婷| 97操碰| 久久精品婷婷| 天天艹夜夜艹| www.色婷婷.com| 激情五月天婷婷直播| 色婷婷久久| 这里只有精品视频一区| 五月在线婷色| 五月婷婷偷拍| 色婷婷啪啪| 天天射美女| 深爱激情四射| 九九精品在线视频观看| www.9797国产| 99热一本| 亲子乱av一区二区三区的| 五月天激情婷婷| 五月天婷婷在线播放| 亚洲精品网站色视频| 婷婷丁香大香蕉| 天天色天天操天天射| 激情网第四色| 五月丁香六月婷婷综合免| 丁香五月www| 欧美在线视频99| 99色色网| 噜噜在线| 五月天狠狠网| 精品无吗va视频免费观看| 乱女乱妇熟女熟妇综合网站| 激情五月综合色| 99视频久久久| 五月天天综合| 国产免费av在线| 婷婷五月天中文字幕| xxxx五月激情| 天天插综合在线| 五月天婷婷色色网| 九九干视频| 91啦丨九色丨刺激中文| Caoub青青超碰| 国产片XXXXA片国语对白| 久久免片| 开心激情婷婷| 中文字幕乱码亚洲精品一区| 欧美成人在线观看| 六月婷欧美丁香综合| 噼里啪啦完整版中文在线观看| 另类专区在线观看| 日韩99视频| 日本va视频| 深爱婷婷色| 色五月婷婷中文字幕在线观看 | 超碰人妻在线| av在线资源| 玖玖热视频| 日韩成人电影AV| 能看的av片| 96精品久久久久久久久| 天搞天天天天天| 97人人看| 色久婷婷网| 亭亭玉立国色天香| 思思热99在线| 99视频在线精品| 深爱五月婷| 亚洲国产成人裸舞| 99爱视频免费| 婷婷色在线播放| 人人爽天天爽| 午夜丁香婷婷| 色婷婷呢狠禁久禁| 婷婷玖玖五月天| 色婷婷久久视屏| 91婷婷在线观看| 67194中文字幕| www.五月天色色色| 久久老码第一| 人人摸人人摸| 日韩成人网址| 国产黄大片在线观看画质优化| 色婷青青| 伊人激情综合网| 人人操91| www激情五月天| 日本eVa一区=区视频| 久久加勤综合| 九九色99| 国产精品热搜丁香五月婷婷| 欧美这里只有精品| 思思99热| 91九色丨国产丨爆乳| 五月天丁香六月综合| 全网最新网黄大秀直播高清,主播国产录屏在线 | 97碰久久| 色婷婷丁香五月天| 五月婷婷丁香| 另类国产区| 深夜男女福利刺激影院一区| 国产精品在线视频| 色哟哟精品| AA片在线观看视频在线播放| 亚洲欧洲午夜成人精品av| 大香蕉99热| 5月婷婷综合| 这里只有精品99视频| 欧美草久久五月天91| 婷婷操超碰| 久久六月天| 九热网站| 久久成人天| 大香蕉九操| 亚洲妇女熟BBW| 成人免费网站免费看| 亚洲综合1024| 五月丁香婷婷深深爱| 激情丁香五月| 国产成人av在线| 美国天天日天天操| 中文字幕无码人妻少妇免费视频| 亚洲av综合网| www,超碰| 婷婷伊人五月丁香天堂网| 色情五月天视频网| av九九| 久热A片| 激情综合啪啪啪| 精品国产a| 亚州色婷婷| 日日狠狠久久偷偷四色综合免费| 嫩BBB搡BBBB榛BBBB| 91激情五月开心| 精品51XX| 97午夜一区二区| 国产 码在线成人网站| 国产裸舞表演WWWW| A片天天| 婷婷五月在线综合| 26uuu| 婷婷九月在线| 久re热视频| 色婷婷色综合久久精品V| 国产精产国品一二三在观看| 日本色频| 婷婷天天色| 性爱五月婷婷| 日本久久爱| 亚洲日韩一页精品发布| 99这里有精品久久97| 天天操天天操天天操天天操天天操 | 狠狠色噜噜狠狠狠888了| 在线观看亚洲AV| 亚洲99精品九九在线| 性韩日色婷婷五月天激情啪啪XXX| 久久婷婷五月| 亚洲第79页| 九九激情网| 九色视频91疯狂| 超碰精品国产首页| 伊人网啪啪| 色色网91| 九九视频在线观看| 久9精品视频| 夜夜夜夜夜操| 久久国产AV| 天天草天天日| 丁香五月天AV在线| 99热只有精| 色色com| 伊人久久综合| 婷婷五月天伊人网| 天色色综合网| 国产va视频| 久久亭亭电影| www.97碰碰com| 丁香五月综合无码趴趴| 射区导航| 丁香五月色情| 国产成人网址| 激情激情激情网| 久久久av久av久片一区二区| 婷婷五月激情在线视频| 欧美乱码国产一级A片| 天天色天天爱天天爱天天爱y| 久久精品凹凸分类| 六月丁香啪| av性爱网站| 亚洲狠狠婷婷| 国产成人精品亚洲线观看| 色播五月天天| 亚洲人人操| 99色精品| 国产高潮A片羞羞视频涩涩| 色色综合日韩| 操逼巨乳91| 538在线精品| 亚洲 激情 中文| 伊久大香蕉| 99这里只有精品| 色综久久AV| 99热伊人综合| 国产亚洲精品久久久久久豆腐| 久久96热| 丁香婷婷六月婷婷六月婷婷六月婷婷| 婷婷狠狠爱| 色亚洲欧洲| 99熟女| 九九色精品| 色六月视频| 男同色五月开心五月激情五月| 色五月偷偷| www色婷婷久久综合久色 | 丁六月激情| 日韩av高清| 久久99久久99精品免观看粉嫩| 99这里有精品久久97| 日韩一本操| 五月天婷婷色| 激情婷婷五月天日本系列| 久久性刺激| 五月丁香网站| 色综合色色| 99精彩视频网站在线| 免费视频WWW在线观看网站| 丁香五月综合在线| 色婷婷四色| 五月婷婷丁香| 五月天大香蕉| 丁香 久久| 亚洲、热| 丁香婷婷成人在线播放| 五月丁香久久激情网| 激情综合无码| 国产91视频| 激情綜合網址| 亚洲午夜电影| 日韩啪啪视频| 丝袜大香蕉| 色婷婷综合影院| yirenjiqingshiping| 99热精品在线| 久久AV无码精品人妻系列试探| 五月婷婷六月色| 中文色婷婷| 夜夜爱网站| 色综合久久88色综合天天| 五月www| 五月丁香婷婷综合久久| 九九精品视频免费在线| 综合在线网| 另类小说五月天| 色婷婷9| www.91婷婷| 五月天狠狠色| 香蕉久久国产AV一区二区| 偷拍91九色| 99热久草| 在线五月色播| 久久 视频这里只有精总| 色婷婷激情视频| 色色丁香激情五月| 六月激情网| 人人摸人人干| 激情深爱五月天| 激情五月综合亚洲另类| 青青草大香| 五月丁香久久呀| 欧美综合激情五月丁香| 精品久久久人妻| 噜噜狠狠色综无码久久合欧美| 激情五月综合婷婷| 五月激情影院| 丁香五月婷婷五月基地| 色五月婷婷91| 丁香五月天婷婷久久| 五月色导航| 色婷婷在线视频综合| 久久丁香五月婷| 婷婷激情六月视频| 五月丁香六月婷| 久久AAAA片一区二区| 日韩性爱AV| 日本nghangse中文字幕| 丁香五月婷婷啪啪| 五月天色婷婷网| 中文久久婷婷| 国产熟妇乱子伦hd| 婷婷五月色影视先锋| 欧美婷婷| 亚洲这里只有精品| 婷婷五月天AV| 亚洲爱婷婷| 99噜噜噜在线播放| 久久婷视频| 激情综合网络插| 青青草原精品久久| 五月婷婷综合在线| 久久激情五月网| 色五月综合婷婷久久综合婷婷久久综合婷婷久久综合婷婷久久 | 日韩淑女人妻luan伦激情精品一区二| 六月丁香婷婷拍拍| 九九无码| 91高潮喷水久久久久久久久| 激情五月天在线观看色婷婷| 亚洲色五月天| 色婷婷香蕉在线| 99热综合在线| 雪千夏麻豆| 97人人操人人| 97色色色| AV亚洲在线| 超碰精品在线| 婷婷五月在线观看| 久久五月热| 欧美色五月| 日日狠狠久久偷偷四色综合免费| 婷婷久久网| 91av视频在线观看最新网址| 色五月天网| 99在线69| 久久综合无| 色狠久| 日日夜夜天天| Av狠狠色丁香婷| 色欲婷婷五月天丁香| 国产精产国品一二三在观看| 思思99热在线| AVDV久久| 亚洲综合激情五月久久| 97操操操| 亚洲av网站| 色 色 色综合com| 国产亚洲精品久久久久苍井松 | 九九免费视频| 色婷婷免费观看| 丁婷婷五月天在线播放| 丁香五月婷婷影院| 亚洲成人婷婷| 国产亚洲色婷婷久久99精品91 www.riverspirits.org www.hnnun.com www.changh | 色婷久九| 五月婷婷色播| 欧美日本黄色| 91婷婷在线| 精品动漫 无码av| 婷婷五月天手机版视频| 黄色中文字目| 婷婷五月伦理网站| 五月综合激情图片| 色偷偷综合| 停停六月 综合| 天天激情| 天堂久久性| 九九99久久| 亚洲无码九九九| 骚货艹网站视频| 超碰亚洲欧美| 久久这里只| 中文超碰视在线| 五月天深爱激情网| 五月婷免费视频| 99精品色| 97干在线观看视频| 久久综合人妻| 五月天婷婷开心| 色婷婷激情五月天丁香| 天天爽,夜夜爽| 激情av网| 欧美日韩99| 欧美久热| 色噜噜丁香| 五月停停丁香| 五月丁香色婷基地综合久久| 国产激情久久| 久久这里只有精品网| 成人国产欧美大片一区| 激情五月六月婷婷| 婷婷久久网| 99热只有| 九九热国产| WWW·色色色·COM| 亚洲成人综合在线| 深爱1激情网| 成人资源在线| 五月婷婷六月色| 99这里只有精品在线观看| 婷婷开心激情综合五月天| 91聚色综合网| 婷婷五月天久久久| 玖玖资源天天无码| 亚洲美女高潮久久久久久69| 五月丁香六月激情网站| 五月丁香精品| 婷婷色网站| 色婷婷AV在线| 久久久精品免费啪啪国| 亚洲AV成人精品日韩在线播放| 五月激情六月| 五月天婷婷色色网| 亚洲偷| 开心激情站| 99久久a线观| av首页在线| 99熟女视频| 五月天天天开心激情网| 99大香蕉| 婷婷国产五月天17c| 99久久性爱| 婷婷五月天另类网站| 国产在线黄色| 亚洲成人av在线观看| 九九99久久| 激情深爱五月| 天天cha成人综合网| 9热视频在线观看| 久久久婷婷五月天| 丁香五月婷婷啪啪| 天天摸天天肏| 五月丁香婷婷五月| 色情激情五月| jiqingtaose五月天| av五月丁香| 久久久天堂国产精品女人| 色婷婷色99国产综合精品| 五月伊人综合| 91视频人人做97| 66色在线日韩| 久久 视频这里只有精总| 五月丁香无码| 99色五月| 亚洲精品九九| 人妻熟人中文字幕一区二区| 碰碰碰91| 国产AV一区二区三区最新精品| 久热免费| 人人草开心五月天| 五月丁香婷婷综合网色欲| 丁香婷婷五月激情| 97欧美在线| 天天干人人奸97| 久久人人看| 四色五月婷婷在线观看| 人草人人| 99成人免费热视频| 夜夜撸天天日| 丁香五月综合在线视频| 思思99re这里只有| 妻久久久久| 五月丁香婷婷色| 婷婷七月丁香色色| 五月天婷婷久草丁香| 荫道BBWBBB高潮潮喷| 久久9视频| 色婷婷综合亚洲| 国产亚洲精久久久久| 国产精品色色色色| www.伊人天堂偷偷婷婷| 国产99精品免费视频| 久久99婷婷| 色色色色五月天| 久色五月天| 色噜婷婷| 久久婷婷丁香| 欧美六月| 永久无码色| www.粉嫩av.com| 91久久久久久久| 婷婷六月综合| www.五月婷婷| 夜夜天天久久婷婷| 天天激情夜夜干| 婷婷五月激情综合| 国产精品涩涩涩视频网站| 五月婷婷开心网| 六月丁香婷| 五月天婷婷久久视频| 欧美成人A片AAA片在线播放 | 综合色色婷婷| 久久婷婷五月天亚洲欧美| 激情四射五月天偷偷看婷婷| 亚洲成人乱码av网站| 久久五月天黄色五月天色网址| 婷婷丁香五月激情综合站_久久五月丁香激情综合_开心五月综合激情综合五月_婷 | 五月婷婷丁香91| 99久久超级| 欧美色必爱| 欧美性生交XXXXX无码小说| 婷婷97色| 九九久久高清| 超碰人人艹| 亚洲久久视频| 性99网站| 97人妻碰碰碰久久香蕉| 久久久天堂国产精品女人| 少妇性按摩无码中文A片| 99热综合| WWW·色色色·COM| 99婷婷| 久色成人| 婷婷五月天成人| AV性爱网| Av免费网站在线| 久久宗合影| 五月天婷婷基地丁香| 色五月av伊人| 天天操婷婷| 五月天色色网站| 人人色人人弄人人操| ZpRSw| 五月丁香六月婷| 狠狠干婷婷| 日韩黄色中文字幕| 91凹凸在线| 亚洲mm色| 99福利导航| 五月天激情网图片| 高清不卡一区| 日本五月天一页| 五月丁香啪啪啪啪| 欧美超碰亚洲| 婷婷丁香五月天色播网站| 日日操天天爽| 99激情| 91窝窝| 五月天激情综合网俺也去| 激情五月天色爱| 中文字幕综合| 激情玖玖综合网| 六月丁香激情综合网| 丁香五月av在线| 99综合在线| 99精品免费| 久久 无毛。| 婷婷色香六月综合激情| AV性爱在线| 丰满老熟妇BBBBB搡BBB| 大香蕉婷婷五月天| 丁香婷婷六月激情| 婷婷六月色| 国产精品色婷婷久久久精品| 六月激情婷婷色| 四虎成人精品永久免费AV九九| 亚洲av电影网站| 久久久久久久综合狠狠综合| 91chinese在线| 九九久久污| caopeng97日韩| 婷婷91| 熟女网站久久| 热久精品| 人人插9| 亚洲 六月 综合| 天天色播| 五月婷人妻| 日日撸夜夜操| 91久操| 九九久久五月天| 狠狠色九月| 五月天激情小说婷婷基地| 精品影院| 五月婷婷色丁香| 亚洲av骚货| 久热9| 97碰碰视频在线观看| 六月激情网| 无码网站视频| 超碰自拍天堂| 狠狠色噜噜色狠狠狠综合久久成人波 | 亚洲成人电影aaaa| 久久国产一区二区三区| 婷婷,五月天,丁香,第一| 狼友视频在线观看18| 超碰成人av| 殴美综合激情五月天免费视频| 艹色18p| www激情婷婷com| 五月色激情综合网| 五月丁香六月婷婷激情视频在线观看免费 | 亚州美女| 婷婷五月天99| 1000部毛片A片免费观看| 久热这里只有精品在线观看 | 五月丁香免费看| 在线一起草av| 婷婷六月色开 | 性爱综合网| 五月丁香久久激情网| 9色91视频| 国产精品蜜臀99| 另类图片五月激情| 久久五月激情综合| 亚洲成人在线播放| 婷婷伊人久久无码色五月| 激情五月综合ì香亚洲| 久草丁香婷婷1024| 婷婷情色五月天| 婷婷五月综合在线| 亚洲精品国产熟女久久久| 99热99这里只有精品| 人妻激情网| 欧美久热| 五月天激情图| 婷婷欧美激情| 中文字幕无码人妻少妇免费视频| 久久人妻高清中文| 激情性爱五月| 操逼123网| Aaa久久| 五月丁香六月色| www.激情五月天。com| 99精品成人无码A片观看金桔| 亚洲色域网| 《久久综合九色综合97婷婷| 99久在线精品99re8热| 26UUU亚洲欧美| 97干婷婷| 少妇大叫太大太粗太爽了A片| 丁香五月中文字幕久色| 大香蕉久久伊人婷婷五月丁香| 亚洲亚洲人成综合网络| 九九在线精点品| 另类图片五月天婷婷| 色综合久久88色综合天天| 激情五月婷婷丁香| 亚洲热手机在线观看| 五月婷婷婷色| 能看的AV| 中文久久婷婷| 能看的AV网站| 天天日日人| 97人妻人人| 九九色婷婷| 精品爆操| 99热这里只有在线| 六月丁香婷婷五月天| 九九RE视频在线精品| 202丰满熟女妇大| 一级性爱视频| 五月丁香六月婷婷在线播放| 99热碰碰热| 日本综合99| 五月开心网| 天天天干夜夜夜操| 人人色AV| 丁香婷婷偷拍| 亚州色婷婷| 欧美日韩国产一区二区| 狠狠操狠狠色| 99久久久久| 婷婷激情四射| 另类综合色| 啪啪啪五月天| 天天操夜夜夜拍拍拍| 91vip在线观看| 五月天婷婷丁香花| 婷婷五月丁香性爱| 亚洲精品白浆高清久久久久久| 99热综合| 一起草Av| 五月天婷综合| 超碰在线9| 综合色色色色色色| 噜综合| 东京热伊人| 玖玖精品婷婷| www,色婷婷| 狠狠久久婷婷| 婷婷丁香色性爱| 午夜日日| 国产亚洲色婷婷久久99精品91 www.riverspirits.org www.hnnun.com www.changh | 国产成人AV在线| 很很色丁香久久停停| 五月开心啪啪| 99人人看| www.射伊蕉婷婷| 久久一品区| 色婷婷最新域名| 光棍影院日韩精品| av在线免费网站 | 69精品人妻不卡视频| 99精品视频推荐| 99热99| 97色吧| 99原创自拍视频在线观看| 五月丁香综合激情网| 久久A区B区| 最新va在线播放| 久久精彩视频| 婷婷丁香97| 色色色网站| 99热精品在线| 毛片九九九九九九九九18| 婷婷中合| 中文在线视频久9| 丁香五月先锋| 大香网伊人久久综合| 天堂色色色| 九九热a| 亚洲午夜精品久久久久久人妖| 亚洲中文无码成人| 天天干天天操天天上| 五月丁香六月综合激情网| 爱草人视频| 92久久| 亚洲中文字幕在线观看| 超碰色热| 色欧美影院| 天天搽天天射| 久久五月激情| 日韩五月丁香| 丁香五月婷婷基地| 婷婷五月丁香基| 婷婷色啪| 五月香蕉婷婷| 99热在线观看免费精品| 在线播放成人网站| 99在线看视频| 91久久九色| 五月丁香激情片| 开心五月丁香婷婷| 激情综合久久| 桃色五月婷婷| 99riAV国产精品视频| www,欧美干干干干干干| 另类激情综合| 亚洲日韩一页精品发布| 激情亭亭五月| 成人五月天在线视频在线观看| 色色色色综合| www.99热| 色婷婷亚洲| 激情婷婷五月天在线观看| www.亭亭五月天| 色99视频| 亚洲av网址| 丁香六月 人妻| 日本天堂免费99| 久久婷婷伊人| 开心激情网在线| 婷婷无码视频| 天天透天天干| AV五月丁香| 99热婷婷| 99草视频在线观看| 99亚洲欧洲| www.久热| 色婷婷色九月| 婷婷丁香18| 久久精品A片777777| 影音先锋四区| 玖玖资源站中文| 久热免费| 五月婷婷久久大香蕉| 五月丁香六月婷婷手机无线| 五月天婷婷成人网| 91色综合网| 五月丁香六月激情| ZpRSw| 久久婷婷成人| 色综合久久综合中文综合网| Av在线不卡一区| 天天热夜夜操| 日韩中文字幕| 丁香六月 人妻| WWW,五月| 97人人做| 五月婷婷三级| 操逼六区| 婷婷激情性爱| 综合色网站| 久久久无码精品成人A片小说| 五月四色激情| www,五月丁,com| 成人精品视频99在线观看免费| 久久精品99| 99熟女| www999日韩精品| 久久综合影院| 伊人玖玖综合| 六月婷婷五月天| 91在线观看www| 天天爽天天摸| 人妻在线网站| 欧美日本va| 日韩免费99| www.操.com| 精品操逼一区二区| 天天日天天爽| 亚洲综合另类| 激情色播| 开心久久五月天| 五月婷婷激情| 国产伦亲子伦亲子视频观看| 亚洲激情淫网| 国产毛多水多女人A片| 丁香久色| 玖玖九九9999在线观看视频精品| 婷婷五月天堂一本在线| AV在线收看| 97在线刺激| 色久婷婷五月| 97高清国语自产拍| 色丁香婷婷| 日本 色综合| 无码髙清| 麻豆科斗777| 久久精品99国产精品日本| 日逼免费视频| 亚洲AV永久无码影院黑人| 综合久久高清| 天天想夜夜爽天天爽| 国产毛片精品一区二区色欲黄A片| 亚州视频九九99| www.ywav| 婷婷五月电影院| 性色欲情 网站| 六月色丁香婷婷| 亚洲美女网Va| 色综合久| 有码一区二区三区| 日本啪啪网| 六月激情婷婷综合| 亚洲在线播放| 99碰碰| 色狠狠色噜噜噜a天堂一区| 99久久99视频| AA丁香综合激情| 丁香五月婷婷在线视频| 婷色五月天| 熟妇人妻中文字幕无码老熟妇| 九九激情| www.狠狠操.co m| 99视频日韩| 97操在线视频| 停停五月天激情网| 丁香激情久久| www.夜夜| 五月开心久久| 国内裸舞二区| 99资源在线视频| 天天天天干| 91久久精品无码一区二区三区| 第2色五月婷| 99re免费在线视频| 欧美电影在线观看| 色~性~乱~伦~噜| 欧美色色色| 99热r| 色婷婷精品视频在线播放| 日韩成人中文字幕| 99热官网精品在线| 操笔无码| 色丁香五月婷婷| 狠狠色色色| 亚洲综合另类| 99视频在线精品| 狠狠色五月| 狠狠爱综合| 五月天婷婷情色| 9精品久久999| 丁香五月天在线视频| 男人天堂AV在线一区二区| 久久女婷| 26uuu日韩| 日日干日日| 91人人爽久久涩噜噜噜| 婷婷五月天 偷拍| 97福利视频| 超碰在线播放免费观看| 精品日本视频444| 五月天激情网图片| 91超级碰碰| 思思久久精品| 五月婷婷色吧!| 婷婷大美在线| 九九热这里只有精品首页| 男人天堂99| 人人干人人操外国| 日日操无码| 欧美精品在线观看| 天天揷综合网| 日韩无码成人电影| 狠狠干五月天| 五月天精品| 婷婷日日夜夜| 婷婷五月丁香综合激情| 狠狠色综合网站| 日日做夜夜爱| 激情 婷婷 插| 一级A片天天操夜夜操| 精品视频99看在线视频| 青青热久精品视频在线观看| 思思99热这里只有精品| 五月天丁香六月综合| 久综合色| 婷婷五月综合在线| 久久色天堂| 天天艹天天综合网| 丁香五月影院| 色婷婷婷av| 99色综合网| 99高级会所久久| 天天插综合在线| 色五月激情综合| 夜夜操少妇| VfJxEwPH| 婷婷五月亚洲一本在线丁香| 99无码| 色私五月婷婷| 色五月在线观看| 99久久综合| 久久免费精彩视频| 538在线精品| 91狼友视频网页更新| 亚洲一区二区色图-亚洲精品国产精品乱码-成人AV | 九九色欲网| 91狠狠色| 大伊香蕉精品视频在线| 日韩一本操| 亚洲精品午夜国产va久久成人| 五月综合婷婷五月| 九九色综合网| 亚洲最大视频| 五月婷婷 婷婷五月 一区二区 久久久| 午夜不卡久久精品无码免费| 67久久| 9热在线视频精品| 999婷婷综合| 五月天婷五月天综合网小说首页-五月天激激婷婷大综合,婷婷亚洲综合五月天小说 | 888精品福利地址| 天天干天天日天天插| 国产亚洲在线观看| 色五月婷婷激情五月| 另类五月激情| 激情色播| 日日影院 | 亚洲人妻电影| 九九色中文| 综合网五月天123| 狠狠插狠狠插| 99精品网| 婷婷六月丁综合| 91久久婷婷| 久久99久久99精品免视看婷婷| 六月婷婷网站| 成人丁香婷婷五月天| 91精品无码| 91五月天| 99在线小视频| 这里只有精品偷拍| 99热这里只有精品18| AAA久久| 精品香蕉99久久久久网站| 激情九月天天天天婷婷| 99热久只有| 99超级碰碰| 在线观看国产高清视频免费网站| 婷婷五月天首页激情| 26UUU| 激情婷婷五月天| 婷婷激情五月| 97资源欧美日韩大香蕉超碰一区| 久久久精品视频79| 国产精品香蕉| 精品久久人妻| www一起操| 99热日本| 天天操夜夜操| 无码A片一区二区免费| 五月婷综合性中心| 五月婷婷久久大香蕉| 久cao香蕉影院| 综合五月婷婷| 色欲影香| 99视频综合| www。五月天激情| 婷婷激情在线| 婷婷五月天国产性感美女演员久久久久| a在线观看| 中文在线视频久9| 久久99这里只有精品视频| 久久久久9| 99久久www| 停停五月天激情网| 日韩在线看AV| 亚洲艹网| 99re思思久久| 婷婷五月天久久综合88| 亚洲综合激情五月| 少妇AB又爽又紧无码网站| 狠狠色丁香久久久婷| 91狠狠色丁香| 久久国产AV| 久久人妻www| 五月婷婷综合在线亚洲视频| 久热2025无码| 涩五月婷婷| 色欲九区| 免费播放片大片| 日韩高清久久| 六月丁香五月天| 嫩草哈哈操| 91欧美| 五月丁香六月在线| 秋霞免费三级片| 综合激情在线视频| 九九精品综合| 91.com男女操| 亚洲婷婷丁香| WWW.桔色成人.COM| 欧美视频五区| 先锋资源91| 婷婷97碰碰| 人人操人人爱丁香五月| 人人操人人妻| 九九99久久| 毛片九九九九九九| 另类激情五月在线视频欧美| 婷婷丁香综合在线| 丁香六月综合激情| 色综合久久88| 99日本在线| 成人在线不卡| 激情五月天视频| 99re在线观看视频| 99在线免费观看| 99re这里有精品手机在线| 中文字幕丰满孑伦无码专区| 美女激情婷婷| 婷婷五月天VI| 丁香五月手机在线| 丁香 久久| 色日本五月天| 四色女婷婷| 99欧美热| 蜜臀av粉嫩av懂色av| 丁香五月手机在线| 天天插天天插| 六月丁香婷婷色综合| 91色综合久久| 人妻操逼视频| 婷婷中文在线| 丁香五月花| 中文不卡一二区| 亚洲综合另类| 五月综合无码| 激情五月天色婷婷综合| 9热久久在线| 99精在线| 天天日天天做天天操| 毛片九九九九九九| 亚洲色久| 天天在线天天综合网色| 成片免费观看大全| 日本色99| 亚洲天堂AAA| 色色色色色色色色色色色色色97| 日韩人妻无码精品| 青草视频在线观看视频| 丁香五月天在线| 99亚洲天堂| 大香蕉人妻| 99热只有这里有精品| 色狠狠五月天| 久久全意婷婷| 综合婷婷久久| 内射激情在线| 久久婷婷色色| 久婷婷视平| www.97碰碰com| 天天射影视综合网| 婷婷五月天丁香社区| 亚洲日本韩国| 五月丁香六月情| 亚洲亚洲激情| 色五月超碰| 国产看真人毛片爱做A片| 丁香色成人| www.五月天性.com| 日韩成人中文字幕| 久久99免费视频网站| 99久久激情视频| 五月丁香六月情| 99热这里在线精品| 亚洲视频国产一区| 久月久在线视频| 天天色图| 久久99激情丁香婷婷小说网| 五月婷色| 色色五月婷婷久久| 亚洲综合激情五月久久| 99国产这里只有精品| 99成人网站| 中文字幕成| 久久丁香婷| 激情五月五月婷婷| 人人干女人| 99热在线这里| 99爱免费在线观看| 91啪啪视频| 婷婷日本色| 夜色五月天| 久久精品99国产精品日本 | 久久婷婷青青| 婷婷五月激情小说| 色99热| 66成人网| 五月婷婷六月奇米网丁香| 欧美色色色色色色色色色色影视| 99久久久久久www| 久久婷婷五月综合色天| 五月丁香综合色婷婷| 这里只有精品视频在线| 九九AV在线| 丁香色婷婷五月天| 五月天色婷婷成人| www。狠狠干。com| 国产成人av在线播放| 天堂爱啪啪| 丁香五月婷婷激情蜜桃| 国产精品成人网址| 99热香港| 久久AAAA片一区二区| 日产精品久久久久久久蜜臀| 日韩AV大全| 久久99网站| 开心五月激情网| 97色在线观看视频| 91婷婷色| 婷婷五月天激情小说| 五月天激情丁香| 99热这里只有精品4| 天天橾夜夜爽| 午夜丁香五月天综合| 99久久99视频只有精品| 狠狠色噜噜狠狠色噜噜噜999| 91欧美| 国产成人综合网| 噜噜噜噜婷婷五月天| 国产精品久久99| 九九色综合| 狠狠夜夜五月丁香| WWW.夜夜操.com| 五月丁香激情婷婷综合字幕| 亚洲乱码日产精品BD| 另类图片五月天| 97caop| AV在线不卡网站| 影音先锋AV男人站| 97超级操操| 丝袜熟女一区二区三区| www.色情五月天.com| 色播五月天婷婷老师| 婷婷五月天情色| 天天色播| 五月婷婷开心激情六月蜜桃| 成人婷婷五月天| 热久久视频99| 久久激情五月网| 天天爽,夜夜爽| 欧洲不卡视频| 婷婷五月激情丁香| www.99色| 日韩国产在线精品| 99综合99| 色婷婷久久视屏| 亚洲AV人人操| 狠狠做五月婷婷| 九九热思思| 26uuu国产| 久久综合人妻| 激情综合网激情五月俺也去| 97人人操人人拍| 日本久久婷| 97精品综合久久| 久久99久久99精品免视看婷婷| 丁香五月天在线观看| 婷婷五月综激情| 黄桃AV无码免费一区二区三区 | 色综合视频| 99热婷婷| 欧美成人精品一区二区| www.91九色| 激情综合五月天| 99热在线爱| 99热 在线观看| 天天日天天干天天插天天射| 天天色丁香| 精品爱欲五| 99啊精典免费视频| 三区激情四射av| 五月天婷婷激情| 五月天偷拍| 久色大香蕉| 天天天操天天天爰| 五月丁香欧美综合| 天天插天天射| 五月天婷婷久草丁香| 天天激情5月天亚洲| 色婷婷社区| 99在线精品视频| 综合九九久久| 婷婷深爱五月天在线| 五月色婷婷影院| 欧美怡红院黄站| 人妻AV在线| 深爱综合网| 亚洲视频一区| 综合99综合久久久久久久| 视色综合| 九九久久网| 久久加勒比| 天天干天天爽天天操| 97干在线| 五月五月婷婷| 五月婷婷干| 亚洲精品视频在线| 久久青青日本视频| 呦呦AV| 人人爱操| 久久五月天色婷婷| 五月丁香激情婷婷| 久热免费视频| 亚洲国产精品SUV| 色五月婷婷在线| 婷婷无五月无码视频| 激情欧美婷婷| 婷婷爱五月| 婷婷五月综合基地| 日韩五月天婷婷| 91碰碰| 色色综合激情| 俺去也五月| 国产av一区二区三区| 草综合网| 国产亚洲在线观看| 玖玖激情网| 99热免| 一本狠婷婷综合| 婷婷六月网| 激情六月婷婷| 狠狠香婷婷五月| 99热这里有精力| 182.t午在线观看| 狠狠操狠狠狠| 青青草国产亚洲精品久久| 九九久久综合| 啊v视频在线观看| 超碰91人人操| 热99这就是精品视频| txt五月激情四射网综合俺也来了| 激情都市五月天| 专区无日本视频高清8| 影音先锋女人av鲁色资源网小说免费| 天干夜夜操| 生活片五区| 99操视频| 亚洲综合在线视频| 久久怕怕视频| 丁香六月啪| 中文av网站| 美女五月天婷婷| 九九99精品| 激情五月婷婷伊人| 色九四色|