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

云原生小技巧 : 如何自動化發布 CLI 工具?

云計算 云原生
在自動化構建的世界中,編寫一個穩定且跨平臺兼容的構建腳本是關鍵。Golang 提供了強大的跨平臺構建能力,而 go build 命令是實現這一目標的核心。

在云原生時代,CLI 工具已成為開發者日常工作中不可或缺的一部分。然而,將開發好的 CLI 工具分享給大家使用,如果僅依賴手動發布,不僅效率低,且易出錯,特別是在處理多架構和多平臺兼容性時尤為明顯。

那么,我們如何才能實現 CLI 工具的自動化發布呢?本文旨在探討這一問題,并提出一套實用的解決方案。

在接下來的分享中,我將主要以 Golang 舉例。需要指出的是,我們將討論的自動化構建和發布的原則是通用的,適用于所有編程語言。因此,無論大家使用哪種語言編寫工具,這些實踐都將具有重要的參考價值。

編寫構建腳本

在自動化構建的世界中,編寫一個穩定且跨平臺兼容的構建腳本是關鍵。Golang 提供了強大的跨平臺構建能力,而 go build 命令是實現這一目標的核心。例如:

CGO_ENABLED=0 GOOS=darwin GOARCH=amd64 go build -o fooctl-darwin-amd64 -v

這個命令示例突顯了 Golang 在生成特定平臺和架構二進制文件方面的靈活性。在構建腳本中,我們需要進一步擴展這種靈活性,以支持多平臺構建需求。

  1. 參數化和默認值設置:

OUTPUT_DIR 和 BINARY_NAME 的設定允許用戶自定義輸出目錄和二進制文件的名稱,加強了腳本的通用性。

BUILDPATH 變量用于指定構建路徑,是腳本運行的必需參數,保證了構建過程的穩定性。

  1. 跨平臺和架構支持:
  • 通過設置 BUILD_GOOS 和 BUILD_GOARCH 變量,腳本能夠靈活地處理不同操作系統和架構的構建需求,增加了適用性。
  • 這些變量的默認值通過 go env 獲取,但也可以通過參數覆蓋,提供了靈活性。
  1. 動態輸出路徑:
  • OUT 變量根據是否為發布版(IS_RELEASE),動態調整輸出文件的命名和路徑。這樣的設計使得腳本能夠根據不同的使用場景(如開發測試或正式發布)輸出不同格式的文件名。
  1. 特殊情況處理:
  • 對 Windows 平臺的特殊處理(.exe 擴展名)是必要的,因為 Windows 系統下的可執行文件通常需要這個擴展名。

gobuild.sh 腳本

下面的 gobuild.sh 腳本是對上述原則的實踐,將跨平臺構建的復雜性轉化為簡單的命令行操作:

OUTPUT_DIR=${4:-"bin"}
BINARY_NAME=$(basename ${1})
BUILDPATH=./${1:?"path to build"}

BUILD_GOOS=${GOOS:-$(go env GOOS)}
BUILD_GOARCH=${GOARCH:-$(go env GOARCH)}
GOBINARY=${GOBINARY:-go}
LDFLAGS=$(version::ldflags)

if [ $# -ge 2 ] && [ -n $2 ]; then
  BUILD_GOOS=$2
fi

if [ $# -ge 3 ] && [ -n $3 ]; then
  BUILD_GOARCH=$3
fi

OUT=${OUTPUT_DIR}/${1:?"output path"}
if [ "${IS_RELEASE:-0}" == "1" ]; then
    OUT="${OUTPUT_DIR}/${BINARY_NAME}-${BUILD_GOOS}-${BUILD_GOARCH}"
    if [ "${BUILD_GOOS}" == "windows" ]; then
        OUT="${OUTPUT_DIR}/${BINARY_NAME}-${BUILD_GOOS}-${BUILD_GOARCH}.exe"
    fi
fi

CGO_ENABLED=0 GOOS=${BUILD_GOOS} GOARCH=${BUILD_GOARCH}${GOBINARY} build \
    -ldflags="${LDFLAGS}" \
    -o "${OUT}" \
    "${BUILDPATH}"

這個腳本不僅適應了多平臺和多架構的需要,還提供了足夠的靈活性和可配置性,以適應不同的構建場景。

配合 Makefile 實現全自動化構建

進一步的,結合 Makefile 可以將構建過程自動化,提升效率:

.PHONY: build-binaries

BUILD_SCRIPT_PATH := ./hack/gobuild/gobuild.sh
# 列出了需要構建的所有二進制文件,可管理多個項目的構建過程
BINARIES := cmd/fooctl cmd/barctl

# 通過 ALLPLATFORMS 變量,我們定義了一系列目標平臺和架構組合
ALLPLATFORMS := linux/amd64 linux/arm64 darwin/amd64 darwin/arm64 windows/amd64 windows/arm64

# 構建所有組合
build-binaries: $(foreach bin,$(BINARIES),$(foreach plat,$(ALLPLATFORMS),build-$(bin)-$(plat)))

# 構建規則模板
# 這個模板可以生成特定于每個二進制文件和平臺組合的構建規則。
define BUILD_template
build-$(1)-$(2):
    IS_RELEASE=1 $$(BUILD_SCRIPT_PATH) $(1) $$(subst /, ,$$(word 1,$$(subst -, ,$(2)))) $$(subst /, ,$$(word 2,$$(subst -, ,$(2))))
endef

# 生成構建規則
# 我們自動為每個二進制文件和平臺組合生成了具體的構建規則。
$(foreach bin,$(BINARIES),$(foreach plat,$(ALLPLATFORMS),$(eval $(call BUILD_template,$(bin),$(plat)))))

通過這個 Makefile,即使同時構建 fooctl 和 barctl 這兩個 CLI Tool 也變得異常簡單。一條簡單的命令 make build-binaries 就能觸發整個構建流程,大大減少了人工干預,確保了構建過程的一致性和可靠性。

小結

通過上述詳細的構建腳本和 Makefile 配置,我們可以看到,現代軟件開發中自動化構建的強大功能和必要性。這種方法不僅提升了構建效率,也增強了軟件的質量和穩定性。在云原生時代,自動化構建已成為提高開發團隊效率和產品可靠性的關鍵策略。

Release CLI tool on GitLab CI/CD

在構建腳本準備完畢后,接下來我們就可以將其集成到 CI 系統了,下面我以 GitLab CI/CD 為例。

在 GitLab CI/CD 的核心,是一系列定義明確的作業(Jobs),它們在代碼提交時自動執行。對于完整的持續集成來說,這些作業通常包括構建(build)、測試(test)、代碼審查(lint)等步驟。但在本文中,我們將重點關注自動發布流程。

觸發自動發布的條件

自動發布流程是基于 Git 標簽創建的。當開發者推送一個新標簽到倉庫時,GitLab CI/CD 會捕捉到這一事件,并啟動預定義的發布流程。

rules:
  - if: $CI_COMMIT_TAG

這個條件確保只有在創建新標簽時,才會啟動后續的構建、上傳和發布作業。

Release Jobs

步驟一:構建二進制文件,在 build-binaries 階段,CI 會構建針對不同平臺和架構的 CLI 工具二進制文件,確保構建過程的一致性和可重復性。

步驟二:上傳構建產物,待構建完成后,upload 階段負責將二進制文件上傳到 GitLab 的包管理器或其他存儲位置。這為后續的發布提供了必要的資源。

步驟三: 發布到 GitLab,最后,在 release 階段,CI 使用 release-cli 工具自動創建發布,并將構建的二進制文件作為發布的資產。

Create releases from .gitlab-ci.yml

下面的 .gitlab-ci.yml 腳本是對上述發布流程的實踐:

stages:
  ...
  - build-binaries
  - upload
  - release
  
build-binaries:
  stage: build-binaries
  image: golang:1.21.1
  rules:
    - if: $CI_COMMIT_TAG
  script:
    - echo "Building binaries for all platforms and architectures..."
    - make build-binaries
  artifacts:
    paths:
      - bin

upload:
  stage: upload
  image: curlimages/curl:latest
  rules:
    - if: $CI_COMMIT_TAG
  script:
    - echo "Uploading binaries..."
    - >
      for binary in ./bin/*; do
        curl --header "JOB-TOKEN: $CI_JOB_TOKEN" \
             --upload-file $binary \
             "${PACKAGE_REGISTRY_URL}/$(basename $binary)";
      done
    
release:
  stage: release
  image: registry.gitlab.com/gitlab-org/release-cli:latest
  rules:
    - if: $CI_COMMIT_TAG
  script:
    - echo "Creating a release for $CI_COMMIT_TAG"
    - |
      ASSET_LINKS=""
      for binary in ./bin/*; do
        LINK="{\"name\":\"$(basename $binary)\", \"url\":\"${PACKAGE_REGISTRY_URL}/$(basename $binary)\"}"
        ASSET_LINKS="${ASSET_LINKS},${LINK}"
      done
      ASSET_LINKS="[${ASSET_LINKS:1}]"
    - >
      release-cli create \
        --name "Release $CI_COMMIT_TAG" \
        --tag-name $CI_COMMIT_TAG \
        --description "Created using the release-cli: $CI_COMMIT_REF_NAME-$CI_JOB_ID" \
        --ref $CI_COMMIT_SHA \
        --assets-link "$ASSET_LINKS"

以上示例將會構建 CLI 工具二進制文件,并將其上傳到 Gitlab Release 頁面。用戶從 Gitlab  Release 頁面查找并下載適合其平臺的二進制包即可。

圖片圖片

有關詳細的 GitLab CI 流程,可以參考項目:https://gitlab.com/lqshow/clireleaseautomator

小結

這個流程大大簡化了 CLI 工具的發布過程,使得開發者能夠專注于代碼開發,而不是后續的構建和發布環節。自動化這些步驟意味著每次發布都是快速、一致且無誤的,從而提高了軟件的整體質量和可靠性。

Release CLI tool use GoReleaser

不難發現,上述整個流程相對來說還是比較繁瑣的,準備腳本的過程也比較復雜,現在我將介紹一個讓這個過程不那么痛苦的工具 GoReleaser[1]。

它是一個變革性的工具,特別是對于以 Golang 編寫的項目。相比于傳統的手動配置和腳本編寫,GoReleaser 提供了一種更高效和簡潔的自動化發布方法。

GoReleaser 的優勢

GoReleaser 的設計理念是“一次配置,處處運行”,它通過一個單一的配置文件,即可控制整個發布流程。這個配置文件定義了如何構建二進制文件、如何打包它們、如何處理版本信息以及如何發布到各種平臺。具體來說,GoReleaser 的優勢包括:

  1. 簡化的構建過程:通過預定義的模板,GoReleaser 能夠自動構建針對不同平臺和架構的二進制文件,無需編寫復雜的腳本。
  2. 靈活的打包和發布:支持多種格式的打包選項,以及與主要代碼托管平臺的無縫集成。
  3. 高度可配置:從構建選項到發布設置,GoReleaser 允許高度定制化,以滿足不同項目的需求。

配置和使用 GoReleaser

使用 GoReleaser 的第一步是在項目的根目錄下創建 .goreleaser.yml 配置文件。通過 goreleaser init 命令可快速生成初始配置。這個文件涵蓋了構建、打包和發布的全過程。

在配置好 .goreleaser.yml 之后,我們需要調整 .gitignore 加上 dist,因為 goreleaser 會默認把編譯編譯好的文件輸出到 dist 目錄中。

接下來我們看個例子:

# .goreleaser.yml 示例
builds:
  - id: fooctl
    binary: fooctl
    main: ./cmd/fooctl
    ldflags:
    - -s -w
    - -X gitlab.com/lqshow/clireleaseautomator-with-goreleaser/version.gitVersinotallow={{.Version}}
    - -X gitlab.com/lqshow/clireleaseautomator-with-goreleaser/version.gitCommit={{.ShortCommit}}
    goos:
      - linux
      - darwin
      - windows
    goarch:
      - amd64
      - arm64
  - id: barctl
    binary: barctl
    main: ./cmd/barctl
    ldflags:
    - -s -w
    - -X gitlab.com/lqshow/clireleaseautomator-with-goreleaser/version.gitVersinotallow={{.Version}}
    - -X gitlab.com/lqshow/clireleaseautomator-with-goreleaser/version.gitCommit={{.ShortCommit}}
    goos:
      - linux
      - darwin
      - windows
    goarch:
      - amd64
      - arm64

這個簡單清晰的配置文件,事實上包含了我之前介紹的兩個模塊,相當于省去了寫 shell 腳本和 Makefile 文件,使整個過程更加靈活和高效。

GitLab CI 中的 GoReleaser 集成

在 .gitlab-ci.yml 文件中,我們只需要定義一個簡單的 release 作業,對了,別忘了還需要在 CI/CD 里配置一個 GTILAB_TOKEN  變量:

stages:
  - release

release:
  stage: release
  image:
    name: goreleaser/goreleaser
    entrypoint: ['']
  only:
    - tags
  variables:
    GIT_DEPTH: 0
    GITLAB_TOKEN: $GITLAB_TOKEN
  script:
    - goreleaserrelease--clean

只要查看運行日志,其實我們就會發現,GoReleaser 自動執行后,它包含了構建、上傳和發布的整個流程。

具體詳情:https://gitlab.com/lqshow/clireleaseautomator-with-goreleaser/-/jobs/5669211977

責任編輯:武曉燕 來源: Cloud Native 101
相關推薦

2013-07-23 09:19:53

云服務器遷移云遷移云遷移工具

2023-11-27 13:41:00

Kubernete本地調試

2022-11-24 13:43:40

2023-02-07 08:11:15

2024-02-04 09:53:27

2018-08-27 07:52:03

云計算工具云遷移

2012-06-25 09:35:19

云計算自動化

2022-08-08 07:35:37

云測試工具云存儲云計算

2021-06-22 10:31:38

云計算自動化云原生

2019-08-22 09:25:54

云安全云原生Fortinet

2019-10-30 14:47:05

工具代碼開發

2020-03-10 10:06:08

小程序微信開發

2013-07-02 10:45:38

2020-08-31 22:05:53

Kubernetes微服務系統

2012-09-17 13:21:22

iOSAndroid自動化測試工具

2017-11-07 12:33:39

云自動化公有云編排

2020-07-24 09:52:55

自動化ITCIO

2020-02-27 10:11:11

自動化IT安全

2017-12-17 21:58:18

2014-11-12 09:24:00

點贊
收藏

51CTO技術棧公眾號

99精品国产一区二区三区不卡| 9l视频自拍九色9l视频成人| 国产视频亚洲色图| 国产专区精品视频| 欧美视频www| 亚洲精品观看| 色婷婷综合久久久中文一区二区| 免费看污久久久| 在线观看中文字幕码| 欧美日本三区| 亚洲男人天堂网站| 色乱码一区二区三区在线| 最爽无遮挡行房视频在线| 国产成人高清视频| 国产精彩精品视频| 黄色a级片在线观看| 思热99re视热频这里只精品 | 美脚丝袜一区二区三区在线观看| 97人妻一区二区精品视频| 欧美激情理论| 亚洲精品av在线| 依人在线免费视频| 国产直播在线| 亚洲女与黑人做爰| 日韩av不卡播放| 亚洲黄色一级大片| 免费在线视频一区| 色综合五月天导航| 香蕉久久久久久久| 偷拍亚洲精品| 日韩精品一区二区三区中文精品 | 亚洲av成人片无码| 亚洲tv在线| 日韩欧美一区二区在线| 日韩专区第三页| 亚洲搞黄视频| 久久久久久夜精品精品免费| 爱情岛论坛亚洲入口| 在线观看免费黄色小视频| 国产亚洲亚洲| 欧美夫妻性生活xx| 亚洲一二三四五六区| 免费欧美视频| 日韩成人在线视频网站| 精品国产aⅴ一区二区三区东京热 久久久久99人妻一区二区三区 | 欧美乱大交xxxxx潮喷l头像| 欧美r级在线| 国产人成一区二区三区影院| 91成人免费在线观看| 在线观看黄色国产| 久久se精品一区二区| 国产精品va在线播放| 国产专区第一页| 亚洲毛片在线| 97色在线观看| 日韩福利片在线观看| 韩日精品在线| 欧美激情手机在线视频 | 国产亚洲精品美女| 强伦人妻一区二区三区| 私拍精品福利视频在线一区| 日韩精品欧美激情| 野外性满足hd| 国产成人av| 亚洲香蕉av在线一区二区三区| 又黄又色的网站| 亚洲一二av| 精品久久国产老人久久综合| 欧美午夜精品一区二区| 136导航精品福利| 精品国产一区二区亚洲人成毛片| 久久出品必属精品| 一区中文字幕| 欧美精品一区二区三区在线播放| 日韩久久久久久久久久久| 国产日韩一区二区三免费高清| 欧美日韩亚州综合| 日韩av.com| 亚洲啊v在线免费视频| 欧美成人三级电影在线| 毛茸茸free性熟hd| 免费黄色成人| 日韩小视频在线| 欧美在线视频第一页| 亚洲视频中文| 欧洲亚洲免费在线| 中文天堂在线视频| 国产伦精品一区二区三区免费| 91精品久久久久久蜜桃| 人妻偷人精品一区二区三区| 91年精品国产| 亚洲精品成人久久久998| 91亚洲天堂| 精品久久中文字幕久久av| 久草综合在线观看| 国产精品成人3p一区二区三区| 日韩欧美在线综合网| 一级国产黄色片| 日韩精品不卡一区二区| 欧美黑人性视频| 日韩精品一区二区亚洲av| 免费成人av资源网| 国产91精品入口17c| 免费在线超碰| 亚洲激情在线激情| 成人一级片网站| 成人国产精品久久| 亚洲欧美国产日韩天堂区| 欧美风情第一页| av成人黄色| 成人xxxx视频| 欧美日韩视频精品二区| 亚洲乱码一区二区三区在线观看| 国内精品视频一区二区三区| yiren22亚洲综合| 亚洲成人精品久久久| 亚洲欧洲精品在线观看| 精品黄色免费中文电影在线播放| 樱花影视一区二区| 爆乳熟妇一区二区三区霸乳| 中文无码日韩欧| 中文字幕精品网| 日韩精品一卡二卡| 黑人巨大精品欧美黑白配亚洲| 国产美女在线精品免费观看| 天堂а√在线资源在线| 欧美性猛交xxxx免费看漫画| 中文字幕人妻无码系列第三区| 欧洲亚洲视频| 欧美国产在线电影| 91禁在线观看| 国产欧美一区二区三区在线看蜜臀| 粉嫩av一区二区三区天美传媒| 不卡一二三区| 亚洲精品美女久久久| 久久久久久久久久久久久女过产乱| 亚洲中午字幕| 国产精品一区视频网站| 性欧美ⅴideo另类hd| 欧美男男青年gay1069videost| 国产熟女高潮一区二区三区| 欧美aⅴ99久久黑人专区| 亚洲综合偷拍欧美一区色| 国产精品12345| 自拍偷拍亚洲| 在线不卡国产精品| 国产区在线观看视频| 国产精品综合一区二区三区| 亚洲激情电影在线| 日韩成人影音| 亚洲男人天堂手机在线| 免费在线不卡视频| fc2成人免费人成在线观看播放 | 中韩乱幕日产无线码一区| 亚洲国产欧美一区| 国语对白一区二区| 国产成人av在线影院| 成年丰满熟妇午夜免费视频| 国产精品视频一区二区三区综合| 伊人久久综合97精品| 久久久精品视频网站| 久久伊人中文字幕| av免费中文字幕| 久久不见久久见中文字幕免费| 国内精品久久久久伊人av| 国产香蕉在线观看| 性做久久久久久| 亚洲国产精品无码久久久久高潮 | 亚洲第一网中文字幕| 国产一级做a爰片在线看免费| 精品一区二区精品| 91成人在线视频观看| 秋霞一区二区| 欧美黄网免费在线观看| 风流老熟女一区二区三区| 五月天欧美精品| 少妇真人直播免费视频| 青青草91视频| av不卡在线免费观看| 天堂精品在线视频| 91国产中文字幕| 深夜福利在线观看直播| 色悠悠亚洲一区二区| 在线观看国产成人av片| 香蕉免费毛片视频| 久久久91精品国产一区二区精品| 精品99在线视频| 免费国产自久久久久三四区久久| 国产精品扒开腿爽爽爽视频| 日本美女高清在线观看免费| 欧美成人一区二区三区在线观看| 久久久久久久久精| 久久综合国产精品| 日韩肉感妇bbwbbwbbw| 影视一区二区| 久久精品国产第一区二区三区最新章节| 九色porny丨入口在线| 在线视频亚洲欧美| 亚洲乱码国产乱码精品精软件| 五月天一区二区| 操她视频在线观看| 99re成人精品视频| www.久久91| 亚洲精品1区| 在线视频精品一区| 久9re热视频这里只有精品| 国产精品久久久久久久app| 午夜小视频在线观看| 亚洲图片欧洲图片av| 99久久亚洲精品日本无码| 欧美日韩国产在线播放| 91麻豆精品久久毛片一级| 岛国一区二区三区| 欧美三级午夜理伦三级富婆| 99视频在线精品国自产拍免费观看| 日韩av电影免费播放| 秋霞午夜一区二区三区视频| 国产精品成人av性教育| 俄罗斯一级**毛片在线播放| 中文字幕欧美国内| 四虎国产精品永远| 精品久久久久久久久久久久久久久 | 免费国偷自产拍精品视频| 一区二区三区四区五区精品视频| 日韩欧美激情一区二区| 老牛国内精品亚洲成av人片| 亚洲va欧美va国产综合剧情| 成人影院入口| 国a精品视频大全| 成人无遮挡免费网站视频在线观看| 日韩成人在线免费观看| 亚洲欧美激情另类| 欧美一级夜夜爽| 在线免费看av片| 日韩欧美国产骚| 一区二区三区免费高清视频| 国产精品高潮久久久久无| 人妻丰满熟妇av无码久久洗澡| 精油按摩中文字幕久久| 美女黄色片视频| 国产精品久久久久久久久久妞妞| 黄色一级片av| 99久久国产综合精品成人影院| 精品在线视频一区二区| 盗摄牛牛av影视一区二区| 亚洲一区中文字幕在线观看| 精品三级在线| 国产精品久久久久久久av大片| 国产在线天堂www网在线观看| 欧美成年人视频网站| 免费av网站在线看| 日韩在线免费视频| 99视频在线观看地址| 国产一区二区三区免费视频| 国模精品一区二区| 国产亚洲一区二区在线| 国产日产精品久久久久久婷婷| 亚洲国产97在线精品一区| 成人免费视频国产| 亚洲福利影片在线| 天天操天天干天天干| 日韩激情av在线免费观看| 日本一区视频| 亚洲一区二区黄| av男人的天堂在线| 日韩视频永久免费观看| av网站免费在线观看| 欧美精品videos另类日本| wwwww亚洲| 91成人在线视频| 成人欧美大片| 国产精品久久久久久久7电影| 欧美大片免费| 国产精选久久久久久| 免费看一区二区三区| 成人黄动漫网站免费| 欧美成人一区在线观看| 日本一区二区三区在线视频 | 日韩一区二区三区视频在线观看| 国产尤物在线观看| 日韩欧美中文字幕公布| 午夜av免费观看| 国产亚洲一区二区精品| 成人看片免费| 久久久在线免费观看| 国产精品粉嫩| 成人免费网视频| 国产精品午夜av| 日本亚洲导航| 中文在线播放一区二区 | 免费黄色网址在线观看| 欧美日韩国产成人在线| 奇米777日韩| 成人中文字幕+乱码+中文字幕| 日韩激情综合| 欧美日韩精品一区| 一级毛片免费高清中文字幕久久网| 成人高清dvd| 久久av一区| 日韩视频在线观看一区二区三区| 国产福利不卡视频| 一区二区精品免费| 一区二区三区在线视频观看| 区一区二在线观看| 欧美大片一区二区| 色综合久久影院| 2019中文字幕在线观看| 国产精品高清一区二区| 欧美日韩在线精品| 黄色成人av网站| 一本色道久久亚洲综合精品蜜桃| 粉嫩欧美一区二区三区高清影视| 在线免费看黄视频| 亚洲永久免费视频| 7777久久亚洲中文字幕| 精品亚洲一区二区三区四区五区 | 深夜福利亚洲| 久久伊人一区| 黄色综合网站| 一级黄色录像在线观看| 91免费版在线看| 久久久久久国产精品视频| 欧美精品高清视频| 浮生影视网在线观看免费| 性欧美亚洲xxxx乳在线观看| 国内不卡的一区二区三区中文字幕| 免费看国产精品一二区视频| 国产真实久久| 免费观看黄网站| ●精品国产综合乱码久久久久| 在线观看日韩中文字幕| 亚洲成人久久久| 污视频在线免费观看网站| 国产欧美一区二区三区四区| 国产日韩视频在线| 久久精品免费一区二区| 成人av在线观| 私库av在线播放| 制服丝袜日韩国产| 男人天堂久久久| 国产欧美一区二区三区四区| 欧美呦呦网站| 日本熟妇人妻中出| 久久精品一区二区三区不卡牛牛 | 91精品国产高清| 国产91精品入| 久久国产精品网| 成人国产亚洲欧美成人综合网| 日韩欧美综合视频| 91精品国产综合久久婷婷香蕉| www.av在线| 国产精品免费观看在线| 精品黄色一级片| 天天爽天天爽夜夜爽| 国产精品入口麻豆九色| 亚洲专区第一页| 久久精品99国产精品酒店日本| 97欧美成人| 一本色道久久99精品综合| 日韩1区2区日韩1区2区| 女教师淫辱の教室蜜臀av软件| 色吊一区二区三区| 第九色区av在线| 91精品国产自产在线观看永久| 色综合天天爱| 91蝌蚪视频在线| 亚洲综合一区二区三区| 天天干天天草天天射| 欧美在线播放视频| 日韩电影免费网站| 男插女视频网站| 精品福利免费观看| 国产露出视频在线观看| 国产主播精品在线| 亚洲国产婷婷| 女女互磨互喷水高潮les呻吟 | 日韩中文娱乐网| 成人久久精品| 中国丰满熟妇xxxx性| 2024国产精品| 亚洲一区中文字幕永久在线| 九九久久综合网站| 亚洲激情77| 日韩av影视大全| 色综合天天综合网天天狠天天| 伦理片一区二区三区| 成人精品aaaa网站| 亚洲三级电影在线观看| 三年中国中文观看免费播放| 欧美一区二区三区视频免费| www.九色在线| 亚洲午夜久久久影院伊人| 国产999精品久久久久久 | 日本高清视频一区二区| 国产在线激情视频| 久久超碰亚洲| 国产一区二区三区观看| 国产一级片毛片| 欧美精品日韩www.p站| 蜜桃a∨噜噜一区二区三区|