精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

Zadig和ChatOps能不能擦出火花

開發 架構
我們把 Zadig 和 ChatOps(聊天機器人)結合就算完成了,當然,這種機器人需要我們根據規則來玩,如果你輸的指令和規則不匹配,就沒法進行下一步了。

?背景介紹

Zadig 是目前很火的云原生持續交付平臺,具備靈活易用的高并發工作流、面向開發者的云原生環境、高效協同的測試管理、強大免運維的模板庫、客觀精確的效能洞察以 及云原生 IDE 插件等重要特性,為工程師提供統一的協作平面,可以滿足大部分的企業交付場景。

但是,大家有沒有遇到過以下情況:

  • 當你在”帶薪拉屎“的時候,叫你發流水線
  • 當你在”聆聽會議精神“的時候,叫你發流水線
  • 當你身邊只有手機的時候,叫你發流水線
  • ......

總之,隨時隨地都可能叫你發流水線,對于這種無聊而又頻繁的操作,有沒有更好的解決辦法呢?

Zadig 在1.15.0版本的時候,已經很友好的支持手機端了,按理說應該能滿足平時的工作需求。但是,作為一個愛折騰的運維,并不滿足于此,我希望能夠通過機器人的方式來完成某些運維工作,比如合并分支、發流水線、執行腳本等,這樣做主要有以下兩個好處:

  • 移動化:隨時隨地能夠通過移動 APP 和機器人溝通,讓機器人完成本來在命令行,或者是 web 端才能完成的任務。
  • 共享化:機器人所在群里的成員都能看到群聊信息,能夠收到任務的處理結果,極大的提高了信息溝通的效率。

這其實就是 ChatOps 的實現,但是這只是初級階段——也就是字符串匹配的方式進行操作,但是隨著人工智能、機器學習等技術不斷成熟,ChatOps 的交付性體驗會越來越好。

當然,我還停留在初級階段,本文也是帶大家通過釘釘機器人的方式發布 Zadig 流水線。

架構解析

ChatOps 的核心在于把 WEB 端或者命令行下的人工操作,轉換能通過聊天工具機器人來完成,所以整體的架構并不會很復雜,如下:

圖片

整體流程如下:

  • 技術人員在聊天群里@機器人,發送需要執行的指令
  • 機器人接收到指令,對指令進行判斷
  • 根據指令執行相關操作,并將結果反饋到聊天群

要想接入到 ChatOps,需要服務有對應的開放 API。所幸,Zadig 提供了一些 API【1】,可以到文檔中進行查看學習。

開發階段

為了不重復造輪子,我使用的是 Github 上一個 ChatOps bot 框架

【2】,該框架已經實現了命令行、微信網頁版、企業微信、釘釘等聊天機器人,我們只需要在此基礎上實現具體的業務即可。

封裝 Zadig 請求

要實現對 Zadig 進行 API 操作,就需要我們封裝 HTTP 請求,為了便于操作,我將 Zadig 的一些 API 封裝了一個 SDK【3】,該 SDK 簡單實現了 Zadig 開發 API 的功能(沒仔細調試,也許有 Bug),如下:

圖片

現在我們只需要在項目中實現自己需要的功能即可。

首先,需要創建 Zadig 請求,創建一個zadig/zadig.go文件,實現 Zadig 初始化,代碼如下:

package zadig

import (
"errors"
"log"

"github.com/joker-bai/go-zadig"
)

var MyZadig myZadig

type myZadig struct {
client *zadig.Client
}

var (
token = "x.x.x"
baseURL = "http://xxx/"
)

func Setup() *myZadig {
client, err := zadig.NewClient(token, zadig.WithBaseURL(baseURL))
if err != nil {
log.Fatalf("Failed to create client: %v", err)
}
return &myZadig{client: client}
}

!! PS:token、url 這些配置其實是可以放到配置文件中,這里為了便于演示,就放在代碼文件中了。

其中:

  • token 是用戶認證使用,在 WEB 端右上角用戶->賬號設置中獲取
  • baseURL 是 zadig 的地址

然后再在該文件中實現CreateWorkflowTask方法,該方法用于執行工作流,如下:

package zadig

var (
callbackURL="xxx"
)

......

func (m *myZadig) CreateWorkflowTask(workfolwName, envName, serviceName, serviceType, repoName, branch string) error {
_, _, err := m.client.Workflow.CreateWorkflowTask(&zadig.CreateWorkflowTaskOptions{
WorkflowName: workfolwName,
EnvName: envName,
Targets: []zadig.TargetArgs{
{
Name: serviceName,
ServiceType: serviceType,
Build: zadig.BuildArgs{
Repos: []zadig.Repository{
{
RepoName: repoName,
Branch: branch,
},
},
},
},
},
Callback: zadig.Callback{
CallbackUrl: callbackURL,
},
})
if err != nil {
return errors.New("執行工作流失敗")
}
return nil
}

該方法接收執行工作流所需的參數,然后調用 SDK 完成執行。由于我這里都是構建部署?的方式,所以只寫了Targets實現。

注冊 Zadig 插件

上面簡單的把 Zadig 執行工作流的請求封裝了,接下來就注冊 Zadig 插件了。

rboot 項目【2】采用插件的方式注冊新的指令,系統會自動把這些指令加載到應用中,并且可以通過使用help命令查看運行規則。

在robot/plugins?中創建zadig/zadig.go文件,用來注冊 zadig 執行流水線指令,內容如下:

package zadig

import (
"fmt"
"regexp"
"strings"

"github.com/sirupsen/logrus"
"devops-chatops/rboot"
"devops-chatops/zadig"
)

var zadigInfo = map[string]map[string]string{
"dev": {
"branch": "dev",
"workflow": "devops-dev",
"serviceType": "helm",
"env": "dev",
},
"test": {
"branch": "test",
"workflow": "devops-qa",
"serviceType": "helm",
"env": "qa",
},
"uat": {
"branch": "uat",
"workflow": "devops-uat",
"serviceType": "helm",
"env": "uat",
},
"prod": {
"branch": "master",
"workflow": "devops-prod",
"serviceType": "helm",
"env": "prod",
},
"yamldev": {
"branch": "master",
"workflow": "chatops-dev",
"serviceType": "k8s",
"env": "dev",
},
}

func init() {
// 注冊腳本
rboot.RegisterPlugin(`pipeline`, rboot.Plugin{
// 腳本處理函數
Action: func(bot *rboot.Robot, incoming *rboot.Message) []*rboot.Message {
// 去除空格
content := strings.Replace(incoming.Content, " ", "", -1)
res := createWorkflowTask(content)
return rboot.NewMessages(res)
},
Ruleset: map[string]string{`pipeline`: `執行[\w ]+環境[\w- ]+流水線`}, // 腳本規則集
Usage: map[string]string{
"pipeline": "執行dev環境devops-chatops流水線",
},
Description: `example '執行dev環境devops-chatops流水線'`,
})
}

func createWorkflowTask(content string) string {
res := regexp.MustCompile(`[\w-/]+流水線`)
s := res.FindStringSubmatch(content)

sp := strings.Split(s[0], "流水線")
pipelineName := sp[0]

br := regexp.MustCompile(`[\w]+環境`)
tb := br.FindStringSubmatch(content)

env := strings.Split(tb[0], "環境")[0]

workflow := zadigInfo[env]["workflow"]
repoName := pipelineName
branch := zadigInfo[env]["branch"]
envName := zadigInfo[env]["env"]
serviceName := pipelineName
serviceType := zadigInfo[env]["serviceType"]

logrus.Debugf("工作流:%v 流水線: %v 環境: %v 服務:%v 服務類型:%v 分支:%v\n",
workflow,
pipelineName,
envName,
serviceName,
serviceType,
branch,
)

zd := zadig.Setup()
err := zd.CreateWorkflowTask(workflow, envName, serviceName, serviceType, repoName, branch)
if err != nil {
return fmt.Sprintf("執行%s環境的流水線%s失敗", env, pipelineName)
}
return fmt.Sprintf("執行%s環境的流水線%s成功", env, pipelineName)
}

其中:

  • init 方法就是插件注冊的實現

Action 腳本的處理函數

Ruleset 是指令規則

Usage 使用方式

Description 描述信息

  • createWorkflowTask 執行工作流方法,主要用來獲取指令的關鍵詞,然后調用 zadig.CreateWorkflowTask 執行工作流
  • zadigInfo 用來定義 zadig 的環境信息

workflow 是工作流名稱

branch 是分支名

serviceType 是服務類型,有 k8s 和 helm 服務

env 部署環境信息

上面的匹配規則、環境信息等比較簡單粗暴,最好是把這些數據存到數據庫里,我這里為了不引入額外的組件就直接放代碼中了。

業務代碼開發完,我們需要把 zadig 插件引入,在 robot/plugins/plugins.go 中 import 即可,如下:

package plugins

import (
_ "github.com/ghaoo/rboot/robot/plugins/hello"
_ "github.com/ghaoo/rboot/robot/plugins/ping"
_ "github.com/ghaoo/rboot/robot/plugins/vote"
_ "devops-chatops/robot/plugins/zadig"
)

至此,執行流水線業務開發完成。

部署 ChatOps

開發完成就要部署,部署要分幾個階段:

  • 創建聊天機器人
  • 部署應用

創建聊天機器人

該聊天機器人不是釘釘的普通自定義機器人,而是需要在釘釘開發者后臺【4】創建機器人,具體操作見文檔【5】,這里不再贅述。

創建到內部機器人過后,就會在釘釘上生成一個測試群并創建了一個機器人,如下:

圖片

該機器人和普通機器人的不同之處在于多了一個 POST 地址,該地址是我們創建機器人的時候配置的,也是應用的訪問地址。

隨著機器人的不斷開發,關鍵詞會越來越多,所以我這里選擇的是加簽校驗。

部署應用

(1)修改配置文件,為了簡單,我直接將配置文件放到代碼倉庫,推到鏡像中。在代碼根目錄下創建.env 文件,內容如下:

# 機器人名稱
ROBOT_NAME=DEVOPS-CHATOPS
# 聊天轉接器名稱
ROBOT_ADAPTER="dingtalk"
# 緩存器名稱
ROBOT_BRAIN=bolt
# 消息秘鑰
ROBOT_SECRET=

# 是否開啟DEBUG
DEBUG=false

# 緩存位置
DATA_PATH=.data

# bolt數據保存地址
BOLT_DB_FILE=db/rboot.db

# web 服務監聽端口
WEB_SERVER_PORT=9000
# 是否啟用TSL
WEB_SERVER_TLS=false
# CA證書位置
WEB_SERVER_CERT=
# CA秘鑰位置
WEB_SERVER_CERT_KEY=

# 釘釘機器人秘鑰
DING_ROBOT_SECRET="xxxx"
# 釘釘webhook機器人access_token
DING_ROBOT_HOOK_ACCESS_TOKEN="xxxx"
# 釘釘webhook機器人秘鑰
DING_ROBOT_HOOK_SECRET="xxxx"

配置轉接器名稱以及釘釘機器人相關信息。

(2)添加 Dockerfile,用于制作應用鏡像,如下:

FROM golang:1.19.1 AS build-env
ENV GOPROXY https://goproxy.cn
ADD . /go/src/app
WORKDIR /go/src/app
RUN go mod tidy
RUN GOOS=linux GOARCH=386 go build -v -o /go/src/app/app-server

FROM alpine
RUN sed -i 's/dl-cdn.alpinelinux.org/mirrors.ustc.edu.cn/g' /etc/apk/repositories && \
apk add -U tzdata
RUN ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
COPY --from=build-env /go/src/app/app-server /app/app-server
COPY --from=build-env /go/src/app/.env /app/.env
WORKDIR /app
EXPOSE 9000
CMD [ "./app-server" ]

(3)添加應用 K8S YAML 配置清單,主要有 deployment、service、ingress 資源,如下:

apiVersion: apps/v1
kind: Deployment
metadata:
labels:
app: devops-chatops
name: devops-chatops
spec:
replicas: 1
selector:
matchLabels:
app.kubernetes.io/instance: devops-chatops
app.kubernetes.io/name: devops-chatops
template:
metadata:
labels:
app.kubernetes.io/instance: devops-chatops
app.kubernetes.io/name: devops-chatops
spec:
containers:
- image: registry.cn-hangzhou.aliyuncs.com/coolops/devops-chatops:1c5e4c9274959c8efcecfb286103b052abb44d27
imagePullPolicy: IfNotPresent
name: devops-chatops
ports:
- containerPort: 9000
name: http
protocol: TCP
---
apiVersion: v1
kind: Service
metadata:
labels:
app.kubernetes.io/instance: devops-chatops
app.kubernetes.io/name: devops-chatops
name: devops-chatops
spec:
ports:
- name: http
port: 80
protocol: TCP
targetPort: http
selector:
app.kubernetes.io/instance: devops-chatops
app.kubernetes.io/name: devops-chatops
sessionAffinity: None
type: ClusterIP
---
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: devops-chatops
spec:
rules:
- host: chatops.jokerbai.com
http:
paths:
- backend:
serviceName: devops-chatops
servicePort: 80
path: /

(4)在 Zadig 上部署應用 由于我們這里使用的 YAML 類應用,所以先在 Zadig 上創建一個 YAML 類項目,如下:

圖片

然后在項目中創建添加服務,我們選擇從代碼倉庫中同步,如下:

圖片

接下來我們需要給該應用增加構建操作,配置如下:

圖片

接著我們把服務添加到環境即可。

現在就可以執行工作流發布任務了,如下:

圖片

測試機器人

現在我們可以在群里進行測試了,先測試簡單的help?,看能不能輸出我們想要的幫助信息,如下:

圖片

我們發現可以得到我們想要的信息。

接下來測試發布 Zadig 流水線,如下:

圖片

可以看到給我們反饋的是流水線創建成功,那到底有沒有成功呢?

我們到 Zadig WEB 端查看如下:

圖片

我們可以看到有一個由 openAPI 觸發的流水線正在運行,這表示流水線已經觸發成功。

為了得到工作流執行的最終結果,我們可以在 Zadig 上為工作流添加 IM 通知,同樣可以使用該機器人,這樣就形成閉環了。

最后

到此,我們把 Zadig 和 ChatOps(聊天機器人)結合就算完成了,當然,這種機器人需要我們根據規則來玩,如果你輸的指令和規則不匹配,就沒法進行下一步了。

在整個過程中,還是發現一些問題:

  • 使用 openAPI 觸發 Helm 項目目前存在問題,無法正常獲取到服務,導致流水線無法進行
  • 使用 openAPI 觸發的工作流不會進行 IM 通知

聊天機器人,可以接入很多能力,如果某種操作比較頻繁且無趣,可以考慮做成各種自動化,chatops 就是其中的選擇之一。

文檔

【1】Zadig 開放 API https://docs.koderover.com/zadig/v1.15.0/api/usage/

【2】ChatOps 框架 https://github.com/ghaoo/rboot.git

【3】Zadig SDK https://github.com/joker-bai/go-zadig.git

【4】釘釘開發者后臺? https://open-dev.dingtalk.com

【5】釘釘內部機器人文檔 https://open.dingtalk.com/document/robots/enterprise-created-chatbot


責任編輯:武曉燕 來源: 運維開發故事
相關推薦

2019-11-06 15:05:56

智慧城市區塊鏈數據

2019-11-21 09:25:23

AI 數據人工智能

2017-11-14 05:38:54

2009-12-03 13:32:04

Virtuozzo捆綁

2015-06-30 15:18:04

2016-05-19 17:10:27

銀行

2025-04-22 08:00:00

2013-04-19 10:42:02

打車軟件大數據

2021-02-26 21:25:08

比特幣投資貨幣

2020-10-16 18:33:18

Rust語言前端開發

2024-06-07 09:19:00

AIjson字符串

2017-07-25 11:26:46

區塊鏈銀行金融

2023-12-27 08:03:53

Go優化代碼

2010-04-13 10:02:16

索引

2020-12-21 15:09:23

人工智能安全人臉識別

2024-04-26 09:37:43

國產數據庫開發者

2012-06-13 11:01:59

英特爾

2023-04-06 06:55:24

ChatGPTGPT算力

2022-04-24 11:52:04

元宇宙Web3去中心化

2012-03-26 21:38:36

智能
點贊
收藏

51CTO技術棧公眾號

国模一区二区三区| 国产精品一区免费在线| 国产三级一区二区| 91亚洲精品在线| 中文字幕一区二区三区手机版| 日韩最新在线| 欧美人与禽zozo性伦| 精品丰满人妻无套内射| 国产在线黄色| 懂色av中文字幕一区二区三区| 欧美壮男野外gaytube| 波多野结衣久久久久| 牛牛影视久久网| 91精品午夜视频| 国产aaa一级片| 成人影院www在线观看| 26uuu精品一区二区三区四区在线| 国产精品私拍pans大尺度在线 | 九九视频精品在线观看| 2024短剧网剧在线观看| 久久免费精品国产久精品久久久久| 91精品国产综合久久男男| 中文字幕亚洲精品在线| 影视一区二区| 在线日韩中文字幕| 亚洲乱码国产乱码精品精大量| 久久久久久亚洲精品美女| 在线国产亚洲欧美| 韩国日本在线视频| a在线视频v视频| 亚洲美女区一区| 一区二区三区四区不卡| 好男人免费精品视频| 99久久婷婷国产精品综合| 亚洲在线视频福利| 一起草av在线| 久国产精品韩国三级视频| 欧美中文在线观看国产| 亚洲综合一二三| 亚洲性图久久| 欧美国产日韩一区二区| 污污的视频在线免费观看| 欧美天天综合| 伊人久久男人天堂| 色欲AV无码精品一区二区久久| 日韩精品免费一区二区夜夜嗨| 精品免费99久久| 国产精品无码自拍| 日韩在线精品强乱中文字幕| 欧美人妇做爰xxxⅹ性高电影| 北条麻妃在线一区| 美女写真久久影院| 在线观看网站黄不卡| 日韩精品免费播放| 欧美成人性网| 在线亚洲高清视频| 日韩av片网站| av久久网站| 在线播放国产精品二区一二区四区 | 亚洲国产网站| 午夜精品久久久久久久男人的天堂 | 中文字幕免费精品| 美女性感视频久久久| 国产大片免费看| 欧美影视一区| 久久久噜噜噜久久中文字免| xxxx 国产| 欧美亚洲网站| 国产精品天天狠天天看| aaa一区二区三区| 国产成人免费网站| 久久久久天天天天| www.91在线| 亚洲另类春色国产| 97碰在线视频| 一区二区三区电影大全| 欧美无砖专区一中文字| 韩国一区二区在线播放| 超碰在线一区| 国产亚洲精品高潮| 三级全黄做爰视频| 欧美午夜国产| 日韩av免费一区| 99在线观看免费| av福利精品导航| 色大师av一区二区三区| 牛牛精品在线| 色婷婷一区二区| 日本在线观看视频一区| 国产伦精品一区二区三区免费优势 | 国产欧美在线播放| 亚洲欧美另类一区| 国产精品午夜电影| 成年女人18级毛片毛片免费| 成人激情综合| 欧美成人a在线| 中文字幕成人动漫| 欧美亚韩一区| 国产精品美女无圣光视频| 亚洲av无码乱码国产麻豆| 91色视频在线| mm131午夜| 另类图片综合电影| 欧美成人a∨高清免费观看| 色哟哟精品观看| 激情综合视频| 成人妇女免费播放久久久| 无码精品黑人一区二区三区| 国产精品久久毛片av大全日韩| 国产av熟女一区二区三区| 欧美日韩不卡| 亚洲精品成人久久久| 希岛爱理中文字幕| 日韩电影在线观看电影| 成人欧美一区二区| 国产福利在线播放麻豆| 欧洲精品中文字幕| 免费a在线观看播放| 91精品国产成人观看| 国产精品jizz在线观看麻豆| 日韩中文字幕观看| 一区二区三区免费在线观看| 午夜免费看毛片| 红桃视频在线观看一区二区| 7m精品福利视频导航| 亚洲精品97久久中文字幕| 国产精品乱人伦中文| 日韩午夜激情电影| 久久久久久久香蕉| 狂野欧美性猛交xxxx| 亚洲乱码国产乱码精品精天堂 | 午夜影院欧美| 国产精品久久久久久久久免费 | 亚洲宅男网av| 538国产精品一区二区免费视频| 亚洲伦理在线观看| 亚洲精品免费看| 欧美成年人视频在线观看| 国产一区二区三区91| 欧美在线免费看| 四虎影院在线播放| 亚洲第一主播视频| 亚洲精品第二页| 欧美日韩一卡| 国产精品视频免费观看| 国产高清在线a视频大全| 欧美一二三在线| 午夜精品福利在线视频| 激情文学综合丁香| 日本老太婆做爰视频| 欧美1区2区3| 久国内精品在线| 亚洲国产日韩在线观看| 夜夜亚洲天天久久| 岛国精品一区二区三区| 雨宫琴音一区二区在线| 国产亚洲一区二区三区在线播放| jizz一区二区三区| 日韩麻豆第一页| www.欧美色| 国产精品久久久久一区二区三区| 国产wwwxx| 亚洲欧美日韩高清在线| 97碰碰视频| 91在线三级| 亚洲午夜av久久乱码| 中文在线免费观看| 有码一区二区三区| 国产免费一区二区三区最新6| 国产欧美日韩一级| 色女孩综合网| 午夜日韩影院| 538国产精品视频一区二区| 国产最新视频在线观看| 欧美日韩另类国产亚洲欧美一级| 日韩一区二区三区四区在线| 99在线精品观看| 国产ts人妖一区二区三区| 黄色录像a级片| 欧美亚洲免费| gogogo免费高清日本写真| eeuss鲁片一区二区三区| 日韩女优人人人人射在线视频| jizz在线观看视频| 精品欧美乱码久久久久久1区2区| 日本视频免费观看| 一区二区三区 在线观看视频| 亚洲黄色免费在线观看| 免费av成人在线| 男人添女荫道口喷水视频| 国产91久久精品一区二区| 成人精品一区二区三区| 国产激情视频在线看| 伊人久久免费视频| 欧美77777| 精品视频一区三区九区| 国产精品自拍视频一区| 欧美国产日韩一二三区| 91精品又粗又猛又爽| 日韩激情一二三区| 欧美这里只有精品| 日韩一级毛片| 欧美日本亚洲| silk一区二区三区精品视频| 国产精品久久久精品| 第一中文字幕在线| 久久精品电影网站| 久久这里只有精品8| 欧美黄色免费影院| 日本午夜激情视频| 国产精品自拍电影| 亚洲.国产.中文慕字在线| 欧日韩不卡视频| 91老师片黄在线观看| 欧美性受xxxx黒人xyx性爽| 丝袜亚洲精品中文字幕一区| 屁屁影院ccyy国产第一页| 欧美色婷婷久久99精品红桃| 国产精品三区www17con| 秋霞国产精品| 57pao成人国产永久免费| 黑人精品视频| 美日韩丰满少妇在线观看| 永久免费av在线| 亚洲片国产一区一级在线观看| 风流老熟女一区二区三区| 欧美精品1区2区| 少妇无套内谢久久久久| 精品久久久久久国产| 久久精品国产亚洲av麻豆色欲| 国产精品久久久久精k8 | 久久精品最新地址| 91精品大全| 国产香蕉97碰碰久久人人| 奇米影视888狠狠狠777不卡| 亚洲精品av在线| 日韩一级中文字幕| 亚洲国内高清视频| 免费观看黄色一级视频| 欧美变态tickling挠脚心| 99草在线视频| 国产网红在线观看| 亚洲精品一区中文字幕乱码| 欧美综合视频在线| 欧美精品一区二区三区蜜桃| 性欧美8khd高清极品| 日韩一区二区麻豆国产| 国产精品视频无码| 欧美一区二区三区视频在线| 国产又爽又黄又嫩又猛又粗| 欧美精品vⅰdeose4hd| 国产男男gay网站| 欧美一级xxx| 亚洲国产视频一区二区三区| 日韩欧美精品在线视频| www.色呦呦| 亚洲第一福利网站| 青青草娱乐在线| 亚洲国产精彩中文乱码av在线播放| 国产小视频免费观看| 亚洲国产婷婷香蕉久久久久久| 日批免费在线观看| 亚洲精品中文字幕av| 不卡在线视频| 裸体女人亚洲精品一区| 天堂8中文在线| 97在线观看视频国产| 亚洲成人短视频| 国产精品免费久久久久久| 午夜不卡一区| 懂色av一区二区三区在线播放| 国产乱论精品| 日本一区二区三区免费观看| 久久神马影院| 性高湖久久久久久久久aaaaa| 在线亚洲精品| wwwwwxxxx日本| 成人一区二区三区在线观看| 色天使在线视频| 国产精品视频观看| 九九在线观看视频| 日本韩国精品一区二区在线观看| 一卡二卡在线视频| 亚洲精品第一国产综合精品| 91久久久国产精品| 中文字幕一区久| 国产欧美精品日韩| 成人18夜夜网深夜福利网| 日本在线观看一区| 国产精品av久久久久久麻豆网| 日本a级片免费观看| 狠狠色狠狠色综合日日91app| 在线观看亚洲免费视频| 国产精品欧美经典| 日本一级淫片免费放| 欧美精品一二三四| 午夜激情小视频| 久久视频在线观看免费| 国产精品专区免费| 99re资源| 久久国产亚洲| 99爱视频在线| 国产麻豆欧美日韩一区| 亚洲女优在线观看| 图片区日韩欧美亚洲| 国产女无套免费视频| 国产视频精品xxxx| 欧洲一区二区三区| 国产欧美在线视频| 亚洲区小说区| 国产av国片精品| 国产在线视视频有精品| 小早川怜子久久精品中文字幕| 一区二区三区久久久| 91午夜交换视频| 国产亚洲视频在线| 狼人综合视频| 成人av播放| 91久久久精品国产| 婷婷丁香激情网| 2023国产精品视频| 日韩福利片在线观看| 日韩亚洲电影在线| 激情成人四房播| 成人高h视频在线| 成人高清电影网站| 国产精品乱码久久久久| 久久美女艺术照精彩视频福利播放| 久久中文字幕在线观看| 日韩欧美综合一区| 超碰在线caoporen| 91日韩在线播放| 午夜片欧美伦| 国产xxxxhd| 亚洲美女区一区| wwwav网站| 欧美激情亚洲自拍| 福利在线一区| 国产av熟女一区二区三区| 国产xxx精品视频大全| 中文字幕影音先锋| 精品日韩一区二区三区免费视频| 国产黄色小视频在线| 亚洲一区中文字幕| 综合视频在线| 久久久国产精品久久久| 亚洲精品日产精品乱码不卡| 国产偷人妻精品一区二区在线| 久久偷看各类女兵18女厕嘘嘘| 亚洲男女网站| 亚洲中文字幕无码一区二区三区| 国产精品1区2区| 久久精品99国产精| 亚洲国产精品一区二区三区| 24小时免费看片在线观看| 国产一区在线免费| www.蜜臀av| 91精品国产欧美一区二区成人| 午夜视频在线观看网站| 91久久国产精品| 欧美日韩中文| 狠狠人妻久久久久久综合蜜桃| 日韩欧美在线字幕| 18视频免费网址在线观看| 国产欧美日韩免费看aⅴ视频| 亚洲精彩视频| 特级特黄刘亦菲aaa级| 疯狂做受xxxx欧美肥白少妇| 加勒比一区二区三区在线| 国产综合在线观看视频| 欧美激情性爽国产精品17p| 捆绑裸体绳奴bdsm亚洲| 色婷婷激情综合| 国产色在线观看| 国产亚洲一区在线播放| 日本成人在线不卡视频| 午夜精品一区二区三级视频| 欧美va天堂va视频va在线| 午夜伦理福利在线| 这里只有精品66| 99久久免费精品| 91尤物国产福利在线观看| 久久久久久伊人| 久久精品国产68国产精品亚洲| 黄色片子免费看| 91精品办公室少妇高潮对白| 黄色片免费在线观看| 久久精品五月婷婷| 极品少妇xxxx精品少妇偷拍 | 色综合天天做天天爱| 免费av不卡| 蜜桃导航-精品导航| 狠狠色丁香久久婷婷综| 日韩精品1区2区| 久久综合伊人77777蜜臀| 日韩mv欧美mv国产网站| 国产又黄又猛的视频| 色婷婷亚洲婷婷| 黄页在线观看免费| 一区二区不卡在线|