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
返回資訊列表
久久人妻情侣| 99热这里只有精品青草| 啪啪操超碰| 五月色婷婷中文字幕| 亚洲天堂制| 婷婷成人五月天| 色婷婷五月天av在线| 99视频内射三四| 亚洲欧州色情在线观看| 一区二区中文字幕| 秋霞日本免费毛片A片| 99热激情| 激情色色| A在线观看| 美女天天久久| 91成人品| 97干视频| 超碰在线国产9| 99热99艹在线观看| 成人精品视频99在线观看免费| 这里只有精品视频| 色婷婷小说网| 午夜丁香五月天综合| 久久9久| 婷婷97色| 久久caop| 亚洲日韩操B| 无码区婷婷五月花开| 3p日韩网站视频| 在线观看中文字幕亚洲| 97色色综合| 五月天激情色色| 天天艹夜夜艹| 色99视频| 九九色热| 99热在线观看| 江苏少妇性BBB搡BBB爽爽爽 | 五月亭亭六月天| 五月天婷婷六月激情网| 色五月开心婷婷| 色色九九五月天 | 五月丁香六月激情欧美综合| 五月天 另类图片| 99热这里只有精品98| 91九色熟女| 色约约视频一区二区三区四区五区| 亚洲综合另类| 久久久久久久人妻| 年轻的妺妺伦理HD中文| 五月天激情美女久久| 天天爱天天爽| 五月日韩中文字幕| 久久99网| 91久久电影| 日本色五月| 99精品爱| 精品三区影院| 26UUU精品一区二区| 亚洲色情网站| www99在线观看视频| 久久久噜噜噜操操操| 九九无码AV| 成人在线观看精品| 5Www色5夜| 色色欧美色色色| 国产亚洲色婷婷久久99精品91| 日本不卡中文字幕| 国产亚洲99久久精品| 五月婷六月| 99综合| 丁香五月欧美成人| 亚洲乱码日产精品BD| 风流少妇A片一区二区蜜桃| 丁香五月天激情综合| 丁香六月婷| 亚洲综合五月天| 色玖玖| 久久精品一区二区三区四区| 五月天丁香啪啪啪啪| 婷婷五月天综合久久日美女| 久久婷婷综合基地| 有码人妻久久| 天天操婷婷| 五月丁香成人| 欧美色激情四射| 草草色情综合网| 人五月天婷婷喷水| 色噜噜综合网| 日日操天天| 五月婷婷,六月婷婷| 超碰97在线观看免费| 90色免费视频| 99啪啪| 久热这里只精品| 色9色| 逼里香不卡| 婷婷成人视频| 国产全是老熟女太爽了| 色情五月天。| 色综合网综合| 色爱综合网| 97caop| 2021日韩无码| 色高清无码视频| 99久在线精品99re8| 久久婷婷五月天| 五月丁香激情综合| 五月丁香激情四射| 激情5月婷婷| 中文字幕av在线| 精品夜夜澡人妻无码AV| 中文字幕 码精品视频网站| 五月丁花色综合网| 中国女人做爰A片| 狠狠综合色网| 激情小说之五月| 人人操插| 成人短视频在线免费观看| 丁香五月欧美成人| 最新日韩久热免费视频看看| 激情五月丁香在线观看直播| 天天爽夜夜操| 婷婷五月激情欧美| 婷婷 色 丁香 夜| 天天插天天干| 91婷婷丁香五月天免费视频网站| 婷婷黄色| 91婷婷搞| 色玖玖综合网| 曰曰久久| 91综合色| 国产综合婷婷| 91丨九色丨老农村| 色噜噜五月天| 四季AV综合网| 日本激情五月| 国产精品久久欧美久久一区| 婷婷激情伍月网| 爱的综合网| 五月婷婷婷| 亚洲日日日| 影音先锋高清无码资源网| 亚洲AV综合网| 五月丁香啪啪啪综合网| 99久在线视频| 97在线精品| 中文字幕在线不卡视频| 天天色天天爱天天爽| 久久婷婷色综合老司机| 天天干天天色综合| 大香蕉娱乐| 月婷婷亚洲| 99免费在线视频| 久久婷婷啪啪视频| 99久视频| 亭亭色天香| www.99色| 五月丁香六月婷婷视频| 激情五月天婷婷色色色色色色色色色色色| 五月婷婷丁香五月| 久久人人九九| 色婷婷成人做爰A片免费看网站| 丁香色婷婷| 91免费看片| 射区导航| 亚洲综合激情五月久久| 五月婷婷六月激情网| 69精品人人人人| 五月婷庭丁香在线| 26uuu成人网| 米奇影视资源婷婷狠狠色激情欧美五月丁香 | 99色网站| 婷婷在线视频| 天天操天天日天天爽| 麻豆AV一区二区三区| 天天舔天天摸天天射| 天堂成人A片永久免费网站| 五月天激情综合在线| 99热日韩| 99热日| 婷婷丁香五月天之开心少妇| 五月婷婷六月激情| 新99思思视频| 婷婷五月超碰| 亚洲中文字幕av| 久这里只有精品| 亚洲精品国产A久久久久久| 亚洲综合色丁香五月天| 99.N在线视频| 亚洲精品V天堂中文字幕| 久久中文人妻系列| 丁香伊人五月色婷婷五十路| 激情六月综合| 996日日爱| 97婷婷狠狠久久综合9色| 亚洲免费观看高清完整版AV线| 五月婷中文字幕| 五月天开心网| 少妇达人正片在线播放_ikun_福利吧| 亚洲网站在线鸭子av| 亚洲精品99| WWW.99热| 99,色| 182无码| 丁香婷婷九月| 思思久日精品视频| www.五月天婷婷.com| 性爱激情综合网| 中文久久婷婷| 日韩操逼小电影| 日本美女上人| 大香婷婷| 五月丁香色欲| 亭亭五月色男人| 色色色色色色色色色999| 久婷视频| 日本www免费九九| 五月丁香综合影院| 亚洲综合丁香五月天| 国产欧美日韩性爱| 日本天堂爱爱| 五月丁香五月综合欧美| 五月婷婷成人w| 久久视频婷婷| 碰人人97| 韩国中文字幕91| 亚洲综合色婷婷| 国产精品久久7777777精品无码| 九九综合九九| www.97碰碰com| 色无婷婷| 亚洲乱码日产精品BD| 久久玖玖综合| 五月婷av| 日婷婷久久开心| 99在线观看精彩视频| 五月丁香人妻| 懂色av蜜臀av粉嫩av永陈冠希| 欧美顶级少妇做爰HD| 久久六月天| 99re8这里只有精品99re8热视频| 亚洲噜色| 天天干天天操天天上| 九九RE视频在线精品| 影音先锋AV男人站| 久久天堂女人| 五月花激情网| 日韩情色在线观看| 九九性爱网| 久久久久久久久久久久久久久久一道本| 色玖玖| 色五月天丁香婷婷| 久久婷婷影院| 国产毛片精品一区二区色欲黄A片 欧美交换配乱吟粗大25P | 亚洲操操| 无码激情AAAAA片-区区| 成熟妇人A片免费看网站| 激情小说五月天| 色色丁香婷婷| 欧美性丁香色色五月天干干| 婷婷丁香六月| 欧美人与性动交CCOO| 亭亭五月色男人| 特黄三级片| 日韩超碰在线| 婷婷久草| 亚洲精品无码一区二区| 99热个人在线| 午夜福利8055| 伊人久久99| 婷婷色在线观看| 色五月网址| 欧亚洲在线高清视频| 久久女婷| 久久草婷婷丁香网站| 奸逼视频| 2015WWW永久免费观看播放| 丁香五月亚洲综合丝袜| 91超级碰人人操| 99热精品10| 久Se视频在线观看| 99久久久国产大片| 日韩欧美骚货| 国产婷婷五月天| 免费黄色片子| 日韩在线观看网址| 91无码高清| Av九九| www.婷婷| 丁香五月婷综合网| 天天骑天天操| 91久久国产自产拍夜夜91久久精品文字>91麻豆精品国产 | 亚洲综合色色| 99热这里只有精品23| 黄色笑话深爱激情网丁香五月婷婷啪啪啪啪啪 | 少妇大叫太大太粗太爽了A片| 国产婷婷色综合AV蜜臀AV| 青青草婷婷五月天| a在线观看| 色婷婷综合中心| 天天五月情| 91视频五月丁香| 五月天大香蕉| 91美女啪啪| 国产熟女大叫受不了| 中文字幕黄色片| 风流少妇A片一区二区蜜桃 | 婷婷香五月天| 91干99| 99色天堂| 婷婷丁香18| 天天天天天日| www.com色播五月天| 色五月婷婷中文字幕在线观看| 亚洲五月婷天天操| 91久久婷婷| 久99久视频精品| 五月丁香六月成人| 99热无码| 麻豆WWWCOM内射软件| 久热伊人在91| 色人妻五月| 99热1| 丁香花社区av| 婷婷五六月丁香| av色色国产| 大香蕉婷婷| 一区二区三区XXXXXX| 色波激情五月天| 色五月丁香婷婷在线观看| 丁香六月综合激情| 成人网址在线观看| 99狠狠| 97色 五月天丁香| 欧美三级欧美一级| 狠狠色丁香| 狠狠色噜噜狠| 无码毛片992367| 久久久久激情| 男女免费视频999| 丁香五月影院| 色综合久久久久| 天天爽天天摸天天爱| 99re6在线视频精品免费| www久久艹| 亚洲成人黄色网| 色婷婷影院| 婷婷五月香蕉| 婷婷九月亚洲| 久久婷婷色情7777网站| 亚洲啪啪网| 久久蜜臀婷婷| 天天干狠狠| 丁香五月天堂婷婷| 天天日日爽| 亚洲最大成人综合网720P| 天天肏视频| 天堂在线9| 亚洲人妻电影| www.91操| 激情深爱五月婷婷| 国产人妻777人伦精品HD| 日韩色色色色色| 五月天婷婷操逼视频| 亚州激情九月| pom538精品视频| 色欧美日| 99天堂网| 99视频这里只有免费精品| 日韩成人综合网| www.91婷婷| 久99视频在线观看| 99精品热| 色视五月天婷婷| 亚洲中文字幕在线观看| 蜜桃婷婷丁香| 久久99久久久久久久噜噜| 天天插天天操| 99re热99| 婷婷五月天激情小说| 丁香六月婷婷综合色| 婷婷五月天激情网| 婷婷九月丁香久久| 久热久操久热久草国产91| 深爱综合网| 九九视屏| 激情九月婷婷| 久久这里只有精品22| 色色六月| 97资源碰碰| AV伊人青草丁香六月| 538在线精品| 亚州性爱99| 丁香五月婷婷激情蜜桃| 无码人妻激情| WwW天天干| 国产毛片精品一区二区色欲黄A片| 婷婷天堂站| 亚洲无码播放| 色婷婷手机在线| 9色在线| 99色区| 97久久超碰| 99精品7| 人人草人人爱手机视频看看| 亚洲色频| 激情影院丁香五月| 成人在线精品| 日韩AC在线免费观看| 天天操天天操天天操天天操天天操天天操天天操天天操天天操 | 五月天综合久久| 久久这有这里精品| 久久综合九九| 狠狠久久婷五月综合色| 婷婷色中文| 96丁香六月婷婷蜜桃综合久久| 午夜精品777| 影音先锋 一区| 婷婷五月天AV| 丁香婷婷色五月激情综合| 国产中文亚洲欧美日韩性交| 国产色香蕉精品五夜婷| 99热在线观看| 性欧美日本| 色五月婷婷视频| 日本97在线视频| 少妇2做爰HD韩国电影| www.操.com| 丁香五月婷婷88在线| 9久久精品视频| www.狠狠操| 九九青草热| 丁香五月六月欧美| 五月天婷婷一起草| 另类综合激情| 婷婷午夜综合| 天天爽天天爽视频| 婷婷涩涩网| 九九色综合网| 婷婷爱五月| 六月婷综合| 五月婷婷婷| 天天操天天操天天操天天操天天操 | 国产性爱亚洲是图| www.五月天婷婷| 亚洲噜色| 五月开心婷婷| 激情精品久久| 五月天日日操夜夜操 | 色五月综合婷婷久久综合婷婷久久综合婷婷久久综合婷婷久久 | 久久99精品久久久久久三级| 久久婷婷综合五月趴| 久色成人| 噜噜噜噜噜日本视频| 激情五月丁香社区| 色婷婷a v| 丁香五月手机视频| 任我肏视频精品| 亚洲色无码A片一区二区麻豆| 五月激情婷婷丁香| 俺去也五月天婷婷| 色五月婷婷激情| 狠狠色噜噜色狠狠狠综合久久成人波 | 欧美成人五月天| 丁香五月亚洲综合| 五月丁香人人婷婷在线观看| 99热12| 五月中旬婷婷丁香六| 日日夜夜青青草| 婷婷激情鹿城五月天| 人人澡天天色天天做| 婷五月丁香俺| 婷婷五月丁香高清无码| 伊人五月久久| www夜夜操wwwcon| 99亚洲大片精品永久在线观看 | 激情五月婷婷网| 欧美婷婷五月丁香| 99操| 艳妇野外情欲放荡HD| 超碰v| 野战J办公桌椅H| 国产亚洲精品久久久久久豆腐| 九九在线视频| se色婷婷视频| www一起操在线观看| 91在线日本| …亚洲黄色在线播放日韩、av中文a…| 五月婷婷黄色毛片| 久久98| 96人人操人人操人人| 天天爽天天日人人爱 | 日本黄色一级| 婷婷综合日本| 91婷婷丁香五月天免费视频网站| 五月天婷婷丁香花| 日本情色一区二区| 五月丁香成人| 夜夜天天久久婷婷| 久久这里只有精品8| 九九热最新| 天天久久狠狠色综合| 亚洲综合99| BBWCUCKOLD精品熟妇| 嫩草免费视频| 婷婷无码视频| 婷婷五月天视频在线观看| 婷婷视频在线| 五月天综合网| 9视频在线成人网站| 五月精品99综合| 夜夜躁婷婷AV| 5月婷婷激情6月| 五月婷婷香| 狠狠干综合| 综合久久丁丁香婷| 久热综合| 日本操逼九九九九58日本操逼| www.婷婷,com| 人妻熟人中文字幕一区二区| 久久与婷婷| 天天插轮理| 久艹大香蕉| 日日做A爰片久久毛片A片英语| avv在线| 丁香五月亚洲激情婷婷射| 开心五月婷| www99精品| 万月丁香狠狠爱| 婷婷丁香九月| 国产综合网在线| 六月激情综合| 天堂中文国产| 五月亭亭直播| 亚洲无码影音| yazhou seshipin| 久久婷婷六月综合综合| 久久久久久99日本| 第四色色六月色综合| 99精品热| 五月婷婷六月基地| 激情丁香五月天| 亚洲四色五月| 婷婷综合色五月天| 99无码视频| 久久多色| 噜噜噜久久| 色五月天婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷 | 99,色| 五月天激情久久| 免费无码毛片一区二区A片| 成人av在线网址| 色色五月婷婷丁香| 色五月婷婷777| 婷婷丁香色五月亚洲| 日本成人噜噜噜| 丁香五月婷婷激情四射深爱激情| 亚洲婷婷月丁香五月| 玖玖综合色| 色射7856五月天激情四射| 婷婷六月婷婷| 日日夜夜干| www.久久| 色无码| 激情五月综合网最新| 丁香六月婷婷色XXXXX| 亚洲综合色成丁香五月色| 五月天丁香啪啪综合| 色婷婷网| 六月丁香花婷婷| 久9热在线视频| 六月丁香中文字幕| 91在线日| 99视频只有精品| 色婷婷大香蕉| 丝袜大香蕉| 一区二区成人电影| 国产成人网站在线观看| 色丁香五月天| 天天操比比| 色热久资源| 99色在线| w婷婷五月婷婷w| 成人网在线观看视频| 亚洲色色色色| 另类婷婷五月天啪帕帕| se影音资源在线观看| 亚洲最大视频网站| 狠狠干综合网| 婷婷综合| 五月激情站| 99色热| 五月久久婷婷| 97九色视频| 91视频精品99| 琪琪理论片| 屁股翘好撅高迎合跪趴| 天天碰夜夜爽| 久久五月网| 色五月av| 色五月视频,小说| 91性人人| 日韩无码色色| 这里只有精品在线免费视频| 婷婷九九视频| 色婷视频| 这里精品| 亚洲婷婷视频| www.色色色com| 这里只有精品视频免费在线观看| 五月大香蕉| www.97视频| 丁香婷婷影院| 丁香五月婷婷无码AV| 青草激情在线| 五月丁香久人妻中文| 六月丁丁香| 精品成人无码A片观看香草视频| 1024在线视频| 久久人妻精品| 99热在这里只有精品| 影音先锋噜一噜| 亚洲色无码A片一区二区麻豆| WWW,五月| 99视频精品视频| 97超级碰碰碰久久久| www.99热视频| 亚洲激情精品| 人妻性爱av网站| 色九九九综合| 99在线免费观看| www,天天干| 五月天开心激情网色欲无码| 婷婷丁香色性爱| 久热9| 激情五月天婷婷五月天| 五月婷无码| 成人免费在线电影| 蜜臀综合久草| 久操操| 精品爆操| 深夜A片| 久久99热这里只有| 五月天丁香成人社| 9l视频自拍九色9l黑人| www.久久| 9久久精品| 人人射人人高潮| 婷婷丁香久久五月综合| 97综合在线| 丁香婷婷五月人体| 99精品视频播放| 婷婷五月天网| 五月婷婷色色| 六月婷久久| 思思热视频| 99丁香婷婷综合网| 麻豆AV一区二区三区| 五月丁香色色| 丁香九九九九| 日韩成人电影在线播放| 激情六月丁| 俺去也在线www色官网| 丁香五月 综合| 日本久久高清| 内射综合网| 2015WWW永久免费观看播放| 青青草青青草五月天| 五月婷婷色色| 五月丁香影视| 色五月丁香五月| 五月丁香性爱| 日韩成人无码人妻| 成人在线不卡| 超碰人人艹| 综合久久影院| 超碰免费成人| 天天干 夜夜爽| 丁香婷婷网| 综合久久97| 欧美久久网| 97干在线播放| 色婷丁香| 五月天伊人| 大地资源色婷婷视频在线| 99婷婷| 天天插天天射| 国产69久久久欧美黑人A片| 亚洲乱码日产精品BD| 性无码专区无码| 大地资源色婷婷视频在线| 天天插天天插| 色亭亭影园| 五月丁香婷婷激情爱爱| 天天干天天操天天射| 激情综合色婷婷啪啪六月天| 色七七九九| 玖玖综合色| 五月丁香久人妻中文| 五月丁香久久综合| 夜夜做天天爽| AV人人操| 亚洲成人在线播放| 白人荫道BBWBBB大荫道| 五月丁香综合精品欧美| 激情久久网| 丁香五月香蕉| 欧美性丁香色色五月天综合爱爱| www.激情五月天com| 五月天天爱| 啪啪激情综合| 国产古装妇女野外A片| 日韩国产AV播放| 91色吧网| 天天日狠狠| 五月丁香激情婷婷| 91人人网| 免费观看全黄做爰的视频| 九九Y精品热播| 丝袜激情网| 99re思思在线视频| 婷婷五月丁香在线视频| 丁香五月色| 色五月婷婷777| 九九人人自拍| www.狠狠操.con| 丁婷婷五月天在线播放| 色偷偷五月天| 91久久国产综合久久| 99久久99九九九99九他书对| 天天综合色综合| 婷婷色片| se色婷婷视频| 欧美激情综合| 五月人妻婷婷视频| 天天爱天天操| 国产亚洲网站在线| 日韩成人精品一区久久久久| aa久久| 九九九激情网| 秋霞免费三级片| 97丁香五月| 色色色99| 2016日日夜夜操| 婷婷五月色网| 99热亚洲| 狠狠五月激情丁香六月| 五月激情婷婷播播网| 99热老网站| 人人操人| 国产精品-91JQ就要激情网91JQ6.91JQ27.CASA:16888 | 五月丁香亭亭成人电影| 色婷婷88| 色婷婷AV久久| 丁香五月视频在线观看| 超碰人人操在线| 色9999综合久久| 凹凸探花电影| 婷婷六月综合激情| av在线播放网址| 五月婷婷免费看| 免费无码毛片一区二区A片| 五月丁香久久网| 婷婷五月天亚洲| 五月天大香蕉av| 激情综合网五月天天| 欧美日朝成人| 91久久九久久九久久九久久九久久| 日日操人人操| 日韩少妇内射免费播放| 热的国产99热| 深爱激情五月婷婷| 另类图片色五月| 丁香六月综合激情| 天堂久久大香蕉| 99er视频在线| 五月丁香婷婷伊人| 天天干-天天日| 成人无码髙潮喷水A片| 99欧美| 九九亚洲视频| 婷婷久热| 婷婷五月丁香五月| 九九亚洲视频| 精品人妻一区| 99热免费网站| 色爱综合网| 丁香五月天激情婷婷丁香六月| 五月婷婷性爱| 99久久久| 丁香五月综合| 男人天堂亚洲综合| 久久一级AV| 色五月婷婷婷婷| 婷婷五月激情欧美大胆视频| 婷婷五月天论坛| 婷婷在线日韩综合| 开心激情网五月| 丁香深五月婷婷| 婷婷五月天激情电影小说| 婷婷综合另类| 97色天堂| 五月天日日操夜夜操| 免费黄色片子| 婷婷丁香五月六月激情| 婷婷色网址| 99热激情| www.91久久| 99色在线| 五月婷色啪| 日韩伊人大香蕉| 秋霞A V毛片| 六月五月丁香五月欧美| 日本不卡一区二区三区| 99热777| 色色五月天com| 在线99热| 五月色欧美| 久久久久五月丁香| 色三级色三级| 欧美色骚婷婷五月天| 五月桃花网综合| 综合色播| 丁香五月婷婷亚洲人| 国产精品久久久久久亚洲毛片| 丁香婷婷色五月合集| 9超碰在线| 免费视频99| SS丁香五月婷婷| 丁香五月激情网| 久热91| 深爱激清网| 婷婷综合五月| 97日韩无套内| 91狠狠综合网| 亚洲热综合网在线观看| 丁香五月123| 九九热在线视频| 丁香五月天AV| 婷婷激情丁香五月婷婷激情丁香五月婷婷| av大片在线| 激情综合网激情五月天| 激情桃色网| 超碰人人操人人9| 日本天天操| 开心激情网五月| 婷婷久久五月天| 色碰97| 99久久99久久综合| 五月丁香六月情| 这里只有精品热| 射久久丁香五月| 人妻熟人中文字幕一区二区 | 色色色色热| 51avj视频大全| 99 频99热国里只有精品| 色色色色色五月| 777精品久无码人妻蜜桃| 五月丁香婷婷深深爱| 五月丁香在线精品| 九九九九国产| 超碰99热在线观看| 内射在线CHINESE| 五月婷婷之综合激情| AAAA网站| 六月五月婷婷| 人妻系列久久久久久久久久久| 射琪琪| 婷婷酒色网| 少妇高潮呻吟A片免费看软件 | 五月婷啪| 久久婷婷视频| 人妻自慰高清合集| 激情开心五月婷婷| 九九综合色| 成人中文字幕在线| 人妻六月天| 曰韩五月丁香色婷婷无码| 日本一级特黄大片AAAAA级| 深夜婷婷五月丁香| 国产资源在线视频| 另类国产欧美视频| 丁香,开心成人,久久| 香蕉综合网| 99这里只有精品视频| 日本一级一片免费视频| 婷婷五月天综合在线 | 99九九在线观看免费| 久久久精品色| WWW,婷婷,COM| dingxiangtingtingliuyue| 婷婷五月天无码视频| 五月天激情四射| 97色欧美| 婷婷中文无码| av色婷婷| 色综合久久天天综合网| 欧美久久网| 操操自拍| 婷婷色情网| 97久久久久| 操人91| 九九人人操| 天天情天天狠天天透| 中文字幕在线免费观看视频| 啪啪 综合网| 日韩在线视频中文字幕| 五月婷婷啪啪啪| 久久99精品视频| 婷婷丁香在线| 天天做天天爱天天爽夜夜揉| 天天插天天插天天操| 婷婷成人网五月天| 婷婷基地成人五月天| 久久亚洲色导航| 亚洲无码成人性爰网| 在线综合婷婷| 这里只有精品9| www.久久| 狠狠干在线| 五月激情影院| 成人婷婷色综合| 在线日韩av| 亚洲人人操| 精品久久久999| 热99精品视频在线观看| 婷婷五月丁香基| 国产色五月| 第四色大香蕉| 五月丁香亚洲综合| 日本人妻伦在线中文字幕| 激情五月婷婷综合秋霞| 欧美日韩精品一区二区三区钱| 伊人五月综合网| 大香蕉精品视频| 噜噜噜噜噜日本视频| 99爱免费视频| 99在线视频播放| 五月丁香亭亭| 最新婷婷五月丁香| 色色狼人综合| 国产色色网站网址| 久久99性爱视频| 免费观看的av| 丁香激情网| 97在线视频观看| 色色色国产| 婷婷五月综合啪| 97碰| 亚洲激情网| 欧美操综合| 亚洲亚洲人成综合网络| 超碰在线免费观看日韩| 婷婷五月激情四射手| 思思热在线观看| 91啪啪视频| 激情六月综合| 激情丁香五月婷婷| 欧美综合激情五月天| 九九九九九九毛片| 色九综合| 五月婷婷激情网| 欧美色综合天天久久综合精品| 婷色影院| 成人av在线网| 无码少妇高潮喷水A片免费| 婷婷不卡基地| 色综合久久伊伊婷婷五月| 日比视频91| 色色国产| 亚洲性天天| 久久天堂女人| 国产精品久久..4399| 日韩人妻无码一区二区| 丁香九月色| www,久久久| 人人爱天天摸摸天天爱| 超碰成人在线免费观看| 丁香花色色网| 天天舔天天插天天干| 久久一品区| 99这里有精品| 丁香激情综合| 婷婷爱在线观看| 日逼影音先锋男人资源站| 色婷婷888| 欧美性爱特黄一级aaaassss| 大香蕉Av在线| 中文字幕日产A片在线看| 久久精品性爱| 色色色综合视频| aV欲望人妻中文字幕| 久久久婷婷婷| 激情五月天影院| 另类五月婷婷| 色五月婷婷激情基地| 五月丁香色综合| 国产午夜精品一区二区| 色丁香久综合在线久综合在线观看| 激情99热| WWW色色色COM| 超碰成人免费| 五月丁香婷婷潮喷中文字幕| 五月丁香久人妻中文| 96色婷婷| 日韩成人综合网| 丁香五月综合在线观看| 欧美激情 日韩无码 婷婷 五月天| 99干在线| 欧美性生交XXXXX无码小说| 亚洲操逼片| 逼里香不卡| 色宗合,宗合网| www.久久久久久久| 婷婷国产五月天17c| 亚洲精品99| 婷婷丁香花五月天| 这里只有精彩亚洲视频推荐| 99热思思在线观看| 日本91在线| 丁香五月综合首页| 日韩久久系列| 这里只有精品视频| 亚洲成人网站在线观看| 久久人妻精品| 十月丁香九月婷婷综合| 亚洲综合网激情五月天| 全亚洲最大的婷婷五月天网站COM| 五月天婷婷久草丁香| 久久婷综| 风流少妇A片一区二区蜜桃| 26uuu欧美日本| 14色综合婷婷| 高清无码入口| 激情丁香图片| 天天夜夜六月丁香五月婷婷老师| 99在线视频免费| 色色色色欧洲| 伊人激情啪啪| 激情綜合網址| 久久一级片| 久久蜜臀婷婷| 色天使色综合| 五月丁香色欲| 五月天综合在线网| 国产SUV精品一区二区883| 激情综合五| 五月丁香综合激情网| 综合另类视频| 久操福利| 曰曰久久| 日本久久婷| 在线另类视频| 曰曰久久| 99视频久久| 大香蕉综合| 久久久com| 五月丁香六月婷综合成人综合 | 精品五月天| 激情久久五月天| 九九综合色综合| 婷婷操超碰| 日本系列_4页_777FP| 伊人玖玖婷婷| 日韩久热| 色欲丁香| 久久久久9| 777精品久无码人妻蜜桃| 亚洲综合在线视频| 在线观看免费视频| 色天堂婷婷| 色五月天婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷 | 久操婷婷| 人妻久久久久久久 | 中文av网| 丁香五月网址| 婷婷综合| 这里只有精品视频在线| 成 人片 黄 色 大 片| 极品人妻VIDEOSSS人妻| 精品久久久91久久影视网| 人人摸人人操人人爱| 老司机视频lsj爱就色| 9在线9在线婷婷在线国产| 热久久色| 色啪影院| 亚洲一色色色色色色色色| 婷婷五月天人妻| 婷婷视频在线| 五月丁香六月婷婷激情网| 丁香六月婷婷综合激情欧美| 婷婷五月丁香六月| 最近免费中文字幕大全高清大全1| 色无婷婷| 九九九午夜视频| 久久停停超碰| 99区视频| 伊人五月丁香| 影音先锋91| www.激情五月| 色婷婷影院| 久777| 蜜臀av粉嫩av懂色av| 久久五月天激情美女| 天天日天天操天天干| 五月丁香婷婷综合视频| 成人AV免费观看| 日本欧美成人片AAAA| 六月婷欧美丁香综合| 久久98热re| 成人片久久网站| 五月天激情亚洲| 97碰在线视频| 九九9久九9国产视频| 综合亚洲AV| 丁香五月花婷婷开心| 婷婷娱乐丁香综合网| 婷婷久月| 天天搞天天爽| 亚洲av电影在线| 99精品久久久| 久香草视频在线观看| 国产成人AV在线| 五月丁香婷婷婷婷综合网| 久久这里只精品| 国产免费一区二区在线A片视频| 婷婷福利影院| 99热这里是精品| 思思热久久爱| 任你草| 六月成人网| 夜夜爱伊人| 性色欲情 网站| 五月婷婷六月开心| 九九激情| 精品久久久中文字幕大豆网推荐理由| 婷婷五月网图片区| 四虎婷婷五月天| 婷婷涩五月| 久久久全国免费视频| 久久综合激情| 日韩爱操视频| 婷婷五月天AV| 超碰爱爱爱| 色婷婷色情| 婷婷九月| .comwww在线观看免费操| 96人人操人人操人人| 99亚洲视频| 黄色中文字目| 婷婷五月色播网| 婷婷五月免费视频| 密着浓厚中出乚交尾GvG935| 婷婷色网站| 天天久| 欧美大片免费观看| 婷婷丁香社区网| 激情床戏| 百度4399有码精品V在线观看| 六月色国内综合| 日韩精品AV一区二区三区| 丁香婷婷五月| 深爱激情网五月| 永久天堂日本| 久久久er热| 4399在线日本A片| 五月婷天堂视频| 国产精品色色色色| 色99视频| 欧美色色色色色色色| 五月丁香六月婷婷亚洲综合| 99国产精品白浆在线观看免费| 激情久久肏屄视频| 五月丁香婷婷综合网| 久草丁香婷婷1024| 99在线观看精彩视频| 九九综合九九| 99久久.www| 五月丁香婷婷成人综合网| 国产69久久久欧美黑人A片 | 五月天婷婷爱| 九九草草逼| 九九视频精品在线免费| 五月丁香在线| 久久三级视频| 色墦五月丁香| 伊人狠狠丁香婷婷综合尤物| 泰州成人视频| 色婷大香蕉| www久热com| 国产AV影片| 婷婷激情五月综合基地| 九色PORNY9l原创自拍| 五月丁香猫咪久久婷婷综合视频激情四射网入口 | 日韩久综合| 噜噜色婷婷| 亚洲区1| 人人视频色| 日韩国产AV播放| 女力报到正好爱上你| 久久久精品婷婷五月天| 五月丁香色狠狠干大屄| 无码成人AAAAA毛片AI换脸| 99爱免费在线观看| 天天日天天插| 激情精品久久| 国产FREESEXVIDEOS性中国| 日日操夜夜爽白洁| 亚洲AV免费在线| mmm1717.6dbm人人爱人人操| 99精品网| www.色婷婷。com| 丁香狠狠干| 色5月婷婷| 无码人妻一区二区一牛影视| 欧美成人A片AAA片在线播放| 亚洲天堂制| 五月婷婷在线免费观看| 91九色中文| 人妻激情综合| 91久久婷婷| av九九| 3p日韩网站视频| 999热这里只有美国精品| 丁香六月天堂| 五月天婷婷久草丁香| 五月天丁香婷婷社区| 五月婷婷色影院| 久久机热/这里只有精品| 立川无码av| www,黄色在线,con| 韩国天天婷婷| 久热超碰91| 五月天伊人网| 五月丁香六月婷婷中文版| 极品精品一区二区三区在线| 丁香婷婷激情网站| 日韩肏屄网| 九九综合精品| 激情五月综合六月丁香婷婷狠狠干| 久久五月婷6 9| 久久久久丁香婷婷五月天| 久久WW| 五月婷婷在线视频| 九色视频这里只有精品| 久久精彩视频99| 淫视馆aV二区一区| 亚洲无AV在线中文字幕| 国产精品激情五月天色婷婷| 99玖玖人人| 丁香五月天激情视频| 99精品视频免费观看,| 五月婷av| 成人看片网站| 五月丁香婷婷人体| 丁香视频| 色激情五月天| 五月天婷a| 991精品在线视频| 97色婷| 天天日,天天干,天天操| 成人网站在线观看视频| 国产毛片精品一区二区色欲黄A片| 五月丁香婷婷六月| 欧美在线视频99| 婷婷干|