99精品久久精品一区二区-亚洲熟妇无码?v在线播放-日本国产精品无码字幕在线观看-久久久亚洲永夜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
返回資訊列表
日噜噜色| 婷婷婷婷婷婷婷五月丁香| 深爱五月激情| 国产精品视频免费看| 久久se 综合网 | 99热观看| 五月丁香亭亭| 日日噜狠狠色综| 色婷婷五月天偷拍| 婷婷五月天深爱| 天天干天天做| 丰满熟女人妻一区二区三| 男人天堂AV在线一区二区| 人人人va亚洲视频在线| 夜夜躁婷婷AV| 婷婷中文字幕| 啪啪小说五月天| 国产亚洲色婷婷久久99精品91 www.riverspirits.org www.hnnun.com www.changh | 9超碰在线| 第五色婷婷| 综合狠狠干| 激情五月丁香婷婷| 26uuu在线观看| 99热这里只有精品1025| 《亚洲操B久久免费在线观看,亚洲操B久久在线播放》在线播放 - 高清资源 - 97 | 超碰av在线| 丁香婷婷久久 | 五月婷婷色播视频| 69人人操人人爽| 久久开心五月天激情| 快乐婷婷五月天| 九月婷婷激情久久| 婷婷成人基地| 日本一级一片免费视频| 亚洲综合视频在线| 日本色色色| 色婷久九| 狠狠干综合| 中文字幕 中文字幕明步| 激情五月丁香五月| 五月丁香在线| 成人一级片| 婷婷五月天日逼| 丁香五月婷婷少妇| 色婷婷综合影院| www.超碰在线| 99操久久| www,超碰| 亚洲另类视频| 婷婷日欧美在线观看| 五月丁香猫咪久久婷婷综合视频激情四射网入口 | 久久九九@| 99热日| 亚洲av成人一区二区电影在线| 久久大香蕉同僚| www.日日夜夜| 久热视频这里只有精品| 久久 这里只有精品1| 久9热视频在线观看| 伊人无码高清| a久久| 99热激情| 91精品综合久久久久久五月丁香| 欧美成人A片AAA片在线播放| www.色婷婷.com| 久久激情五月| 久久久久9久无码视频| 色色五月婷| 色九九综合| 99在线精品观看99| 亚洲视频一区| 69久久99精品久久久久| 丁香五月狠狠在线观看| 国产色色在线| 9+1视频网址| 生活片五区| 久久九九99.www| 激情综合五月丁香六月婷婷| 婷婷五月丁香亚洲| 久久人妻www| 99久久久国产大片| 人草人人| 久久久久激情网| 亚洲色色香蕉| 丁香九月婷| 色噜噜五月天| AV九九| 婷婷啪啪| 亚洲成人在线播放| AV免费在线网站| 久久婷婷一级片| 婷婷综合在线视频| 噜噜噜噜噜日本视频| 日本a片网址| 就爱干 在线| 另类色视频| 亚洲 在线 性爱 | 超碰在线观看99| 婷婷99丁香| 天天激情5月天亚洲| 99综合一区| 久久这里只有精品无码| 久久丁香五月天| 99热在线精品观看| 丁香五月人妻| 久热这里只有精品6| 99色色| 日本欧美999久久久三级片| 日韩在线视频中文字幕| 丁香综合伊人AV| 五月天另类激情在线| 九九热99热| 天天操夜夜操| 国产激情久久| 久久婷婷综合网| 97在线观看| 九月丁香亭亭| 婷婷色狠狠| 色情综合网| 五月丁香激情综合网官网| 丁香五月综合激情性爱| 99综合视频| 国产AV一区二区三区最新精品| 久9综合| 91人人澡人人爽人人看| 婷婷色六月| 操一区| 欧美成人精品三区综合A片 | 人妻精品久久久久久久| 五月色亚洲| 婷婷丁香色性爱| 婷婷香香五月| 亚洲色色色| 伊人成综合五月婷婷| a69在线视频| 久久久五月四色| www.zbzhongsen.com| 五月深情久久| 超碰在线综合| 色色五月丁香婷婷| 色五月婷婷综合| 欧美性爱一区| 91狠狠色| 国产99精品免费视频| 久久激情五月| 久久婷婷五月国产激情综合片| 91操在线视频| 亚洲色精彩| 人人干av| 久久草中文日韩欧美| 日韩久久这里只有精品| 亚洲婷婷五月天| 欧美精品999| 综合色激情| 97luluse| 日韩另类在线观看| 71在线精品视频一区| 婷婷五月天AV激情| 婷婷在线播放| 午夜丁香五月天综合| 日韩欧美成人一区二区三区| 婷婷狠狠五月综合| 亚洲春色奇米影视| 久久综合网免费视频| 激情九月综合| 我爱宗和色| 五月网站| 91丨九色丨熟女丰满| 婷婷丁香成人五月天| 五月丁香花开综合网| 五月Huangsewang| 精品久久久久久久人妻| 久久性刺激| 久久九色| 五月丁香婷婷综合在线| 久久九九99| 色综合色欲综合天天免费 | 激情五月婷婷| 国产婷伊人| 第四色婷婷丁香五月| 激情 婷婷| 182TV大香蕉| 亚洲色情久久| 中文字幕精品推荐免费在线观| 婷婷激情丁香六月| 少妇高潮一区二区三区99欧美| 色色色色热| 丁香激情久久| 色约约视频一区二区三区四区五区| 国产亚洲色婷婷久久99精品91| 欧洲亚洲免费视频9| 色色色色网| 热热久久久久久久久| 夜色五月天| 丁香五月中文字幕色播| 俺五月| 色色色五月天激情资源| 久久99网站| 草草视频91| 色五月婷婷777| 日韩色五月| 久久色天堂| 大伊香蕉精品视频在线| 狠狠操综合| 五月天基地| 99精品一二三四视频| 青青久在线视频免费观看| 深爱激情网噜噜色| 天天艹天天综合网| 婷婷综合色网| 91人人看| 4438全国最大视频成人网站在线观看| 另类小说五月天| 亚洲色频| 激情五月婷婷丁香综合网| 婷婷天堂站| 91se视频| 国产69久久久欧美黑人A片| 天天日,天天插| 思恩热国产视频右线观看| 婷婷五月天亚洲综合网| 五月天婷婷影院| 五月综合婷婷久久在线 | 久久超视频| 激情内射人妻1区2区3区| 超碰成人在线观看| 99热精品观看| 久久超视频| 五月色俺婷婷| 综合久久婷婷五月丁香| 国产成人网址| 丁香大香蕉| 欧美日韩国产成人在线| 欧美97超碰| 激情婷婷五月天| 久热黄色| 开心五月综合激情网| 99爱在线视频观看| 色播五月丁香| 六月狠狠综合| 久久性爱视频这里只有精品| 美英法精品无码免费视频| 天天干天天操天天射| 国产精品美女| 99这里只有精品| 欧美一级色| 亚洲免费99| 婷婷五月天久久久| 婷婷五月丁香欧洲| 乱码操操| 丁香五月电影| 五月天色小说| 99热这里只有精品青草| 五月婷婷色| 狠狠色五月| 五月婷婷丁香五月天| 欧美色色网| 色色色国产| 六月丁香影院| 婷婷五月影院| 538在线精品| 丁香六月啪啪啪| 婷婷六月综合基地| 开心五月深爱五月| 日韩成人中文| 婷婷丁香www视频日本韩国| 婷婷五月丁香性爱| www.五月天色色色| 婷婷五月天堂网| 开心五月激情| 丁香六月色婷婷综合| 五月天色婷婷伊人网| 99视频在线精品免费观看2| 婷婷五月六月丁香| 五月婷婷天| 99A片| 五月丁香综合激情| 大香焦A∨| 五月香蕉网| 色婷婷成人做爰A片免费看网站 | 婷婷丁香五月亚洲| 婷婷久久精品| 免费无码毛片一区二区A片| 99国产在线精品视频| 波多野结衣不卡AV| 中文字幕综合| 99精品无码网站| 67194国产| 99这里有精品久久97| 99热20| 久久成人天| 五月天婷婷基地| 丁香五月婷婷影院| 激情五月丁香五月| 五月天另类小说久久小说网| 久久免费精品小视频| 啄木鸟黑丝一区二区| 色丁香五月综合网| 色玖玖| XX色综合| 国产精品久久久99视频| 能直接看的av网站| 精品一二三区久久AAA片| 91干网站| 色网站99| 色婷婷AAA| 婷婷在线网| 99精品久久久久久久| 99色色爰| 五月天丁香| 强辱丰满人妻HD中文字幕| 亚洲色综合色网| 亚洲精品乱码久久久久99| 五月天伊人综合| www.婷婷五月| 国产熟女大叫受不了| 91婷婷五月天综合视频| 丁香五月天啪啪| 97涩婷婷婷婷基地| 五月天婷婷丁香视频| 97热精品| 91熟妇大香蕉| 五月婷综合性中心| 久99视频| 99无码| 99热99美国在线观看| 亚州综合色| 久久五月天激情婷婷| 思思精品热在线| 久99| 激情五月天黄色小说| 亚洲狠狠干| 亚洲成人在线播放| 欧美久草在线日本一级特黄大片做受9在线观看韩国电影《两个女人》未删减-毛片 | 色婷婷丁香社综合| 开心激情网在线| 色99色| 色婷婷激情四射视频| 大狠狠在线| 深爱激情五月婷婷| 91色色色| 97人人干| 性色欲情 网站| 六月丁香综合| 久久五月丁香婷婷| 黄色成人网站在线播放| 激情爱爱网站| 9久久精品| 我去色色网五雨天| 五月婷婷五月天| 国产av第一专区| 丁香五月亚洲综合| 婷婷情色五月| 中文乱子伦视频| 婷婷亚洲在线| 开心五月天激情网站| 婷婷婷狠狠| 五月婷婷中文网| 成人国产欧美大片一区| 狠狠色 综合色区| 色婷婷五月婷婷五月婷婷五月| 色婷婷色99国产综合精品| 97香蕉碰碰人妻国产欧美| 丁香六月激情国产| AV无码免费| 丁香五月婷婷激情尤物| 成人在线网址| 亚洲免费看片| 99热在线观看免费| 六月激情网| 天天艹夜夜艹| 五月天色图| 九九Av| 欧美va亚洲va| 97色 五月天丁香| 六月婷婷影院| www.91在线看| 九久9精品| 色婷婷丁香五月天在线视频| 色色色欧美| 国产精品久久..4399| 九九热精品| 欧美毛片www| 婷婷五月天丁香综合网| 精品网站:999WWW| 欧美色色色色色色色| 亚洲这里只有精品| 亚洲99在线| www,色综合| 99热精品在线播放| 蜜桃五月天| 婷婷婷久久久| 国产69久久久欧美黑人A片| 久色欧美| 夜夜涩涩涩| 九九精品9| 婷婷五月在线观看| 综合激情综合啪啪| 色欧美影院| 激情五月天小说网| 91九色精品| 五月丁香色色网| 婷婷丁香六月影视| 97性视频| 丁香激情综合| 综合色久| 婷婷色五月激情强奸四射| 夜夜夜天天操| www久久久久| www.五月天| 青草激情综合| 日日操,日日爽| 色婷婷亚洲在线观看| 色9999日韩国产| 伊人狠狠综合| 婷色人人狠| 色五月色五天色情网址| 丁香婷婷综合激情五月色| 激情五月天色播| 色婷婷五月天天天天天| 丁香婷婷五月综合影院| 九97免费视频| 激情五月天婷婷播播久久综合91| 亚州色色色| 婷婷爱五月天| 激情六月日韩| www.亭亭五月天| 99re热精品视频国| 亚洲V国产V欧美V久久久久久| 欧美色色网| 婷婷天天插天天爱| 天天爽夜夜爽夜夜爽精品| 婷婷香蕉视频| 91干婷婷| 久久九九热38| 亚洲12p| 丁香六月啪| 日本五月天一页| 精品久久人妻热| 久操综合| 午夜成人综合| 中文AV在线观看| 五月丁香婷婷欧美色图视频五月丁香777电影| 久九色| 免费亚洲婷婷| 26uuu成人网| 丁香五月停停av| 成人婷婷桔色| 五月天激情网图片 - 百度| 婷婷五月天成人在线视频| 婷婷五月,偷窥偷拍网| 久久A极片| 丁香六月啪| 九九操操| AV人人操| 国产日韩欧美| 亚洲精品久久久久AV无码| www.丁香五月| 夜夜撸日日操| 激情深爱五月天| 国产一级婬片毛片| 精品人妻久久久久久久| 丁香欧美| 六月丁香久久| 天天射影院| 99热这里只有精品9| 丁香五月综合AV在线| 米奇影视五月天| 激情五月丁香激情综合网 | 97中文在线| 九九色99| 五月婷婷色色| www.99色在线| 日熟女| 99久久99久久| 色播五月婷婷综合| 日日操日日射| 噜噜视频| 五月婷婷AV| 天天日夜夜爽| 天天日色情| 熟妇天天综合| 久久久香| 中文字幕丁香五月| 五月天天天色| 国产成人+综合亚洲+天堂| 天天日天天爽| 97碰碰叉| AV在线大香蕉| 六月婷婷影院| 天天射影院| 久热99| 四川女人毛多水多A片| www.韩日视频| 色久九| 小视频在线亚洲| 开心激情站婷婷五月天| 色婷婷天堂| 91丨九色丨国产打屁股| 色婷婷影视99| 五月丁香六月色婷婷综合五月天| 就爱射中文字幕资源网| 91se在线视频| 超碰cap| 婷婷99中文字幕| 视色网在线播放| 99爱在线视频观看| 婷婷综合五月天| 亚洲丁香婷婷| eeuus五月婷| 色99热| 99热9| 婷婷五月性感| 天天摸天天舔在线视频| 五月天天天色| 婷婷综合激情| 久久草中文日韩欧美| 伍月激情天| 男女免费视频999| 99国产精品白浆在线观看免费| 天堂在线婷婷| 色五月久久成人婷婷| 开心婷婷中文字幕| 伊人五月婷| 999婷婷综合| 婷婷五月天婷婷| 亚洲无码色色| 97久人人| 日本成人噜噜噜| 大地资源色婷婷视频在线| 激情五月综合久久| 玖玖资源站中文| 色色亚洲| 亚洲性受XXXX五月丁香| 亚洲性视频| 岛囯综合激情网| 国内裸舞二区| 日本色色色| 色域五月婷婷丁香| 色五月涩涩婷婷| 香蕉久日夜| 最新热中文字幕| www.久久久久久久| 久久与婷婷| 噜噜色婷婷| 97色五月婷婷在线| 丁香亚洲婷婷五月| 在线不卡视频| 99热欧| 亚洲色网络| 在线视频另类| 国产精品成人在线| 亚洲永久免费| 五月丁香婷婷成人网| 亚洲乱码w在线观看| 天天做天天爱天天综合网| 婷婷大香焦| 超碰renrenai| 曰本久久女| 日本熟妇人妻在线| 丁香五月综合狠狠| 久久久久久综合五月婷婷| 国产AV一区二区三区日韩| 激情五月深爱五月| 六月色婷婷| 亚洲精品字幕| 亚洲开心激情网| 人妻AV中文系列| 亚洲舔观看| 蜜桃成语时李时珍 免费| 人人色婷婷五月天| 日本不卡一区二区三区| 色婷五月天网站| 五月婷婷丁香日韩在线| 天天爽日日爽夜夜爽| 欧洲综合一区| 五月婷婷在线免费观看| 欧美大香蕉视频| 色欲天天综合网| 中文字幕在线观看视频www| 狼人久草| 亚洲综合视频一下| 无码一级片| 婷婷在线播放| 五月天国产成人| 一本大道伊人AV久久综合| 亚洲 小说 欧美 激情 另类| 婷婷五月丁香激情图片| 偷拍91九色| 五月丁香福利| 成人综合网站| 亚洲六月色| 婷婷五月AV| 亚洲乱码日产精品BD| 超碰狠狠色| 夫妻超碰在线| 天天做天天爱天天高潮| 99免费视频在线观看爱| 亚洲AV中文在线| 97久久久| 这里只有精品在线观看视频| 日韩 中文 欧美| www激情网| 大香蕉人人网| 天天干天天干天天干天天干天天干| 天天婷婷天天| 九九中文字幕九| 高清无码视频网址| ss视频xx91| 婷婷伊人| 五月丁香在线综合| 99er这里只有精品| 97人人操人| 亚洲婷婷免费| 狠狠xx| 激情四射五月天偷偷看婷婷| 久久精彩视频99| 天天插综合| 综合图区激情| 欧美色色色色色色色色色色影视| 亚洲国产网站| 日本熟妇乱妇熟色A片蜜桃| www.久热| 色五月色五天色情网| 色私五月婷婷| 丁香五月停停av| 婷婷五月六月| 亚洲碰碰碰| 久久开心五月婷婷| 久久色五月天| 丁香五月人妻| 大香蕉天堂色| se色婷婷视频| 五月激情小说| 五月丁香在线观看| 91色在线 | 日韩| 国产精品噜噜在线视频| 婷婷丁香五另类网站| 97色一二三| 99性爱| 武则天精品久久| 久久久久激情| 91丨人妻丨国产丨丝袜| 影音先锋美国A| 99久久6| 日本美女上人| 久久久久久人妻| 五月婷导航| mmm1717.6dbm人人爱人人操| 日本久热| 9久国产精品| 午夜婷婷久久 | 日本天堂免费99| 9九九久久精品无码专区| 99热婷婷| 五月婷丁香| 久久9精品| 久久久无码精品成人A片小说| 丁香五月天啪啪激情综和网 | 久久99视频| 伊人色综合影院视频| 九九99在线| 99天堂网最新| 碰碰碰97免费精彩视频| 狠狠色综合无线观看| 婷婷中合| 99热有精品在线观看| 图片区 小说区 区 亚洲五月| 99自拍视频| 99爽视频| 丁香婷婷色五月| 337p大胆噜噜噜噜噜91Av| 婷婷97碰碰| 日本久久综合| 久久综合九九| 五月婷婷我| 狠狠五月天激情| 亚洲综合婷婷六月丁香五月| 五月天社区狠狠| 五月天婷婷视频30| 色五月激情五月| 五月天激情啪啪| 色呦呦美女| AV在线免费网站| 久99热| 99视频内射三四| 激情六月天| 4438亚洲欧美| 91日综合欧美| 色吧婷婷| 激情婷婷五月女| 久久这里都是精品视频| 久久视频在线| 大香蕉中文| 97色在线| 国产精品久久久久久久久久| wwww.9免费视频| 五月婷婷婷综合网| 99免费视频久久| 激情合网婷婷| 五月天天天天天天天天天天天天天天天婷婷婷 | 91美女被操| 九九成人| 国产色香蕉精品五夜婷| 色碰碰视频| 天天色五月| 五月婷婷婷婷| 久热这里| 色综合久久无码| 色999五月色| 天堂网亚洲色图| 久9无码视频| henhencao国产在线| 天天综合天综合| 亚洲操逼网| 久操欧美在线观看97| 日韩av网站在线观看| 丁香五月天堂| 婷婷丁香综合成人| www.色五月.com| 色狠狠色噜噜AV天堂五区| 午夜色丁香| 开心久久五月天| 婷婷五月天欧美| 精品久久99| 一级无码作爱片| 天天天天天天天干| 九九热在线观看视频| 久9视频| 久久九⑨| 激情都市五月天| 一区二区成人电影| 99热黄| 综合激情五月丁香9999久久精| 天天婷婷| 亚洲黄网AV| 久久99综合| 99热这里只有精品在线观看| 99人妻碰碰久久久禁片| 97色色婷婷| 五月丁香六月婷婷网| 国产精品a无线| -91九色大屁股| 色五月婷婷91| 色丁香五月婷婷| 亚洲色区17| 99热99思午夜精品| 丁香五月天激情综合| 丁香五月激情网| 五月婷天天搞视频| 26UUU在线观看| 99久热视频在线| 婷婷伊人网| 欧美色色色色色色色| 色五月婷婷亚洲| 九月色婷婷综合| 五月丁香婷婷国产精品综合| 婷婷五月综合婷婷| 99色热| 五月婷婷中文字幕| 久久香蕉丁香| 色99在线看| 天堂久久大香蕉| 香蕉色色网| 久9综合| 九月激情婷婷丁香| 热91久| 少妇2做爰HD韩国电影| 99这里有精品| 国产免费一区二区在线A片视频| 天天射综合网站| 青青草tp| 综合久久婷婷| 婷婷九月色| 久久婷婷热| 综合久| 超碰国产在线| 亚洲第一第二网站| 五月丁香在线| 激情第四色| 99精品视频在线观看| 亚洲视频一区| 99A片| 综合激情九月婷婷,激情综合婷婷中文字 | 狠狠爱综合| 九九热超碰| 亚洲人人操| 色婷婷视频| 狠狠干综合| 国产午夜成人免费看片无遮挡| 噼里啪啦完整版中文在线观看 | 国产va在线视频| 天花AV无码| www.一起草av| 1024成人在线观看| 91黄址| 亚洲小视频免费看| 丁香五月日啪| 天天肏天天爽夜夜爽| 99热这里只有精品在线播放| 色综合色色| 九九精品综合| 色五月av| 丁香婷婷成年| 九九九九中文字幕| 超碰在线观看9| 天天五月丁香五月| 激情五月网站| 99热这里精品| 欧美在线干| 国产乱妇无乱码大黄AA片| 日本无码专区| 涩玖玖免费视频| 91丨九色丨白浆| 丁香六月色香蕉视频| 六月香五月婷| 99热这里只有精品22| 超碰免费大香蕉| 超碰人妻在线| 爱iii做iiii日日| 啪啪夜久久| 夜夜人妻五月天| 五月丁香久久丝袜啪啪| 9热在线观看| 激情五月丁香五月| 国产AV网页| 99热最新| 丁香婷婷十月| 九月激情网| 69凹凸成人综合网| 九热免费视频| 五月夜丁香| 丁香激情网| 99免费视频| 久久丁香九| 人人爽天天莫| 九九热经典视频在线观看| 六月婷婷综合| CHINESE熟女老女人HD视频| 一级无码作爱片| 激情丁香久久| 丁香婷婷人妻| 婷婷丁香激情综合色情| 色播丁香| 99热亚州综合| 欧韩性爱| 日韩五月丁香| 午夜婷婷| 色婷婷五月综合在线| 日日鲁鲁夜夜爽爽| 色婷精品91| 婷婷五月天性色| 99re在线观看| 婷婷五月激情图片| 亚洲亚洲人成综合网络| 婷婷射图五月天| 开心五月激情五月丁香五月婷婷| www.精品99| 亚洲一级 片内射网站在线观看| 日本啪啪天堂| 欧美VA在线观看| 涩五月婷婷| 欧美精品啪啪| 天天激情站| 日本精品人妻无码77777| 五月婷亚洲精品AV天堂| 久久这里有| 夜夜操狠狠操| 色激情综合| 色婷婷狠狠| 无码 av电影| 久久黄A片| 色婷婷先锋| 九色激情| 亚洲综合婷婷| 丁香婷婷啪啪| 天天噜日日噜综合无码| 婷婷五月天小说网| 国产性av| 插插干干干色| 99re思思久久| 国产AV影片| 狠狠操.com| 婷婷五月av| 日韩av在线免费观看| 99热这里只有精品国产精品| 亚洲精品久久久无码| 丁香六月婷婷综情欧美| 午夜激情综合| WWW,五月| 激情av在线| 久七香蕉| 久久99网| 97超碰99热99| 丁香五月中文字幕久色| 久久精品无码一区| 操逼在线视频| 伊人在线视频| 婷婷另类开心| 成人国产欧美大片一区| 五月天激情综合网站| 99热超碰| 天天色月| 狠狠干天天日| 操操操操操操婷婷五月天| 特黄三级片| 日韩欧洲亚洲| 五月丁香婷婷色色| 97久久人人| 日夜操B| 9久热| 色人久久| 六月婷伊人| 日本不卡一区二区三区| 婷婷六月插屄激情| 成人免费黄色短视频| 天天插夜夜爽| 97久久综合网| 深夜A片| xxxx五月天色色| 五月色婷婷综合| 麻豆精品| 丁香 亚洲 久久| 99热主页日本| 欧美日韩成人在线| 亭亭玉立国色天香| 精品夜夜澡人妻无码AV| 丰满人妻一区三区三区| 天天久综合网永久入口18| 中文字幕色色色| 九 九九九AV| 丁香六月婷婷一区| 男女啪啪做爰高潮无遮挡| 无码激情精品色婷婷久久久久| 久久综合九色综合97婷婷| 色日本网| 成人在线视频一区| 婷婷射丁香| 亚洲婷婷五月天综合| 精品一二三区久久AAA片| 色播丁香婷婷五月激情| 自拍视频99| 区美毛片子| 五月天色导航婷婷资源婷婷| 成人精品视频99在线观看免费| 玖玖资源天天无码| 色婷婷色综合激情91| 99ri精品视频在线观看| 怕怕av| www99精品日韩| 99视频在线| 久激情网| 中文字幕1区2区。| 色婷婷丁香五月天在线观看| 婷婷免费无马| 婷婷六月天| 国产VA亚洲VA96| 激情丁香九九五月综合网| 色五月av| 色情综合网| 亚洲乱码在线观看| 99re在线播放| AV性爱网| eeuus五月婷| 婷婷伊人綜合中文| 丁香五月天啪啪| 人人爽亚洲| 天天噜日日噜综合无码| 色135综合网| 丁香婷婷色五月激情综合| 久久永久网址| 99热欲| 五月天婷婷综合网| 五月婷婷综合久久| 色婷婷基地在线| 中文字幕高清av| 色五月婷婷久久| 丁香五月天网友自拍啪啪啪视频| 免费黄色片子| 亲子乱AV-区二区三区| 自拍偷窥99热| 五月婷婷丁香色播网| av在线资源| 婷婷六月香| 婷婷伊人网| 色五月综合激情| 婷婷 久综合| 色五月婷婷青娱乐| 强辱丰满人妻HD中文字幕| 一本色道久久综合狠狠躁小说| 99色最新在线视频| 九九色之九九色之88| www.9操| 五月婷亚洲精品AV天堂| 五月丁香六月情婷婷久久| 丁香六月色婷婷| 激情婷婷五月综合| 99国产精品久久久久久久久久久| 亚洲人人操| 五月花亭亭| 亚洲精品色色| 六月婷婷色色色| 欧美 色婷婷| 激情五月天视频| 激情五月天网| 五月天欧美激情| 2015好吊操| 大香蕉久热| 任我肏视频精品| 久久综合久色欧美综合狠狠 | 色色无码| 欧美丁香五月97色| 狠狠干无码| 六月丁香婷婷色69| 久久欧洲久久| 色婷婷五月天成人网| 五月丁香婷婷伊人日韩| 午夜不卡久久精品无码免费| 人人摸人人操人人爽| 综合久久人妻| 这里只有精品视频看看| 婷婷亚洲五| 久久99网站| 久久久五月五丁香| 欧美人人超级碰| 婷婷视频在线| 无码人妻少妇色欲AV一区二区| 久久激情网| 成人AV中文字幕| 丁香色婷婷五月天| 婷婷五月天综合中文| 天天天天天操| 国产日韩欧美性生活| 丁香5月激情网| 亚洲人妻AV| 黄色五月婷婷| AV在线大香蕉| 天天干天天插| 五月婷婷综合在线| 五月天堂色| 97精品在线| 色五月天丁香婷婷| 丁香五月天激情综合| 丁香婷婷影院| 亚洲色网址| 5月丁香婷婷激情网| 国产精品色婷婷AV综合色色| 色综合色色色色色| VA婷婷亚洲| 亚洲、热| 狠狠狠狠狠草| 99热中国| 色五月在线观看| 丁香五月婷婷在线观看| 天天干狠狠艹| 婷婷色基地| www.五月丁香| 激情五月天婷婷| pom538精品视频| 五月婷婷丁香大陆免费| 久久久久亚洲AV成人无码电影| 香蕉操亚洲| 99视频在线| 五月天激情综合网| 五月婷婷六月丁香| 777精品久无码人妻蜜桃| 少妇伦子伦精品无吗| αv中文字幕在线观| 色婷插| 婷婷丁香www视频日本韩国| 日本久草福利| 综合色图区| 色五月久久成人婷婷| www.五月天。com| 五月婷婷免费看| 激情五月激情综合网| 色婷婷www| 伊人婷婷五月天| 熟妇人妻中文字幕无码老熟妇| 激情婷婷丁香五月| 操b视频在线观看一区二区| 欧美在线视频9| 欧美熟女99| 久久99热这里只有精品23| 天天干天天干天天干天天干天天干天天 | 激情综合婷婷| 五月综合无码| 激情婷婷色色| 疯狂做受XXXX高潮A片| 色欲色欲久久宗合网| 色婷婷AⅤ| 综合色七七| 人人操91色| 久久色情| 国产精品国产VA片国产| 99精品视频免费| 99精品国产热久久91色欲| 婷婷五月天丁香| 亚洲超碰中文字幕| 五月婷在线影院| 亚洲色情免费网| 婷婷五月天小说网| 99re思思热久久| 婷婷91视频| 免费亚洲成人电影AV| 五月噜噜噜色综合| 激情色视频| 五月婷婷久久综合| 俺也去五月婷婷丁| 伊人网啪啪| 婷婷丁香五月天欧美| 综合五月婷婷| 久久色情| 婷婷五月欧美| 婷激情五月天视频导航| 五月伊人婷婷| 色爱亚洲| 99re免费视频| 色欲婷婷夜夜| 亚洲国产精品VA在线看黑人| 婷婷五月天av| 操日本三片99| 成人网丁香五月| 综合激情在线视频| 中国无码av| 九九综合九九| 婷婷丁香在线播放| 这里只有精品1| 国产精品黑丝| 永久的网站AAAA | 五月丁香色婷婷| 五月婷婷久久久久| 伊人超碰| 97色色婷婷| 色色色五月天激情资源| 成人色站,在线视频,看片-SS1AV| 激情五月五月婷婷| 农村熟妇高潮精品A片| 日本欧美国产| 都市激情五月婷婷亚洲| 欧洲色色| 思思99久久| 久狠日av| 五月婷婷激情| 五月天丁香综合| 天天爽免费视频| 202丰满熟女妇大| 另类图片色五月| 婷婷深爱五月| 婷婷伊人久久无码色五月| 99热九九这里只有精品| 五月天久久91| 久久婷婷五月天丁香| 这里只有精品日韩| 超碰资源在线| jiujiuxiangjiaowang| 久热2025无码| 67194国产| 亚洲色色五月天| 色五月琪琪| www婷婷| 久久久久久久,99精品视频| 五婷婷六月合| 日本狠狠色| 免费婷婷| 亚洲va成人va成人va在线观看| www.99riav99| 日日夜夜青青草| 99这里有精品视频| 婷婷婷久久久| 野战毛片三一3| 青青久久五月天丁香婷婷| 26uuu亚洲色| 337p大胆噜噜噜噜噜91Av| 91干| 大香蕉五月天婷婷| 婷婷爱爱蜜臀天天操| 亚洲精品国产精品乱码视99| 99热草草| 五月天激情久色| 无码少妇高潮喷水A片免费| 噜综合| 99这里只有精品|v| 色综合色色| 超碰狠狠操| 亚洲激情av| 天天爽人人综合免费7799| 五月婷婷色播| 99色| 夜夜大香蕉婷婷丁香| 另类激情五月在线视频欧美| 97在线干| 九九激情| 色九月欧美| 97婷婷狠狠| VA色婷婷| 亚洲操B| 五月婷婷偷| 亚洲人妻av| 六月丁香婷婷网| 久久99久久99精品,久国产,久久精品免费,99久在线,久久久久国产精品免费网站,9 | 激情綜合網址| 五月婷精品| 亚洲综合字幕色色| 婷婷五月影院| 77799热| 欧美性生交A片免费看| 亚州视频九九99| 超碰色热| 激情五月天小说|五月天开心激情网|亚洲精品国产自在现线|黄色五月天 | 日本本土色网第一区| 五月丁香综合网| 色狠狠六月| 婷婷最新地址| 看国产探花操逼三级片| 久久中国毛毛片爱久久| 色婷婷激情四射视频| 婷婷丁香先锋资源网站| 色9月| 日本色图综合| 天天色综和网| 丰满人妻妇伦又伦精品国产| 午夜无码精品色综合久久| 丁香五月婷婷操逼| 婷婷五月丁香五月| 婷婷五月天激情网| 99这里只有精品| 五月婷婷激情中心| 99在线播放| 大香蕉婷婷色| 热无码A∨| 久久免费高| 天天射影院| 婷婷五月激情网站| 日逼AV影音先锋男人资源站| 5月丁香啪啪啪| 九九婷婷综合| 欧美日韩中文国产一区发布| 99精品22| 日本 欧美在线| 性av| 日韩1区2区| 色色激情| 日韩无码AV电影网站| 色色色热| 婷婷五月天堂网| 久草免费福利视频| 丁香六月激情四射| 九九九九九无码| 欧美激情 日韩无码 婷婷 五月天| VA色婷婷| 国产在线另类五月婷婷| 69久久99精品久久久久婷婷| 五月婷婷色色| 激情五月天综合| 欧美日本VA| 99热草草| av在线观看免费| 欧美性爱5月天天天看| 丝袜激情网| 成人国产欧美大片一区| 色五月综合资源推荐| WWW夜夜| 婷婷 丁香 久久| 天天插天天干| 操逼六区|