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

ARTICLE DETAIL

資訊詳情

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

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

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