免费国产精品自在自线-91精品国产色综合久久久浪潮-99热久久免费频精品-国产精品国模在线观看-久久亚洲国产精品成人?V秋霞-久久国产一级A片免费播放-亚洲国产欧洲综合97久久-久久国产白嫩美女呻吟高潮

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
返回資訊列表
丁香五月婷婷六月婷| 亭亭玉月丁香| 激情四射婷婷| 一本到不卡高清DVD| 五月天综合激情网| 婷婷五月开心中文字幕色| 91seAV| www,色婷婷| 丁香五月婷婷动漫| 婷婷五月激情欧美| 色yeye色综合| 五月久久丁香| 亚洲亚洲人成综合网络| 99视频精品在线| 日日日影院| 五月激情射| 五月丁香久久| 狠狠色五月| 综合激情五月丁香| 久久新地址| 综合五月天天天天天五月| 色蜜婷婷| 日韩三及成人AV片| 九月av在线| 亚洲爆乳无码精品AAA片蜜桃| 国产va视频| 婷婷大美在线| 蜘蛛女免费观看完整版高清电影| 日本欧美在线| 激情久久久久久久久久久| 大香蕉五月婷婷丁香| 精品久久久人妻| 天天摸色吧天天摸色吧| 亚洲激情精品| 久久99美女精彩视频| 视频综合网| 先锋资源婷婷| 丁香 亚洲 久久| 丁香婷婷五月色综合| 99热免费观看| 超碰成人在线观看| 91超碰在线播放| 久久久精品色| 五月天另类小说| 六月丁香激情最新更新| 五月开心婷婷网| 婷婷丁香www视频日本韩国| 五月丁香啪| 婷色五月天| 可以免费看的AV网站| 色色色九九九五月婷婷| 91夫妻视频| 99热8| √天堂资源在线人妻熟女| 思思精品热在线| 涩涩涩婷婷| 激情五月激情综合俺也去婷婷小说| pom538精品视频| 综合久久8| 激情综合婷婷| 久久草大香蕉| 色伦专区97中文字幕| 欧美色色色| 九九热黄色| 99九九视频精彩在线| www天天色天天射| 99热在线观看这里只有精品 | 色婷婷小说| 人人视频色| 99性感视频| 色综合xx| 婷婷日日夜夜| www.99热视频| 夫妇交换刺激做爰| 狠狠色噜噜狠狠亚洲A∨| 伊人在线另类| www.日本91| 黑人无码一区| 色综合爽| 草婷婷在线| 热99re| 可以直接看的AV网站| 最新日韩AV中文字幕| 五月婷婷啪啪啪啪| 久久视频婷婷| 99热综合在线| 五月天激情网页| 亭亭五月天黑人2014| 丁香五月天啪啪激情综合网| 成人永久免费视频在线观看| 色婷婷久久| 国产精品久久久久久久久久| 9婷婷内射| 99久久99视频| 九玖欧洲亚洲| 欧美在线操| 99久久6| 人人操av| 9 1 A v久久久| 国产成人在线不卡AV| 少妇激情基地| 亚洲热热视频| 亚洲精品无码一区二区| 婷婷五月色情| 天天草天天爱| 久久婷婷五月综合伊人| 99热在线观看| 99热欧美| jiZZdr| 色五月人妻| 天天色天天操天天射| 久久色大香蕉| 91在线操| 蜜桃婷婷丁香| 五月天成人小说| 99精品偷自拍| 99操碰| 大狠狠在线| 98色花堂98t.R| 五月丁香久久综合| 人人射人人高潮| 91人人网| 碰超在线九色| 婷五月天在线草| 日韩色五月| 亚洲超碰在线| 操逼综合网| 色综合久久888| 九九热这里只有精品9| 丁香五月婷婷偷拍| 久热精彩视频98| 久久久com| 开心五月深爱激情| 国产做A爰片毛片A片美国| 激情五月天色色色| 亚洲人妻一区二区 | 免费看成人747474九号视频在线观看| 五月丁香天堂网婷婷| 九九性视频| 狠狠色噜噜狠狠狠狠综合| 久久婷婷原创视频| 狠狠擼综合| www.五月丁香| 97五月天婷婷综合激情网| 欧美色六月婷婷| 美欧日韩国产成人在战| 人人爽欧美婷婷久久久五月丁香 | H亚洲| 91超碰在线观看| 激情五月婷在线精品| 思思热精品在线| 99热99| 第六色在线| 99久久综合网| 亚洲AV人人操| 久久99久久99精品免观看粉嫩| 久久av电影| 91超碰在线观看| 丁香色情五月综合激情| 亚洲色婷婷五月| 久久狼人天堂| www.99久| 激情久久久久| 婷婷久久五月| 婷婷导航| 丁香六月婷婷综情欧美| 思思热精品在线视频| 热99在线精品| 91人操| 九九综合88| 色色色色色色97| 99色| 婷婷综合五月天激情| 丁香五月综合婷婷| 五月婷婷丁香综合| 色99在线观看| 性爱在线播放av| 色久女| 成人资源在线| 97人人看| 337p大胆噜噜噜噜噜91Av| 丁香婷婷五月综合| 五月伊人网| 久热超碰91| 在线观看免费狠狠色丁香香综合 | 激情久久久| 日韩九区| 五月天综合网| 色情一区二区播放| 热久久婷婷| www、色色色| 99在线视频操999| 五月婷婷激情中心| 亚洲婷婷基地| 日本久久天堂| 欧类av怡春院| 久久成人精品视频| www:99热视频| 色播五月丁香| 丁香五月婷婷色五月| 噼里啪啦在线观看免费完整版视频| 成人丁香色| 99精品在线观看视频| 激情久久久久久久久久| 97干在线播放| 79亚洲精品少妇| 日本不卡高字幕在线2019| 五月天小说激情| 五月婷婷六月激情| 久9精品视频| 91一起操| 十二区无码| 婷婷天天日婷婷| 99久re热| 做爰丰满少妇1313| 色婷婷五月天在线观看| 五月丁色AV| 伊人免费视频9| 玖玖资源站蜜臀| 日韩精品一品二区三区的使用体验 | 丁香在线视频| 婷婷五月丁香六月伊人网| 狠狠干综合| 综合激情网| 丁香五月亚洲综合丝袜| 婷婷性爱影院| 色噜噜狠狠狠综合曰曰曰| 国产黄大片在线观看画质优化| 蜜桃五月天色| 精品久热| 九九99视频精品| 99福利导航| 99热久久这里只有精品| 特级操b片| 99操逼| 成人五月天视频播放| 九九大香视频| 九久久婷婷| 丁香五月婷婷色播艳门照| 亚洲一区二区无遮挡A片| 99热.com| 狠狠干综合网| 五月五婷婷网| 影音先锋综合网| 色色色色色色色色网站| 五月天亚洲色| 日产精品一线二线三线芒果| 91干在线| www、色色色| 亚洲婷婷五月| 偷拍99在线视频观看| 日韩无码色色| 五月天婷婷免费视频| www.狠狠操.co m| 丁香六月婷婷色XXXX| 99热只有| 97 A I色色| 天天色情站| 五月丁香趴趴| 亚洲免费成人电影AV| 色色色色网| 亚洲热视频在线| 另类国产区| 99这里只有精品| 蜜臀av粉嫩av懂色av| 天天综合图片| 五月丁香怕怕综合| 亚洲五月婷婷| 丁香婷婷五月激情| wWW九九在线播放| 亚洲精品白浆高清久久久久久 | 99热乎| 99偷拍视频在线日本| 无码 av电影| 久久这里只有精品热在99| 丁香五月色| 欧美三级黄色片久久| 日本色99网站| 欧美熟女视频 色婷婷| 操逼三区| 亚洲无线视频| 欧洲综合视频| 伊人婷婷五月天| 久热黄色| 色婷婷影音| 色色色色色综合| 丁香激情五月| 激情无码网| 色深爱五月| 国产另类综合| 婷婷丁香综合成人| 五月在线婷色| 精品色情一区二区三区四区| 青青操绿aaa一区日v| 五月天久久婷婷| 日韩精品一区二区亚洲AV观看| 五月天天综合网色婷婷| 婷婷之玖玖| 夜色爱爱亚洲| 小泽玛利亚视频一区二区| 九九色插| 91亚洲天堂| 日韩久久欧亚| 日韩精品一区二区亚洲AV观看| 九九美女视频| 婷婷五月综合社区在线| 9 1大香蕉| 影音先锋男人av资源站| 色五月婷婷天堂| 亚洲欧美日韩VIP| 中文字幕在线免费看线人| 九九黄色网| 婷婷成人五月天成人文学| 99精品在线播放| 色停停香蕉视频| 日本a片网址| 日本色婷婷| 97碰免费视频在线| 欧洲亚洲免费视频区| 婷婷五月蜜桃成人桃色丁香| 少妇口诉沐足视频播放器网址| 久久这里只有精品07| 亚洲色激婷| 婷婷五月天,影院| 午夜 外网 精品 在线| 五月丁香六月婷婷亚洲激情综合| 亚州精品久久久久AV无码| 欧美亚洲婷婷五月| 99性爱视频| 五月丁香久久久| 五月亭亭六月激情| 五月色欧洲| 激情综合亚洲色婷婷五月| 五月综合缴情网| 婷婷香五月天| 91久热| 国产精品人成A片一区二区| 99热只有| 久久99日本精品视频免费观看| 99视频在线观看视频| 91av成人| aa久久| 这里只有精品视频在线观看免费| oVV4WIB3vFi8D| 久久婷婷五月天激情唯美| 亚洲色优| 五月婷婷激情综合| 欧美碰碰碰| 激情av在线| 婷婷丁五月| 这里只有精品99www| 人人操人| 伊人久久艹| 五月丁香手机在线| 丁香五月婷婷在线观看| 狠狠干夜夜干| 亚洲天堂AV综合网| 婷婷丁香五月亚洲欧美| 激情五月色在线播放| 五月色色网| 久久er99热精品一区二区| 日韩啪啪自拍| 亚洲一色色色色色色色色| www.国产色| 五月激情小说网| 国产精品久久久爽爽爽麻豆色哟哟| 色色综合网。| 青草性爱视频| 婷婷色九月| 人人爽网| 91要啪| 青青夜夜狠狠夜夜狠狠| 深爱五月天| 色综合天天| 91热视频色网站| 丁香婷婷五月天色播| 五月婷婷天天| 日本eVa一区=区视频| 五月天激情久久| 婷婷丁香五月六月激情| 99久久久久久| 九九美女视频| 丁香婷婷久久老熟女综合网| 97色碰| 操人精品| 操你av| 久久九九热视频| 99热在线网站| 热婷婷在线视频| 在线观看熟女少妇| 色色丁香婷婷| 色婷婷啪啪综合网| 五月天中文网| 香蕉久久av一区二区三区| 大香蕉婷婷五月天| 久久五月天色婷婷| 婷婷五月激情五月丁香五月| 丁香婷婷伊人| 国产肥白大熟妇BBBB视频| 五月婷婷色情| 婷婷五月激情六月| 激情丁香五月| va婷婷| 日本4399天堂中出| 日本色婷婷久久99精品91| 丁香色五月 97干| 综合激情sV| www夜夜操comwww| 伊人www22综合色| av在线不卡播放| 99热这里只有精品50| 丁香五月天电影| 久久婷婷啪啪视频| 久久精品4| 丁香五月天激情四射网| 六月激情网| 日本色色影院| www.99热这里精品| 成人在线网站| 97资源欧美日韩大香蕉超碰一区| 色欲影香| 婷婷久久久| 丁香五月欧美成人| 婷婷综合干| 深爱激情网噜噜色| 99久久婷婷国产综合精品电影| 久久狠色噜噜狠狠狠狠97| 久久五月天婷婷| 大香蕉九九| 狠狠干婷婷| 五月天综合激情网| av狠狠操| 色婷婷丁香五月高清在线| 五月丁香香蕉| 亚洲综合新99视频| 97caop| 俺去也在线官网| 亚洲V国产V欧美V久久久久久| 美臀自射自家人妻| 丁香伍月婷电影全集| 综合六月激情婷婷| 婷婷之玖玖| 欧美爆乳一区二区三区| 欧美日本高清视频99| 四月婷婷五月丁香| 伊人久久艹| 久久丁香五月天| 欧美亚洲999| 99ER热精品视频| 国产性色蜜乳| 日韩操女| 99视频| 亚洲精品久久久久久久久久吃药| 五月天丁香花婷婷| 婷婷五月天黄色| 婷婷放心五日爱| 欧美成人猛片AAAAAAA| 九九这里精品| 久久激情天堂| 五月丁香| 狠狠久久婷五月综合色| 五月婷婷色| 久久九九蜜| 日亚二欧美| 五月天婷婷色色| 嫩草综合网| 五月天婷婷Av| 五月婷婷性爱| se婷97| 99热天堂| 亚洲五月丁香综合网| 色爆五月| 伊人激情综合网| 韩国情人在线电视剧免费观看高清版全集| 丁香六月婷婷操逼网| 丁香婷婷五月六月天| 超爽内射| 色五月激情综合网| 日本五月天婷婷丁香| 日韩操人| 九九色婷婷五月天| 热九九精品| 久热中文字幕在线线观看| 日韩欧美一道四区中文字幕| 疯狂做受XXXX高潮A片| 色色色色热| 天天做综合| 五月婷综合激情| 色五月婷婷老师| 婷婷五月天综合色| 日本va欧美va精品发布视频| 婷婷丁香五月91| 色偷偷AV亚洲男人的天堂| xx人人xx| 亚洲AAAA网| 色婷婷影视| 色婷婷五月天无码视频| 国产亚洲精品AAAAAAA片| 99性色| 99自拍视频在线观看| 青青色com久久| 五月丁香婷婷啪啪| 在线另类视频| 日本狠狠网| 欧洲激情网站| 国产免费AV网站| 五月丁久久| 色色五月天激情| 99热精地址| 婷婷丁香第一页| 人伦30P| 色婷婷AV在线观看| 丰满少妇乱A片无码| 国产激情视频在线观看| 永久免费一区二区三区| 丁香五月婷婷激情中文| 丁香花五月天| 久久99这里| 99re免费精品视频| 国产日韩av片| 久re热视频| 日本成人内射| 婷婷在线日韩综合| 亚洲精品a成人在线播放| 狠狠狠狠狠| 日韩 中文 欧美| 五月天综合激情网| 五月激情网综合| 91视屏在线观看com.wwwvv| 亚洲婷婷五月天在线激情综合网| 99色综合网| 人人操人人爰人人一天天碰夜夜拍夜夜爽-中国A级毛片天天看天天谢… | 久久这里在精品视频| 超碰免费99| 超碰人人操| 97性高潮久久久| 九九色婷| 日本丰满久久| 亚洲最大视频网站| 97精品综合久久内射| 激情婷婷五月在线合集| 久久日本wwww色| 国产一级黄色影片,| 最近免费中文字幕大全高清大全1| 五月丁香综合| 播播网色播播| 国产精产国品一二三在观看| 丰满老熟妇BBBBB搡BBB| 91九色首页| 成人电影一区| 欧美日本免费一道免费视频| 亚洲中字AV电影在线网站| 国产,欧美,学生妹,视频| 国产av天天插天天操天天爽| 99精品综合在线| 丁香九色不卡aaa | 天天插天天| 久色五月| 人人摸人人| 66色在线日韩| 久久综合激情| 婷婷视频网| 夜夜爱网站| 婷婷色在线| 98国产精品综合一区二区三区| 亚洲欧洲中文日韩久久AV乱码| 久久久亚洲精品一区二区三区浴池| 久久A极片| 丁香婷婷久久五月天| 亚洲成人在线观看网址| 欧美天堂久久| 久久激情综合| 色婷五月天综合网| 日韩人妻无码精品| 激情五月天网站| 不卡的AV网站| 中文字幕av亚洲| 996热| 99er这里只有精品视频| 深爱五月天 开心网| Www,五月天| 五月丁香亭亭操逼| 欧美激情综合| 91色欲综合| 操B五月天| 亚洲AV激情五月综合网| 黄色笑话深爱激情网丁香五月婷婷啪啪啪啪啪 | 色玖玖| 久久综合伊人综合在线| 亚洲精品永久久久久久| 99综合网| 五月天堂色色| 亚洲精品网站色视频| 五月天婷婷色在线视频免费观看 | 中文字幕婷婷| 婷婷五月天欧美图片在线播放电驴| 久久亚洲无码| 少妇大叫太大太粗太爽了A片| 香蕉色色网| 秋霞网在线免费基地五月婷婷丁香| 97香蕉久久超级碰碰高清版 | 婷婷色情网| 久久精品一区二区三区四区| 婷婷丁香五月91| 亚洲人人96@| 丁香五月成人社区| 夜精品无码A片一区二区蜜桃| 五月婷婷97| 99色色网站| 色婷婷激情| 色色色无码| 五月婷婷精品| 《》【无码】想被搞到爽AV应募而来的超M素人 西纯子 10musume-011723-01 | 久久九九九九| 丁香五月AV综合激情| 亚洲啪啪啪啪| 婷婷五月丁香性爱| 婷婷五月天激情综合| 狠狠色激情综合| 99久久婷| 久久一伦| 99热这里只有精品69| 日本美女上人| 婷婷综合九月| 日本成人小说婷婷六月| 天天干,天天日| 国内久久亭亭| 五月婷婷福利| 国产精品18久久久| 日韩婷婷| 五月开心激情| www.第四色99| 就爱操www com| 中文无码婷婷| 啪啪操操| 思思热AV| 婷婷激情久久| 激情图片婷婷| 97色干| 婷婷综合色图| 激情六月天| 欧洲综合一区| 这里只有免费的精品| 99色视频| 老司机午夜福利视频金瓶梅| 丁香婷婷色五月| 九艹在线| 婷婷欧美激情综合| 五月丁香婷婷啪啪综合| 日韩AV大全| 清纯唯美 激情四射| 五月伊人综合| 五月婷婷五月天| 成人啪啪色婷婷久| 色色婷婷丁香五月天| 五月丁香六月婷婷激情四射| 午夜丁香五月天综合| 天天草女人| 五月丁香在线国产 | 激情综合网五月天天| 五月天社区| 99热99ai| 九九黄色网| 91色综合网| 97人妻碰碰碰久久香蕉| 国产脫衣舞一区二区三区| 天天草天天爽| 丁香五月婷婷总啪啪| 玖久精品视频9| 不卡在线超碰| 久久性爱视频这里只有精品| 婷婷中文字幕在线| 婷婷五月综激情| 91丨九色丨白浆秘| 97在线精品| 欧美一级色| 色色色热热热| 天天色伊人| AAA级久久久精品| www一区二区三区| 日韩精品一曲二曲三曲四曲五曲| 桔色成人在线| 伊人喵咪a V| 五月天啪啪| 五月婷婷六月丁香首页| 亚洲中文字幕AV| 亚洲性爱干干| 丁香激情综合| 婷婷淫淫狠狠六月| 日本一级特黄大片AAAAA级| 99操碰| 成年AAAA色情| www.ywav| 思思热高清在线观看| 99在线资源| 亚洲天堂久久| 五月婷婷少妇之| 亚洲成人在线电影网站| 26uuu欧美| 九九成人精品免费视频| 色色色网站| www.伊人天堂偷偷婷婷| 婷婷国产五月天17c| www.五月天色色.com| 这里只有精品99视频| 视频一区二区在线| 爽极品色| 五月婷婷中字在线| 婷婷94s| 五月婷婷六月天| 久久综合热17c| 五月天婷婷激情四射综合| 丁香婷婷色| 色综合婷婷| 亚洲mm免费| 日韩AV片| 六月天六月婷| 亚洲天99| 超碰无码老师| 激情五月丁香五月| 韩日在线熟女| 亚洲一级AV在线免费播放| 婷婷狠狠操| 久热A| 色99视频| 日韩激情网站| 超碰99在线| 五月丁香六月情| 思思99精品视频在线观看| 人人超碰99| 色九月婷婷| 婷婷丁香18| 这里只有精品99视频| 六月丁香婷婷综合影院| www色色色com| 亚洲熟女色| 激情5月天天天| 丁香五月天网站| 九色视频九色九色91jiuseshipin| 9热精品| 五月天婷婷成人资源站| 五月婷婷啪啪| 97色色婷婷五月天| 97婷婷五月丁香| 九九成人| 天堂在线9| 五月婷婷色吧!| www.婷婷五月天,com| 日本色色影院| 日本三级成人秘书精品片| 九九九热精品| 思思热久久爱| 天堂婷婷五月色| 色婷丁香| 偷偷操99| WWW久| 在线看AV| 国产99久久久国产精品免费看| 96精品久久久久久久久| 天天草比天天爽| 五月丁激情| 色热久资源| av在线中文| 日本人妻久久| 97人人操com| 婷婷丁香激情五月天色色色| 五月天色图| 99精品热视频| 五月丁香六月婷婷久久| 色色色色色色色色色999| 五月天色婷好好| 欧美情月伍月天| 五月综合激情| 亚洲啪啪网| 激情婷婷网| 99在线看视频| 精品成人在线| 久草热久草在线视频| 天天激情5月天亚洲| 婷婷中文字幕网| 不卡的AV网站| 国产午夜精品一区二区三区四区| www.99在线| 99亚州综合精品成人网| 噜噜狠狠色综合久| 久色| 亚洲第一第二网站| 色五月第四色| 婷婷.com| 色爱亚洲| 五月丁香成人小说| 激情综合网址| 欧美激情综合| 久久激情五月| 久久99久久99久久99人受| 超碰人人在线| 亚洲乱码日产精品BD| 激情人妻蜜夜系列区| www免费在线视频| 91丁香色| 国产精品久久久爽爽爽麻豆色哟哟| 色九月| 夜夜撸日日操| 蜜桃成语时李时珍 免费| 伊人久久丁香五月91| 四色五月婷婷| 1024欧美日韩精品久久久| 久久婷中文字幕| 五月天婷婷綜合院| 日韩ac不卡无码| 日本美女天天日天天爽| 色综合五月婷婷狠狠干| 97成人丁香| 日韩xx在线| 26.uuu丁香五月婷婷| 爽极品色| 中文字幕黄色片| 五月丁香综合啪啪啪啪啪| 丁香六月AV| 青青草原福利在线| 另类激情五月在线视频欧美| www色五月| 天天肏夜夜肏| 婷婷的五月天另类视频| www.刺激色网站www.| 色综合色五月| 日日婷婷不卡| 99精品福利视频| 久久久久久9| 婷婷久久网| 黄色录像网点| av线电影| 五月婷婷色播视频| 26uuuuuuuu国产| 国产精品视频免费看| 日日操日日撸| 97久久综合网| 五月丁香啪综合| 操笔无码| 丁香婷婷五月| www.夜夜操| 琪琪色网址| 热99国产精品| 五月婷婷狠狠干| 日本三级中国三级99| 最近中文字幕在线中文视频| WWW.久久99| 日欧一片内射VA在线影院| 国产亚洲成AV人片在线| 一级片sese片.COM| 五月婷六月丁香| 婷婷五月色色| 国产精品18久久久| 日本久久人| 五月激情精品视频| 久狠狠狠| 黄色片久久| 99玖玖在线视频| www.狠狠操.com| 美欧成人视频| 99精品偷自拍| 日韩av在线电影| 五月深爱网| 色婷婷基地| 日本一級黃色一級片| 欧美 日韩 成人 在线| 五月丁香久人妻中文| 五月综合婷婷网| 啪啪 综合网| 婷婷5月久久综合网站| 51XX午夜影福利| 这里只有精品免费观看网占| 色五月激情网| 激情视频91| 欧美综合五月丁香六月婷| 91热久久| 超级97碰碰| 婷五月丁香| 日本久久婷| 婷婷激情五月天小说| 内射丰满人妻| 九九久久99| 激情婷婷久久| 久色资源网| 风流少妇A片一区二区蜜桃| 99热在线观看精品| 丁香五月成人社区| 天天肏在线视频| 97香蕉碰碰人妻国产欧美| 日韩精品无码99| 九九成人| 日本久久网| WWW,五月| 欧州婷婷五月天综合| 99热欧美在线观看| 三级黄网站| 婷婷99热| 99免费视频| 91性交在线播放| 99在线爽| 色五月婷婷小说亚洲中文字幕组| 日本玖玖在线| 天天AV导航网| 99精品在线观看视频| 九九大香视频| 99热这里只有精品9| 99热日本精品| 色丁香五月婷婷在线| 少妇伦子伦精品无吗| 色五月婷婷五月丁香五月激情五月视频| 日本久久精品18| 亚洲电影中文字幕| 欧美婷婷色五月| 六月婷婷毛片| 亚洲狠狠操| 欧美日本韩国亚洲| 高清激情av在线观看| 五月丁香网站| 婷婷欧美激情综合| 激情丁香五月婷婷| 性爱AV天堂| 色99视频| 停停色综合伊人| 亚洲乱码精品久久久久.. | 99热这里只有精品9| 五月婷婷色影院| 丁香五月天啪啪| 夜夜爱伊人| 婷婷狠狠操| 天天射影视综合网| 日本成人噜噜| www.天天干| 五月天婷婷色情| 欧美性丁香色色五月天干干| 国产44页| WWW,五月| 五月花激情网| 丁香六月婷| 黄色激情久久| www.久热| 色婷婷五月丁香在线观看| 九九色热| 亚洲五月综合色播| 国产一级黄色影片,| 五月丁香淫淫婷婷婷| 天堂网色婷婷| 天天射天天射一道本日本社区 | 九九久久99精品免费观看www| BT综合在线视频观看| 97人人干人人操| 激情婷婷综合| 99国产99| 97人人搞| 欧美大奶熟女噜噜噜噜| 日韩AV免费电影在线播放| 婷婷丁香五月综合激情小说| 婷婷中文网站| 五月丁香欧美综合| 日韩精品超碰在线观看| 99久久久99久久91熟女| 怡红院院在线导航网| 激情五月黄色| 丁香五月婷婷成人网| 99噜噜噜| 色五月激情五月开心五月| 一级A片天天操夜夜操| 丁香色影院| 亚洲色色色| 开心激情站婷婷五月天| 欧美WW在线网| 婷婷五月激情图片| 亚洲精| 狠狠色五月| 五月丁香六月婷| 开心五月深爱五月婷| 日韩无码91| 色99视频| 丁香五月天在线| 色五月天激情| 超碰在线国产| 九热视频| 亚洲熟女色| 亚洲无码影音| 亚洲免费99| 六月婷婷七月丁香| 好色婷婷| 免费无码毛片一区二区A片| 91热视频色网站| 开心五月丁香综合久久| 99碰网站| 99热这里只有精品5| 少妇人妻综合色6699| 天天干,天天舔| 九九99偷拍视频| 色婷网| 热久精品| 丁香五月综合在线播放 | 五月婷婷中文字幕| 五月天婷婷在看| 狠狠爱婷婷丁香| 偷拍丁香九月激情| 亲子乱AV一区二区三区下载| 色插综合网| av在线激情| 99九九精品视频推荐| 日本三级黄色大片| 国语精品探花| 六月丁香深深爱| 任你干嘛免费视频播放| 精品国产一区二区三区四区阿崩| 久久久久网站| 丁香五月冃欧美| 婷色五月| 免费AV在线网址| 久99久精品| 六月婷婷久久| 丁香伊人综合| 久久久18| 丁香久久久| 亚洲天堂婷婷| 五月天激情网图片| 欧美日韩成人高清在线| 五月婷婷六月奇米网丁香| 天天情天天狠天天透| 99日本视频| 日本www免费九九| 婷婷综合激情| 久久久久9| 操日视频| 丁香婷婷深情五月亚洲| 丁香五月激情鲁| 99re这里只有精品免费| 成人五月天丁香| 亚洲成人中文字幕| 九九精品9| 日韩无码AV电影网站| 五月丁香婷婷综合| 色激情五月天| 九九综合九九| 欧洲毛片基地c区| 丁香六月婷婷综合| 九九在线免费观看| 激情小说五月天中文字幕| 538午夜激情| 开心婷婷中文字慕| 色综合久久44| 色色丁香婷婷| 99re热99| 视频一二区| 影音先锋天天日| 一区二区三区四区牛| 26uuu色五月| 五月婷婷色| 可以免费观看的av| 直接看的av| 丁香五月影院| 97人人超| 大香蕉久久婷婷精品综合| 中文av网| 成人五月天丁香婷| 五月婷六月| 九九亚洲视频| 日韩在线99| 99性感视频| 美英法精品无码免费视频| 99热只有这里才是精品| 婷婷激情五月色综合| 香蕉AV777XXX色综合一区| 婷婷丁香十月| 婷婷五月婷婷| 狠狠干综合网| 婷婷激情综合| 99人妻碰碰碰久久久久视| 色五月婷婷网| 色色五月婷婷| 99热综合| 婷婷色色亚洲| 六月丁香婷婷爱| 99热伊人综合| 亚洲色婷婷久久99精品91| 婷婷性爱五月天丁香网| www,超碰| 欧美在线操| 五月激情丁香五月| 梁铮版蜘蛛女在线观看| 日日干日日s| 国精产品一区二区三区| 另类综合色| 91男同| 专区无日本视频高清8| 色婷五月| 色婷婷小视频| 日本乱论99| 欧美色色色| 五月激情综合婷婷| www.99热这里只有精品| 97超碰在线免费观看| 五月天综合久久| 香蕉久久国产AV一区二区| 久久一级免费黄色片| 色五月天丁香婷婷| 丁香六月婷婷综合激情欧美| 337p午夜影院| 亚洲 日韩色色| 日日爽天天| 99re视频精品| 五月婷婷激情| 九九99精品| 中文中文在线| 丁香五月婷婷久久久| 色~性~乱~伦~噜| 精品婷婷五月天| 亚洲天堂色色| 久久久精品色| 秋霞少妇AV网站| 婷婷久久影院| 免费精品66| 九九这里都是精品| 夜夜操狠狠操| 最新高清无码专区| 一本色道久久88加勒比—| 99这里有精品久久97| 五月深爱激情网| 久久久WWW| 激情6月| 天天色丁香| 久久五月婷天天干| 深爱五月激情| 丁香五月激情网| 操碰99在线视频观看| www色色com| 久久这里有精品视频在线免费观看| 五月色网| 久热A片| 五月天婷五月天综合网小说首页-五月天激激婷婷大综合,婷婷亚洲综合五月天小说 | 我去色色网五雨天| 99熟女| 日韩一级| 久久亚洲婷婷综合色五月| 婷婷五月丁香基地| 大地9中文在线观看免费高清| 久久婷婷草| 婷婷 激情 五月| 天堂久久婷婷| 日本综合99| 五月丁香婷婷婷激情爱爱| 天天开心AV色综合婷婷五月天| 少妇高潮一区二区三区99欧美| 久9热视频在线| 九九综合久久丁香婷婷,开心激情综合网| 久久这里有精品在线观看| 日日日日日| 久久五月天网| 久香草视频在线观看| 久久婷五月| 午夜丁香六月婷| 色婷婷五月婷婷五月婷婷五月| 俺去也五月天| 99人妻碰碰碰久久久久| 五月丁香亚洲综合网| 91操人| 综合色影| 99爱在线观看视频| 色色色色丁香| site:901-07.com| 97操碰碰无码视频| 色婷丁香91| 琪琪秋霞| 成人精品在线| www.99热这里精品| 噜噜色com| 日本三级成人秘书精品片| 久久国产性爱A V| 夜夜谢天天干| 色五月丁香A欧美com | 这里只有精品网| 五月丁香六月片| 激情五月天啪啪视频| 老司机伊人| 99黄色在线视频精品熟女| 狠狠色综合精品视频在线| 成人做爰A片免费看视频| 色综合婷婷| 久操福利| 日韩限制级大尺度黑料泄密大尺度视频一区二区在线观看 | a在线免费v| 粉嫩AV久久一区二区三区| 婷婷久热| 在线成人网站| 色亚洲欧洲| 久久91久久精品久久| α久久| 天天操夜夜操| 五月丁香婷婷啪啪| 97热精品| 日本97在线视频| 五月天婷婷影院| 一本色道久久88加勒比—| 激情综合激情五月| 人妻少妇色综合| 电影爱拉战争免费观看| 99热这里只有精品4| 97操在线视频| 91色婷婷综合久久中文字幕二区| 日本操碰碰| AV在线免费网站| 91精品婷婷国产综合久久| 丁香五月婷婷亚洲综合精品| 日韩AV在线免费观看| 色永久| 99日在线观看视频| 亚洲五月停停| 97碰在线免费观看| 五月婷婷色影院| 国产综合视频婷婷| 久久综合爱| 丁香五月性| 日本久久天堂| www色色色com| 99色综合| 开心五月丁香婷婷| 婷婷五月综合基地| 天天噜| 99操久久| 婷婷六月啪啪| 久婷| 免费看欧美成人A片无码| 欧美黑人巨大猛烈cuckold| 91 影音先锋| 婷婷五月丁香综合激情| 亚洲免费成人电影AV| 26uuu精品国产| av激情在线| 五月丁香在线观看| 这里只有精品日韩精品| 91男人操女人视频| 天天爽天天摸天天爱| 天堂综合久久| 99视频自拍| 久热这里只有精品66| 五月丁香九九| 日本三级大片| 综合激情网| 五月丁香趴趴| 丁香五月香蕉| 五月婷婷成人w| 成人在线高清| 久久这里只有精品99| 色婷婷五月天中文字幕| 亚洲国产精品VA在线看黑人| 综合五月网| 99超碰人人| www.狠狠| 日本va欧美va欧美精品88| 五月天婷婷网站888| 乱岳熟女50岁| 五月婷婷之激情五月| 亚洲中文AV| www.激情| ss99热| 色婷婷五月在线| 色婷婷激情| 久久五月天综合| 高清无码 一区 二区 三区| 青柠影视免费高清电视剧| 无码色色色|