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

基于Jira的運維發布平臺的設計與實現

運維 系統運維
JIRA優秀的項目管理,問題跟蹤的工具,另外它的流程管理和看板模式也能夠非常直觀看到目前流程處在什么位置。

[[402857]]

本文轉載自微信公眾號「運維開發故事」,作者喬克 。轉載本文請聯系運維開發故事公眾號。

上線發布是運維的日常工作,常見的發布方式有:

  • 手動發布
  • Jenkins發布平臺
  • Gitlab CI
  • ......

除此之外還有需要開源軟件,他們都有非常不錯的發布管理功能。

面臨的問題

作為運維人員,上線發布是必不可少的一環,一個正常的發布流程是怎么樣的?

  • 需求方提發布任務,走發布流程
  • 供應方執行發布上線

環節看似簡單,但是中間其實是有斷層的。一般企業在走上線流程都是通過一些公共渠道,比如郵件、釘釘、飛書的流程,這些都很難和運維執行上線發布平臺進行關聯上,而且也不夠直觀。所以我們就需要解決以下幾個問題:

流程和運維平臺建立連接

從發起到結束形成閉環

為了選擇JIRA?

JIRA優秀的項目管理,問題跟蹤的工具,另外它的流程管理和看板模式也能夠非常直觀看到目前流程處在什么位置。另外它可以通過webhook和其他平臺建立友好的連接,方便擴展。再者對于開發、測試、項目管理人員等來說Jira是他們日常的工具,使用熟練度非常高,降低了額外的學習成功。鑒于此,我們選擇JIRA作為運維發布平臺,爭取做到一個平臺做所有事。

方案設計

設計思路

充分利用Jira、Gitlab的webhook功能,以及Jenkins的靈活性。

  • Jira上更新狀態觸發Jenkins執行合并分支流水線
  • Gitlab上代碼合并成功后觸發Jenkins執行發布流水線
  • 將發布結果通過釘釘等軟件通知相應的人

整體思路相對簡單,難點主要集中在Jenkins獲取Jira、Gitlab的數據,所幸Jenkins的插件功能非常豐富,這里就使用Generic Webhook Trigger插件,可以很靈活地獲取到觸發軟件的信息。

發布流程方案

然后整理出如下的發布流程。

涉及軟件

軟件 功能
Jira 發布流程管理
Jenkins 執行各種流水線
Gitlab 代碼倉庫
Kubernetes 應用管理
Helm/kustomize 包管理
釘釘 消息通知
trivy 鏡像掃描
鏡像倉庫 阿里云鏡像倉庫

PS:這里沒有具體的軟件部署

Jira與Jenkins進行集成合并分支

Jenkins配置

Jenkins的配置主要有兩部分,如下:

  • 配置Jenkins ShareLibrary功能
  • 編寫Jira觸發相應的Jenkinsfile

(1)Jenkins上配置ShareLibarary 系統配置-->系統配置-->Global Pipeline Libraries

(2)創建流水線,配置Webhook以及添加Jenkinsfile

  • 配置觸發器

先配置一個變量和正則

再配置一個Token即可

  • 配置流水線,添加對應的Jenkinsfile

image.png

(3)Jenkinsfile的主要邏輯如下

PS:下面僅列出大致的框架,并沒有詳細的代碼

  • 獲取Jira的配置信息進行解析
  • 根據不同信息執行不同的操作
  • 合并分支主要是通過調Gitlab的API接口完成
  1. #!groovy 
  2.  
  3. @Library('lotbrick') _ 
  4.  
  5. def gitlab = new org.devops.gitlab() 
  6. def tool = new org.devops.tools() 
  7. def dingmes = new org.devops.sendDingTalk() 
  8.  
  9. pipeline { 
  10.     agent { node { label "master"}} 
  11.  
  12.     environment { 
  13.         DINGTALKHOOK = "https://oapi.dingtalk.com/robot/send?access_token=xxxx"    
  14.     } 
  15.  
  16.     stages{ 
  17.  
  18.         stage("FileterData"){ 
  19.             steps{ 
  20.                 script{ 
  21.                     response = readJSON text: """${webHookData}""" 
  22.  
  23.                     // println(response) 
  24.  
  25.                     env.eventType = response["webhookEvent"
  26.  
  27.                     if (eventType == "jira:issue_updated"){ 
  28.                         // 獲取狀態值 
  29.                         env.jiraStatus = response['issue']['fields']['status']['name'
  30.                         env.gitlabInfos = response['issue']['fields']['customfield_10219'
  31.                         infos = "${gitlabInfos}".split("\r\n"
  32.                         for (info in infos){ 
  33.                             prName = "$info".split("/")[0] 
  34.                             // brName = "$info".split("/")[1] 
  35.                             brName = info - "${prName}/" 
  36.                             println(prName) 
  37.                             println(brName) 
  38.                             if (jiraStatus == "已發布(UAT)"){ 
  39.                                 println('進行合并PRE分支操作'
  40.                             }else if (jiraStatus == "已發布(PROD)"){ 
  41.                                 println('進行合并PROD分支操作'
  42.                             }else if (jiraStatus == "已完成"){ 
  43.         println('進行分支打Tag并刪除原分支'
  44.                             }else
  45.                                 println("查無此項"
  46.                             } 
  47.                         } 
  48.                     } 
  49.                 } 
  50.             } 
  51.         } 
  52.     } 
  53.     // 構建后的操作 
  54.  post { 
  55.   failure { 
  56.    script{  
  57.     println("failure:只有構建失敗才會執行"
  58.     dingmes.SendDingTalk("分支合并失敗 ❌"
  59.    } 
  60.   } 
  61.   aborted { 
  62.             script{ 
  63.     println("aborted:只有取消構建才會執行"
  64.     dingmes.SendDingTalk("分支合并取消 ❌","暫停或中斷"
  65.             } 
  66.   } 
  67.  } 

以上Jenkins上配置基本完成。

Jira上配置

Jira上的主要配置如下:

  • 建立工作流
  • 工作流關聯項目
  • 配置項目觸發Webhook

建立工作流

將工作流關聯項目組

配置webhook

設置-->系統-->網絡鉤子

上面配置完成后,即完成Jira上配置,然后就可以在對應項目的看板上查看所以待發布的項目,如下:

然后進行拖拽或者點擊發布按鈕,即可改變狀態,觸發流水線進行相應的操作了。

Gitlab與Jenkins集成發布系統

開發分支簡要

這里主要使用的是功能分支開發模式,主要分為以下幾個分支:

  • DEV分支:開發環境分支
  • TEST分支:測試環境分支
  • UAT分支:聯調環境分支
  • PRE分支:預發布環境分支
  • MASTER分支:生產環境分支

代碼合并路線是:DEV->TEST->UAT->PRE->MASTER 然后根據不同的分支判斷執行不同環境的部署。

Jenkins配置流水線

(1)配置Webhook插件參數

獲取Gitlab分支

定義gitlab push條件,不是任何改動都需要觸發流水線

定義過濾正則表達式

這樣就只有commit的時候才會觸發流水線。

(2)配置Jenkinsfile

  1. def labels = "slave-${UUID.randomUUID().toString()}" 
  2.  
  3. // 引用共享庫 
  4. @Library('jenkins_shareLibrary'
  5.  
  6. // 應用共享庫中的方法 
  7. def tools = new org.devops.tools() 
  8.  
  9. def branchName = "" 
  10.  
  11. // 獲取分支 
  12. if ("${gitlabWebhook}" == "gitlabPush"){ 
  13.     branchName = branch - "refs/heads/" 
  14.  currentBuild.description = "構建者${userName} 分支${branchName}" 
  15.  
  16. pipeline { 
  17.     agent { 
  18.         kubernetes { 
  19.             label labels 
  20.             yaml ""
  21. apiVersion: v1 
  22. kind: Pod 
  23. metadata: 
  24.   labels: 
  25.     some-label: some-label-value 
  26. spec: 
  27.   volumes: 
  28.   - name: docker-sock 
  29.     hostPath: 
  30.       path: /var/run/docker.sock 
  31.       type: '' 
  32.   - name: maven-cache 
  33.     persistentVolumeClaim: 
  34.       claimName: maven-cache-pvc 
  35.   containers: 
  36.   - name: jnlp 
  37.     image: registry.cn-hangzhou.aliyuncs.com/rookieops/inbound-agent:4.3-4 
  38.   - name: maven 
  39.     image: registry.cn-hangzhou.aliyuncs.com/rookieops/maven:3.5.0-alpine 
  40.     command: 
  41.     - cat 
  42.     tty: true 
  43.     volumeMounts: 
  44.     - name: maven-cache 
  45.       mountPath: /root/.m2 
  46.   - name: docker 
  47.     image: registry.cn-hangzhou.aliyuncs.com/rookieops/docker:19.03.11 
  48.     command: 
  49.     - cat 
  50.     tty: true 
  51.     volumeMounts: 
  52.     - name: docker-sock 
  53.       mountPath: /var/run/docker.sock 
  54.   - name: sonar-scanner 
  55.     image: registry.cn-hangzhou.aliyuncs.com/rookieops/sonar-scanner:latest 
  56.     command: 
  57.     - cat 
  58.     tty: true 
  59.   - name: kustomize 
  60.     image: registry.cn-hangzhou.aliyuncs.com/rookieops/kustomize:v3.8.1 
  61.     command: 
  62.     - cat 
  63.     tty: true 
  64.   - name: kubedog 
  65.     image: registry.cn-hangzhou.aliyuncs.com/rookieops/kubedog:v0.5.0 
  66.     command: ['cat'
  67.     tty: true 
  68.   - name: trivy 
  69.     image: registry.cn-hangzhou.aliyuncs.com/rookieops/trivy:v2 
  70.     command: ['cat'
  71.     tty: true 
  72.     volumeMounts: 
  73.       - name: docker-sock 
  74.         mountPath: /var/run/docker.sock 
  75. ""
  76.         } 
  77.     } 
  78.  
  79.     environment { 
  80.         auth = 'joker' 
  81.     } 
  82.  
  83.     options { 
  84.         timestamps()    // 日志會有時間 
  85.         skipDefaultCheckout()    // 刪除隱式checkout scm語句 
  86.         disableConcurrentBuilds()    //禁止并行 
  87.         timeout(time:1, unit:'HOURS') //設置流水線超時時間 
  88.     } 
  89.  
  90.     stages { 
  91.         // 拉取代碼 
  92.         stage('GetCode') { 
  93.             steps { 
  94.                 checkout([$class: 'GitSCM', branches: [[name"${gitBranch}"]], 
  95.                     doGenerateSubmoduleConfigurations: false
  96.                     extensions: [], 
  97.                     submoduleCfg: [], 
  98.                     userRemoteConfigs: [[credentialsId: '83d2e934-75c9-48fe-9703-b48e2feff4d8', url: "${gitUrl}"]]]) 
  99.             } 
  100.         } 
  101.  
  102.         // 單元測試和編譯打包 
  103.         stage('Build&Test') { 
  104.             steps { 
  105.                 container('maven') { 
  106.                     script { 
  107.                         tools.PrintMes('編譯打包''blue'
  108.                     } 
  109.                 } 
  110.             } 
  111.         } 
  112.         // 代碼掃描 
  113.         stage('CodeScanner') { 
  114.             steps { 
  115.                 container('sonar-scanner') { 
  116.                     script { 
  117.       tools.PrintMes('代碼掃描''blue'
  118.                     } 
  119.                 } 
  120.             } 
  121.         } 
  122.         // 構建鏡像 
  123.         stage('BuildImage') { 
  124.             steps { 
  125.                 container('docker') { 
  126.      script { 
  127.       tools.PrintMes('構建鏡像''blue'
  128.      } 
  129.     } 
  130.             } 
  131.         } 
  132.    
  133.   // 鏡像掃描 
  134.   stage('Vulnerability Scanner') { 
  135.             steps { 
  136.                 container('trivy') { 
  137.                     script{ 
  138.       tools.PrintMes('鏡像掃描''blue'
  139.      }             
  140.                 } 
  141.             } 
  142.         } 
  143.    
  144.   // 推送鏡像 
  145.   stage('Push Image') { 
  146.             steps { 
  147.                 container('docker') { 
  148.                     script{ 
  149.       tools.PrintMes('推送鏡像''blue'
  150.      }             
  151.                 } 
  152.             } 
  153.         } 
  154.    
  155.         // 部署 
  156.         stage('Deploy DEV') { 
  157.    when { 
  158.     branchName 'dev' 
  159.    } 
  160.             steps { 
  161.                 container('kustomize'){ 
  162.      script{ 
  163.       tools.PrintMes('部署DEV環境','blue'
  164.      } 
  165.     } 
  166.             } 
  167.         } 
  168.   stage('Deploy TEST') { 
  169.    when { 
  170.     branchName 'test' 
  171.    } 
  172.             steps { 
  173.                 container('kustomize'){ 
  174.      script{ 
  175.       tools.PrintMes('部署TEST環境','blue'
  176.      } 
  177.     } 
  178.             } 
  179.         } 
  180.   stage('Deploy UAT') { 
  181.    when { 
  182.     branchName 'uat' 
  183.    } 
  184.             steps { 
  185.                 container('kustomize'){ 
  186.      script{ 
  187.       tools.PrintMes('部署UAT環境','blue'
  188.      } 
  189.     } 
  190.             } 
  191.         } 
  192.   stage('Deploy PRE') { 
  193.    when { 
  194.     branchName 'pre' 
  195.    } 
  196.             steps { 
  197.                 container('kustomize'){ 
  198.      script{ 
  199.       tools.PrintMes('部署PRE環境','blue'
  200.      } 
  201.     } 
  202.             } 
  203.         } 
  204.   stage('Deploy PROD') { 
  205.    when { 
  206.     branchName 'master' 
  207.    } 
  208.             steps { 
  209.                 container('kustomize'){ 
  210.      script{ 
  211.       tools.PrintMes('部署PROD環境','blue'
  212.      } 
  213.     } 
  214.             } 
  215.         } 
  216.    
  217.   // 跟蹤應用啟動情況 
  218.   stage('Check App Start') { 
  219.    steps{ 
  220.     container('kubedog'){ 
  221.      script{ 
  222.       tools.PrintMes('跟蹤應用啟動''blue'
  223.      } 
  224.     } 
  225.    } 
  226.   } 
  227.    
  228.         // 接口測試 
  229.         stage('InterfaceTest') { 
  230.             steps { 
  231.                 sh 'echo "接口測試"' 
  232.             } 
  233.         } 
  234.  
  235.     } 
  236.     // 構建后的操作 
  237.     post { 
  238.         success { 
  239.             script { 
  240.                 println('success:只有構建成功才會執行'
  241.                 currentBuild.description += '\n構建成功!' 
  242.                 dingmes.SendDingTalk("構建成功 ✅"
  243.             } 
  244.         } 
  245.         failure { 
  246.             script { 
  247.                 println('failure:只有構建失敗才會執行'
  248.                 currentBuild.description += '\n構建失敗!' 
  249.                 dingmes.SendDingTalk("構建失敗 ❌"
  250.             } 
  251.         } 
  252.         aborted { 
  253.             script { 
  254.                 println('aborted:只有取消構建才會執行'
  255.                 currentBuild.description += '\n構建取消!' 
  256.                 dingmes.SendDingTalk("構建失敗 ❌","暫停或中斷"
  257.             } 
  258.         } 
  259.     } 

(3)在Gitlab上配置鉤子 settings->webhook

到這里,Gitlab和Jenkins集成就差不多完成了,后面就是具體的調試以及配置了。

寫到最后

道路千萬條,適合自己才最好。

上面是根據工作的實際情況做的運維發布,整體思路還有實現方式并不復雜,主要是充分利用各個軟件的webhook能力,以及充分利用Jenkins靈活的插件功能,使得從創建發布計劃和執行發布進行打通。

 

個人覺得還是有必要記錄一下,也希望能幫助到有這方面需要的人。

 

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

2015-06-11 10:53:55

IaaS云平臺設計信息安全

2020-12-30 05:34:25

監控PrometheusGrafana

2018-04-23 12:41:21

云計算政務云平臺架構

2017-04-25 16:12:49

2022-12-28 08:31:38

平臺設計應用

2021-12-14 15:35:33

Flink數據分析數據集成平臺

2011-11-24 21:59:55

運維企業外包

2014-09-12 15:14:53

運維開發

2018-06-13 09:56:14

運維智能無人化

2015-06-24 10:42:19

云計算運維自動化運維ANSIBLE

2025-02-25 09:29:34

2016-01-27 15:07:11

IT運維管理/呼叫中心

2011-08-03 09:52:19

IT運維管理ITIL

2019-03-19 08:41:38

Linux運維變更

2009-10-19 15:46:14

ITIL摩卡

2009-05-18 09:11:00

IPTV融合寬帶

2014-03-04 10:33:45

IT運維華三

2020-04-09 15:23:19

Kubernetes發布系統集群

2021-11-24 08:55:38

代理網關Netty
點贊
收藏

51CTO技術棧公眾號

成人h版在线观看| 四虎视频在线精品免费网址| 成人成人成人在线视频| 97视频免费在线看| 国产chinese中国hdxxxx| 麻豆传媒在线免费| 国产精品羞羞答答xxdd| 69影院欧美专区视频| 精品人伦一区二区三电影| 欧美jizz18| 亚洲女爱视频在线| 久久大片网站| 国产精品久久久久久久久毛片| 亚洲久久久久| 亚洲精选中文字幕| 日本高清久久久| 大香伊人久久| 国产欧美精品在线观看| 99久热re在线精品视频| 国产三级av片| 久久精品青草| 精品视频一区在线视频| 一级特黄性色生活片| 日本福利专区在线观看| 成人av影院在线| 国产美女搞久久| 日本中文字幕在线免费观看| 日韩精品dvd| 亚洲第一黄色网| 麻豆一区二区三区视频| 黑人另类精品××××性爽| 国产亚洲欧美色| 成人在线观看91| 中文字幕av网站| 亚洲久久在线| 久久国产一区二区三区| 无码人妻精品一区二区中文| 精品一区二区三区四区五区| 色综合久久中文字幕综合网| 亚洲综合激情五月| 久久精品蜜桃| av爱爱亚洲一区| 亚洲精品日韩激情在线电影| 日韩 国产 欧美| 亚洲福利电影| 色综合久综合久久综合久鬼88| 嘿嘿视频在线观看| 亚洲综合图色| 亚洲国产成人精品一区二区 | 久久性爱视频网站| 亚洲成人高清| 欧美视频一区二区三区…| 青青草视频国产| 国产区在线视频| 91麻豆高清视频| 国产一区二区三区高清| 丰满少妇被猛烈进入| 黑人巨大精品欧美黑白配亚洲| 国产v综合ⅴ日韩v欧美大片 | 久久久久久久久久久久国产精品| 亚洲综合视频| 精品1区2区3区| xx欧美撒尿嘘撒尿xx| 日本精品一区二区三区高清 久久| 在线观看一二三区| 玖玖视频精品| 国产成人在线一区| 日韩精品久久久久久免费| 99在线|亚洲一区二区| 久久久免费精品| 国产午夜激情视频| 99国产精品视频免费观看一公开| 久久免费视频这里只有精品| 精品在线视频免费观看| 亚洲一级高清| 国模视频一区二区| 日韩精品一区二区av| 亚洲精品欧美| 欧美又大粗又爽又黄大片视频| 国产性猛交╳xxx乱大交| 99精品国产99久久久久久福利| 97色在线视频观看| 国产免费av一区| 日韩精品五月天| 国产精品亚洲第一区| 一级特黄录像免费看| 国产精品综合在线视频| 粉嫩av免费一区二区三区| 日本久久一级片| 91污片在线观看| 日本不卡免费新一二三区| 青青草免费在线| 国产欧美日韩视频一区二区 | 日韩精品永久网址| 日韩日本欧美亚洲| 久久久久久久久久99| 狠久久av成人天堂| 欧洲午夜精品久久久| 超碰在线观看91| 国产美女视频一区| 成人片在线免费看| 国产福利小视频在线观看| 1024成人网| 男女视频网站在线观看| 成人四虎影院| 欧美日韩在线电影| 一区二区三区四区影院| 日韩理论电影中文字幕| 国产一区二区三区在线播放免费观看 | 亚洲一区二区三区涩| 欧美日韩在线视频免费观看| 天天综合色天天综合色h| 97公开免费视频| 欧美2区3区4区| 亚洲欧美日韩天堂| 久草资源在线视频| 日韩av电影免费观看高清完整版| 成人免费高清完整版在线观看| 欧美一区二区三区激情| 国产精品免费aⅴ片在线观看| 日本人妻伦在线中文字幕| 依依综合在线| 日韩欧美成人一区二区| 国产又粗又黄又猛| 日韩视频二区| 91精品国产综合久久久久久丝袜| 免费在线一级视频| 亚洲国产一区二区三区| 亚洲久久中文字幕| 欧美日韩一区二区三区在线电影| 精品国模在线视频| 日韩熟女一区二区| av网站一区二区三区| 手机看片日韩国产| 91欧美精品| 欧美大片在线观看一区二区| 99自拍偷拍视频| 久久激情综合| 黄色99视频| 少妇av在线| 欧美色综合影院| 国产女主播喷水高潮网红在线| 好吊一区二区三区| 成人欧美一区二区三区在线湿哒哒| 成人免费视频国产免费麻豆| 亚洲色图.com| 182午夜在线观看| 国产精品欧美三级在线观看| 2020国产精品视频| 日韩中文字幕观看| 亚洲成人av中文| 少妇伦子伦精品无吗| 小处雏高清一区二区三区| 国产精品久久久久av| 日本一区二区三区在线观看视频| 亚洲午夜电影在线观看| 在线观看中文av| 亚洲91视频| 91精品啪在线观看麻豆免费| 欧美日韩xx| 欧美精品色一区二区三区| 欧美日韩生活片| 免费成人在线网站| 天天爽天天狠久久久| 日韩毛片在线| 中文字幕不卡av| 中文字幕人妻互换av久久| 国产欧美精品一区二区色综合朱莉| 欧美日韩第二页| 欧美男同视频网| 国产精品999999| 岛国最新视频免费在线观看| 欧美色爱综合网| 国产一区在线观看免费| 国产在线一区二区| 精品视频在线观看一区二区| 高清日韩欧美| 日韩av观看网址| av国产在线观看| 欧美日韩一级二级| 一级片黄色录像| 国产做a爰片久久毛片| 91精品国产吴梦梦| 国产精品男女| 日本亚洲欧洲色| 日本电影在线观看网站| 日韩欧美久久一区| 69成人免费视频| 久久先锋资源网| 制服丝袜综合网| 欧美成人日韩| 欧美视频观看一区| 在线观看欧美| 久久久久久久久久久亚洲| 日产精品久久久久久久性色| 欧美日韩视频在线第一区 | 日韩视频免费在线观看| www.成人精品| 色婷婷一区二区| 国精品无码一区二区三区| 成人av免费网站| 国产自偷自偷免费一区 | 亚洲欧美日韩中文在线| 7777久久亚洲中文字幕| 午夜视频一区二区三区| 最近中文字幕免费| 国产v日产∨综合v精品视频| 岳毛多又紧做起爽| 亚洲精彩视频| 日本一区不卡| 成人精品毛片| 国产日韩精品电影| 一个人www视频在线免费观看| 日韩中文视频免费在线观看| 国产三级三级在线观看| 精品欧美激情精品一区| 182在线观看视频| 91免费在线视频观看| 国产又粗又长又爽又黄的视频| 噜噜噜久久亚洲精品国产品小说| 三年中国中文在线观看免费播放| 亚洲宅男一区| 国产精品麻豆免费版| 亚洲精品tv| 国产成人中文字幕| 国产污视频在线播放| 蜜月aⅴ免费一区二区三区 | 日韩欧美一级精品久久| 最好看的日本字幕mv视频大全 | 亚洲精品午夜久久久久久久| 国产精品欧美久久久久无广告| 超碰男人的天堂| 国产sm精品调教视频网站| wwwwwxxxx日本| 久久一区二区三区超碰国产精品| 亚洲 欧美 综合 另类 中字| 亚洲成人精品| 亚洲美女网站18| 欧美**字幕| 久久精品ww人人做人人爽| 精品福利一区| 91精品视频专区| 91成人在线| 国产精品白嫩美女在线观看 | 国产精品第一页在线| 国产资源在线观看入口av| 九色精品免费永久在线| 国产美女在线观看| 久久九九全国免费精品观看| 国产二区视频在线观看| 亚洲欧洲中文天堂| 久久天堂电影| 亚洲精品中文字幕女同| 欧美女v视频| 亚洲欧美中文日韩在线| 免费在线看v| 日韩精品视频在线观看免费| 高潮一区二区三区乱码| 日韩片之四级片| 国产男女猛烈无遮挡| 欧美喷潮久久久xxxxx| 中文字幕一区二区免费| 精品视频在线免费观看| 91成品人影院| 7777精品伊人久久久大香线蕉超级流畅| 又污又黄的网站| 欧美年轻男男videosbes| 一本久道久久综合无码中文| 欧美日韩国产综合久久| 一二三区在线播放| 777欧美精品| 亚洲精品一级片| 亚洲国产天堂久久综合| 巨骚激情综合| 少妇高潮久久久久久潘金莲| 激情综合闲人网| 中文字幕欧美国内| 国产精品刘玥久久一区| 欧美激情精品久久久久久大尺度 | 久久精品电影网| 好操啊在线观看免费视频| 久久久av免费| 黄色羞羞视频在线观看| 欧美壮男野外gaytube| 一二区成人影院电影网| 日本成人激情视频| 国产超碰精品| 91九色综合久久| 国产精品白丝av嫩草影院| 免费久久久一本精品久久区| 欧美影院三区| 国产资源第一页| 99精品福利视频| 国产永久免费网站| 成人一区二区三区中文字幕| 永久免费看mv网站入口78| 国产精品伦理一区二区| 成熟的女同志hd| 亚洲激情网站免费观看| 国产精品一区二区三区四| 欧美日韩精品久久久| 人妻妺妺窝人体色www聚色窝| 亚洲夜晚福利在线观看| 影音先锋男人资源在线| 日本不卡高字幕在线2019| 欧美一区一区| 久久99精品国产一区二区三区| 欧美人与牛zoz0性行为| 四虎4hu永久免费入口| 性欧美精品高清| 亚洲热在线视频| 国产日韩影视精品| 精品午夜福利视频| 欧美日韩成人激情| 天堂а在线中文在线无限看推荐| 深夜精品寂寞黄网站在线观看| 91九色国产在线播放| 成人国产精品久久久| 中文字幕亚洲影视| 黄色成人在线免费观看| 日本最新不卡在线| 国产chinese中国hdxxxx| 亚洲欧美日韩久久| 日韩综合在线观看| 日韩欧美国产电影| 免费人成在线观看播放视频 | 欧美xxxx黑人又粗又长精品| 亚洲综合五月| 欧美大尺度做爰床戏| 99久久国产综合精品女不卡| 亚洲a∨无码无在线观看| 五月婷婷综合在线| 国产超碰人人模人人爽人人添| 一区二区三区久久精品| xxxxxx欧美| 国产精品xxx在线观看www| 超碰成人久久| 岛国大片在线播放| 国产精品一区在线观看你懂的| 亚洲一级片在线播放| 欧美在线播放高清精品| 视频三区在线观看| 情事1991在线| 国产一区二区三区日韩精品 | 国产不卡视频一区| 麻豆changesxxx国产| 精品人在线二区三区| ririsao久久精品一区| 日韩欧美亚洲另类制服综合在线 | 精品国内亚洲2022精品成人| 黄色片免费在线观看视频| 国产成a人亚洲精| 国产乡下妇女做爰毛片| 亚洲国产精品热久久| 欧美sm一区| 秋霞久久久久久一区二区| 日本亚洲欧美天堂免费| 黑人操日本美女| 精品国产欧美一区二区| 国产不卡123| 欧美主播一区二区三区美女 久久精品人 | 卡通动漫精品一区二区三区| 欧美精品一区免费| 国产婷婷色一区二区三区| 在线视频播放大全| 久热99视频在线观看| 成人盗摄视频| 粗暴91大变态调教| 1区2区3区精品视频| www.我爱av| 91av在线播放| 青青草国产成人a∨下载安卓| 在线视频日韩欧美| 精品久久久国产| 3d成人动漫在线| 高清国产一区| 久久久精品五月天| 成人高潮免费视频| 精品在线观看国产| 中文成人激情娱乐网| 97超碰在线人人| 国产精品美女久久久久aⅴ| 成人1区2区3区| 国产精品69精品一区二区三区| 久久精品影视| 日韩人妻一区二区三区| 欧美一区日韩一区| 午夜影院在线观看国产主播| 五月天亚洲综合小说网| 国产成+人+日韩+欧美+亚洲 | 日韩一区二区三区四区| 亚洲优女在线| 在线观看污视频| 久久久久综合网| 亚洲av无码国产综合专区 | jizz性欧美23| 国产又大又黄又猛| 欧美日韩色婷婷| 色在线视频网| 中文字幕在线亚洲三区|