999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

一種面向數值模擬軟件的持續集成平臺

2020-09-26 11:50:38單雅輝劉青凱楊章田鴻運鄒勇剛
計算機輔助工程 2020年3期

單雅輝 劉青凱 楊章 田鴻運 鄒勇剛

摘要: 隨著軟件復雜度的增加和交付需求的變化,快速集成和自動部署成為高性能數值模擬軟件推廣應用的瓶頸。為滿足軟件構建和發布的差異化需求,簡化從用戶需求到軟件發布的工作流程,基于Jenkins設計持續集成平臺,實現軟件靜態審查、編譯、測試和發布流程的自動化,全面記錄軟件構建日志和測試結果。利用Docker技術將構建環境容器化,實現環境的快速搭建和配置管理,滿足多樣化目標環境需求。該平臺的實際應用效果顯示,基于該平臺的產品發布周期相比之前縮短約75%,可極大簡化軟件安裝和部署難度。

關鍵詞: 持續集成; 軟件測試; 軟件發布; 自動部署

中圖分類號: TP311.56 ? 文獻標志碼: B

Abstract: With the software complexity increasing and the delivery requirements changing, rapid integration and automatic deployment become the bottleneck in the application of high-performance numerical simulation software. In order to meet the differentiated requirements of software construction and release, the workflow from user requirements to software distribution is simplified, and then the continuous integration platform based on Jenkins is designed to realize the automation of software static review, compilation, testing and release process, in which the software build logs and test results can be recorded comprehensively. The Docker technology is used to containerize the environment, and then the rapid construction and configuration management of the environment can be realized to meet the needs of diversified target environment. The application effect of the platform shows that the product distribution cycle based on this platform is about 75% shorter than before, which can greatly simplify the difficulty of software installation and deployment.

Key words: continuous integration; software testing; software release; automatic deployment

0 引 言

數值模擬軟件是一類特殊的計算機應用軟件,其服務于科學計算,以再現、發現和預測真實客觀系統運行規律和演化特征的數值模擬為主要目標。[1]目前,數值模擬軟件已廣泛應用于國家重大領域,包括全球氣候預測、地球資源環境檢測、核能開發利用、電磁環境和信息安全等。

隨著數值模擬軟件應用范圍不斷擴大,數值模擬軟件的研發呈現以下3個方面特征[2]:(1)應用需求日趨復雜,軟件規模不斷增加,代碼行數由過去的幾千行發展到數萬行甚至數十萬行;(2)高效能計算共性技術不斷發展,基于編程框架與離散中臺的研發模式日益普及,使得軟件架構趨于層次化和模塊化,軟件集成復雜度隨之增加;(3)軟件運行環境多樣、交付部署頻繁,為保證求解問題的規模,數值模擬軟件在計算實際應用問題時需要高性能計算機支撐,但是不同高性能計算機在硬件架構、編譯器、MPI、作業調度等方面存在較大差別,這種運行環境差異會對數值模擬軟件的計算結果精度、性能表現等產生干擾,嚴重情況下甚至導致程序無法正常運行,這對軟件的可移植性、部署靈活性提出更高的要求。

因此,在數值模擬軟件研發過程中,如何降低集成和部署難度、滿足產品化和應用推廣需求,成為急需解決的問題。

本文結合高性能數值模擬軟件研發過程中的實際需求,設計并實現一種適用于高性能數值模擬軟件研發的持續集成平臺;介紹數值模擬軟件交付過程中面臨的實際問題,對比分析幾款典型的軟件構建工具;介紹持續集成平臺的操作流程和設計方案,闡述實施過程中的關鍵技術點和具體實施過程。

1 數值模擬軟件交付過程面臨的問題和挑戰 ?數值模擬軟件的交付過程涉及環境構建、依賴管理解析、軟件編譯、測試和部署等內容,如果僅涉及依賴關系處理和編譯,業內一些構建工具(如CMake)可以有效支撐,但對于整個交付過程來說,業內流行的構建工具暫時不能滿足需求。數值模擬軟件交付過程具有以下幾個方面的需求特征。

(1)生產環境的有效配置管理。數值模擬軟件的研發和使用大多在Linux系統環境下進行。為保證軟件安裝包的可用性,生產環境需要與用戶環境保持一致,通常采用搭建虛擬機的方式模擬用戶環境。生產環境搭建過程中需完成操作系統安裝、網絡配置、軟件驅動、編譯器安裝和環境配置等工作。該過程往往無法被記錄,配置人員的某個錯誤操作極可能造成軟件編譯部署失敗,并且難以定位錯誤的位置。因此,生產環境最好能夠自動創建,并且每次環境配置的變更都能夠被記錄下來。

(2)編譯語言與目標存在差異。在層次化研發模式中,按照軟件的不同功能定位,數值模擬軟件分為編程框架、離散中臺和應用軟件3類。數值模擬軟件趨于模塊化,各模塊研發相對獨立,模塊或軟件之間依賴關系復雜。不同類型的軟件依賴關系不同,編譯目標也會不同。此外,數值模擬軟件大多基于C、C+ +、Fortran等編程語言混合編寫,程序的編譯方式也會存在一定的差異。因此,需要構建一套不僅能夠支持不同程序語言、編譯方式,而且能夠自動解析、有效處理依賴關系的工具。

(3)跨平臺兼容性測試。在通常情況下,軟件集成、開發和測試等過程是在開發環境下完成的,之后才會向生產環境部署。對于數值模擬軟件來說,程序對編譯和運行時的環境依賴較為敏感。當生產環境與開發環境不一致時,經常引起依賴庫版本不匹配、接口不兼容等問題,導致程序出現編譯或運行錯誤。解決這類問題一般需要對程序進行適配性修改,然后重新提請測試和部署,但是這種方式沒有在目標環境中進行充分測試,無法保證程序的正確性。解決方案是將生產環境下的測試、部署和發布活動納入到數值模擬軟件研發過程中,在開發的同時完成生產環境的測試,及時發現軟件在生產環境中遇到的問題或存在的缺陷。

(4)一鍵式軟件安裝部署。完成軟件構建后,將編譯生成的二進制可執行程序、用戶文檔及其依賴的第三方庫打包后供用戶使用。由于用戶環境配置不同,需要手工修改配置文件中的目錄結構和環境配置信息,解析依賴關系與可執行程序鏈接庫,并通過執行程序檢查可用性。軟件越復雜,依賴關系越復雜,安裝部署所需時間越長,而且越容易出現錯誤。這對用戶來說并不友好,影響程序的推廣應用。因此,構建工具應該可以支持用戶環境下依賴關系、安裝與配置環境變量的自動處理,簡化用戶部署難度。

(5)全面記錄構建日志和測試結果。數值模擬軟件開發涉及數學、物理、計算機等多學科領域,開發人員之間的知識背景不同,對軟件的理解差別很大。在軟件構建和測試過程中發生錯誤時,無法快速定位錯誤是由環境配置、程序自身還是第三方依賴關系所引入,聯合調試難度大。因此,持續集成平臺需要將環境配置信息、編譯日志和測試結果全面記錄下來,并保存錯誤現場,便于開發人員分析和定位錯誤。

為解決以上問題,調研幾款業內知名的軟件構建和部署工具,其功能對比見表1。

Make是經典的構建工具之一,目前仍然活躍在軟件開發領域,但是當應用程序復雜程度和軟件依賴關系增加時,Makefile維護成本提升,導致Make更加難以調試。CMake是開源跨平臺構建工具,能夠處理混合語言編譯,但暫不支持構建環境和自動解析依賴等功能。MSBuild、Ant、Maven和Gradle的應用領域主要針對Java或.NET語言,其中Gradle功能最為完善,可支持依賴解析、生命周期管理和構建環境管理等功能[3-8],但其支持語言受限,無法滿足數值模擬領域多種編程語言混合編譯的需求。

目前,尚未發現單一的工具軟件可以完全符合上述高性能數值模擬軟件構建和部署的需求,因此,針對數值模擬軟件交付過程中存在的問題,借鑒DevOps思路[9],設計并實現一套面向數值模擬軟件的持續集成平臺。

2 持續集成與測試平臺

為解決前文提出的數值模擬軟件構建和部署過程中存在的問題,設計實現一種面向高性能數值模擬軟件的持續集成平臺。持續集成是一種軟件開發 ? 實踐活動,通過單元測試和集成測試,將本地開發創建的代碼更改提交到代碼倉庫中,觸發自動化的軟件構建操作,包括代碼編譯、靜態代碼審查、測試覆蓋率檢查、自動化驗收測試和軟件安裝包發布等,驗證更改是否滿足質量和正確性的要求,從而盡早地發現集成錯誤。[10]該平臺主要解決以下關鍵問題:(1)簡化從用戶需求到軟件產品發布的工作流程,盡早發現程序缺陷;(2)滿足多樣化目標環境需求,實現環境的快速搭建與配置管理;(3)有效管理軟件依賴關系,增強軟件構建部署能力。

2.1 關鍵技術點和系統特色

2.1.1 自動化通用流程設計

針對傳統工具系統構建流程繁瑣、用戶需求響應不及時的問題,設計一套自動化軟件持續集成流程,盡量減少人工干預。該流程涉及產品發布的整個工作流,支持代碼靜態分析、編譯部署、驗收測試、測試覆蓋率檢測和產品發布等過程的自動化,其工作流程見圖1。

該流程的輸入是軟件源代碼,輸出是二進制安裝包。該流程的基礎是通過版本控制工具統一管理源代碼,制定規范進行分支、目錄和權限管理。當研發人員收到用戶的需求或缺陷反饋后,對本地代碼進行修改,并完成本地單元級、模塊級測試驗證后,將源代碼提交到版本管理系統。當版本管理系統檢查到源代碼倉庫的狀態發生變化后,自動或定時觸發集成服務器進入構建過程。持續集成系統通過任務形式將源代碼分發到指定從節點(按環境需求)進行系統構建和測試,具體包括代碼靜態審查、自動化測試、覆蓋率測試等。測試通過后將軟件編譯成二進制安裝包,并將安裝包通過文件傳輸工具上傳至產品發布平臺或部署到目標機,通知用戶下載、安裝軟件產品。如果系統構建失敗,則通過網頁的形式將報錯日志反饋到控制臺輸出界面,供研發人員快速跟蹤定位錯誤。

2.1.2 基于模板快速配置構建環境

滿足多樣化目標環境需求的關鍵是實現構建環境的自動化搭建,并對環境進行有效的版本控制。對虛擬化技術的前期調研發現,應用容器引擎技術能夠將構建環境搭建的工作量最小化。

應用容器引擎將所需軟件及其依賴關系包進一個可移植的容器中,支持向任何現有的Linux機器部署和遷移。容器是一組能夠隨處運行的單元,對應用程序及其關聯性進行隔離,運行時相互之間不影響。根據特定的用戶環境需求,容器引擎可通過環境構建腳本快速創建容器環境。構建腳本將全部環境配置命令組合形成文件模板,通過一條簡單的環境構建命令即可實現容器化構建環境的快速生成和批量創建。

與虛擬機相比,容器化環境更加輕量化。當出現新的構建環境需求時,只需要簡單修改模板文件,即可實現快速定制,環境搭建時間由原來的幾小時縮短為幾分鐘。此外,這種方式便于開發人員與測試人員之間溝通迭代,通過交換環境構建腳本可保證軟件執行環境的一致性。

2.1.3 聯動構建機制管理依賴關系

在數值模擬軟件研制過程中,存在2種較為常見的依賴關系,即庫依賴和組件依賴。庫依賴是指程序開發過程中所依賴的第三方軟件包,例如編譯器、MPI和數學庫等,這些軟件一般很少更新。組件依賴應用程序所依賴的部分程序塊通常是自主研發的,需要頻繁更新。[10]

對于庫依賴來說,由于不同軟件所用的第三方軟件包有所差異,在集成或部署時經常遇到版本沖突、接口不兼容等問題。通過對所有產品庫依賴關系進行梳理,基于軟件包管理工具建立統一的庫管理模式,可形成一套根據構建環境分類的內部發布平臺(軟件源)。開發人員只需要在原有構建工具的基礎上進行封裝,簡單編寫配置文件,明確構建步驟和依賴關系,即可從內部發布平臺(軟件源)自動解析獲取依賴,完成編譯和軟件打包等操作,具體產品構建工作流程見圖2。

對于組件依賴來說,當某個組件被修改時,僅獨立編譯該組件,在集成時會影響相關組件的使用。針對這一問題,基于持續集成系統配置聯動構建機制,即建立任務之間的前后順序管理,當前一組件構建成功即可自動觸發下一組件構建,通過集成測試后,再將該應用程序依賴的框架或庫整理打包并發布。

統一的依賴庫管理模式與聯動構建機制相結合,一方面可提供統一的第三方庫管理機制,有效管理庫版本,實現第三方庫依賴關系的自動解析;另一方面可有效管理組件之間的依賴關系和持續集成與測試組件之間的接口,避免組件版本不兼容引入的問題。

2.2 持續集成方案設計

按照第2.1節中的流程設計思路,基于持續集成服務器與版本控制系統之間的觸發機制,當系統檢測到代碼更新時,持續集成服務器選擇指定的從節點作為構建環境,在從節點上執行持續集成配置腳本。配置腳本調用代碼檢測與軟件構建相關的工具,實現環境清理、代碼靜態審查、軟件編譯、自動化測試、代碼覆蓋率檢測和軟件發布等操作。腳本執行完成后,將構建結果輸出到指定目錄,供持續集成服務器讀取和分析。持續集成服務器通過配置插件、讀取構建和測試日志,將結果可視化輸出到web端界面。整個過程的實現主要依賴于配置腳本,通過修改配置腳本可以實現自定義流程裁剪和定制。持續集成平臺設計方案見圖3。

2.3 持續集成和測試方案的實施

選用Jenkins作為基礎持續集成服務器。與其他持續集成工具相比,Jenkins主要有2個優點:一是易于安裝配置,提供直觀靈活的web用戶界面,便于配置管理;二是具有強大的插件機制,可以顯示測試結果和構建日志等反饋信息。[11-12]版本控制工具使用Subversion,用于存儲、追蹤目錄和文件的修改

歷史。軟件包管理工具使用Conda,用于管理軟件依賴關系,可有效處理軟件產品之間的沖突。自動化測試工具使用自主研發的AutoBenchTest(簡寫為ABTest),適用于數值模擬軟件測試算例的串行和并行執行,能夠自動生成測試報告和結果統計報表。

基于以上設計方案和支撐工具,該平臺具體實現過程如下。

2.3.1 基于Docker容器技術配置構建環境

采用Docker容器技術為持續集成服務器提供構建環境。在Docker中構建容器時,通過編寫Dockerfile腳本實現容器的快速生成。該Dockerfile包含創建鏡像所需要的全部指令,實現對網絡、訪問端口、編譯器、構建環境、版本控制服務和其他依賴軟件的安裝配置。基于該Dockerfile文件,僅執行docker build命令即可一鍵式創建鏡像,同時自底向上打包軟件及其構建環境。[13]這種方式能夠減少鏡像和容器的創建過程,簡化部署、方便系統升級。

容器搭建完成后,持續集成服務器可以通過任務配置的方式選取相應的Docker容器作為構建環境執行軟件編譯與測試。[14]當任務執行完成后,持續集成服務器生成容器并保存至Docker鏡像倉庫,便于后期環境恢復和錯誤定位。基于Docker的環境配置方案見圖4。

2.3.2 基于Conda工具實現自動化構建

Conda工具的實現機制主要包括遠程服務器端和本地端2部分。對于遠程服務器端來說,產品發布平臺主要用于統一管理所有軟件構建所依賴的公共庫、第三方軟件和工具軟件等,以減少重復構建的操作。對于本地端來說,面向數值模擬軟件的構建和打包需求,可支撐軟件完成依賴解析和軟件編譯,最終生成二進制安裝包。

本地端的構建自動化通過編寫Conda配置文件meta.yaml和build.sh腳本實現。build.sh是自動化編譯腳本,用于記錄軟件編譯步驟、需要設置的環境變量信息等內容。該腳本是在程序原有的CMakelist/ Makefile上進行一層封裝,不會對程序原有編譯方式造成影響。對用戶來說,該工具的使用和維護成本較小。meta.yaml提供指定遠程源路徑、安裝包名稱、版本、源碼目錄、編譯/運行時所依賴的軟件和版本等內容。明確以上關鍵信息后,Conda工具通過讀取配置文件解析軟件依賴關系,從遠程軟件源獲取安裝包并配置構建環境,完成編譯并生成二進制安裝包。

2.3.3 編寫持續集成配置腳本

持續集成配置腳本基于shell語言與Jenkins Pipeline語法編寫,主要包括版本檢出、代碼靜態檢查、軟件編譯、驗收測試、覆蓋率檢測等5個部分。該腳本按照流程分階段組織,每個階段完成相應的環境清理、工具調用、測試數據輸出、輸出數據處理和可視化等操作。

此外,腳本盡可能地使用特定變量和相對目錄,規避不同軟件之間的個性化差異,從而形成持續集成配置腳本模板,可支持構建任務的快速創建。

2.3.4 基于Jenkins插件反饋構建結果

Jenkins提供豐富的二次開發接口和插件機制[15],能夠支持靜態審查、代碼量統計、自動化測試和測試覆蓋率結果可視化等操作,可直觀地向測試人員反饋評測結果。

在插件管理界面安裝Cppcheck和Sloc插件,在配置界面填寫輸出文件目錄和文件格式等關鍵信息,讀取并分析XML形式的輸出文件,對結果進行統計、分類并輸出詳細日志,完成靜態檢查和代碼量統計。以代碼靜態審查為例,其不僅能夠簡明扼要地反饋錯誤統計結果,而且能夠顯示錯誤詳細信息,包括靜態審查錯誤文件、行數、錯誤類型和日志等信息,便于研發人員及時解決程序中潛在的數組越界、內存泄漏等問題。靜態審查錯誤日志實例見圖5。

在軟件測試和覆蓋率統計方面,基于持續集成服務器提供的Publish Html插件,在配置界面明確測試報告生成目錄、網頁文件名稱和標題等,Jenkins可將任務與工具生成的Html界面關聯,并在任務主界面顯示測試算例執行報表、測試覆蓋率檢測結果等。自動化測試報告實例見圖6。報告中明確給出測試環境信息、測試算例執行狀態和統計信息,提供具體算例的執行日志,便于定位錯誤。測試覆蓋率檢測報告實例見圖7。報告中不僅統計本次軟件測試中整體代碼行數與函數覆蓋率情況,而且能夠通過顏色明確標識具體代碼行的執行信息,便于研發人員進一步完善測試算例。

3 應用效果

該持續集成平臺用于支撐中物院高性能數值模擬軟件中心的產品化和應用推廣工作。該平臺可實現產品構建、測試和發布工作的自動化,已應用于35款數值模擬軟件,完成2 100余例測試算例自動化測試,發布軟件產品3 000余次,產品交付周期相比之前縮短約75%,大幅提升產品構建與交付效率。

基于Dockerfile容器模板,該平臺可支持構建環境的快速生成。目前,構建環境覆蓋Centos、Redhat、Fedora和Suse等多種操作系統、編譯器和MPI版本,能夠滿足銀河、天河2號等典型高性能計算環境的產品部署需求。在產品發布后,用戶可一鍵式安裝部署,平臺自動解析軟件依賴和安裝與環境變量配置,降低軟件產品部署難度和使用成本。

此外,針對軟件研發過程中的問題記錄和反饋需求,該平臺可實現構建和測試日志全面輸出。對于單個軟件的構建來說:一方面,該平臺能夠直觀地反饋階段執行情況,記錄整個構建任務中的操作步驟和報錯日志,并可視化輸出各個工具生成的數據文件;另一方面,該平臺能夠對測試結果進行統計分析,生成構建過程趨勢圖(見圖8),有效監控軟件開發過程數據,促進產品質量持續提升。

4 結束語

基于Docker與Jenkins技術設計并實現面向數值模擬軟件的持續集成平臺。該平臺從數值模擬軟件面臨的實際應用需求出發,建立代碼靜態分析、依賴關系解析、軟件編譯、測試和部署等自動化工作流程,實現構建環境的快速搭建和配置管理,詳細記錄軟件構建日志和測試結果,便于研發團隊及時發現軟件缺陷、快速分析定位問題。

該平臺可大幅度縮短產品構建、發布和交付周期,有效保障數值模擬軟件的產品化和推廣應用。但是,該持續集成平臺未采用數據庫技術對測試數據統一管理。在下一步工作中,將深入開展測試數據管理和分析工作,記錄產品質量變化趨勢,及時發現軟件中潛在的缺陷。

參考文獻:

[1] 莫則堯, 裴文兵. 科學計算應用程序探討[J]. 物理, 2009, 38(8): 552-558. DOI: 10.3321/j.issn:0379-4148.2009.08.004.

[2] 田鴻運, 劉青凱, 成杰, 等. 一種面向高性能數值模擬軟件的自動化測試平臺[J]. 計算機工程與科學, 2017, 39(11): 1980-1985. DOI: 10.3969/j.issn.1007-130X.2017.11.002.

[3] 蔣祥剛. Make與Makefile初探[J]. 中文信息, 2002(8): 62-65.

[4] HOFFMAN B, COLE D, VINES J. Software process for rapid development of HPC software using CMake[C]// Proceedings of 2009 DoD High Performance Computing Modernization Program Users Group Conference. San Diego: IEEE Press, 2009: 11873937. DOI: 10.1109/HPCMP-UGC.2009.62.

[5] KAWALEROWICZ M, BERNTSON C. Continuous integration in .Net[M]. New York: Manning, 2011.

[6] HATCHER E, LOUGHRAN S. 使用Ant進行Java開發[M]. 北京: 電子工業出版社, 2005.

[7] 董曉光, 喻濤. 使用Maven構建Java項目[J]. 電子技術與軟件工程, 2014(10): 105.

[8] BERGLUND T, MCCULLOUGH M. Building and testing with Gradle[M]. Boston: O′Reilly Media, 2011.

[9] 陳能技, 付勇, 等. 大規模組織DevOps實踐[M]. 北京: 電子工業出版社, 2018.

[10] 成奮華, 金敏. 基于敏捷過程的IT項目范圍管理的研究與應用[J]. 計算機技術與發展, 2010, 20(10): 232-236. DOI: 10.3969/j.issn.1673-629X.2010.10.056.

[11] HUMBLE J, FARLEY D. Continuous delivery: Reliable software releases through build, test, and deployment automation[M]. Alaska: Addison-Wesley Professional, 2010.

[12] DUVALL P M, MATYAS S, Glover A. 持續集成軟件質量改進和風險降低之道[M]. 北京: 電子工業出版社, 2012.

[13] MERKEL D. Docker: Lightweight Linux containers for consistent development and deployment[J]. Linux Journal, 2014, 2014(239): 2.

[14] 張兆晨, 羅鐵堅. CCI: 一種基于容器化的持續集成系統[J]. 中國科學院大學學報, 2018, 35(4): 569-575. DOI: 10.7523/j.issn.2095-6134.2018.04.021.

[15] 劉巧玲, 范冰冰, 黃興平. 基于Hudson的持續集成研究和應用[J]. 計算機系統應用, 2010, 19(12): 151-154.

(編輯 武曉英)

主站蜘蛛池模板: 国产人前露出系列视频| 日本尹人综合香蕉在线观看| 日本人妻一区二区三区不卡影院 | 国产成人久视频免费| 十八禁美女裸体网站| 人妖无码第一页| 免费看美女自慰的网站| 日本不卡视频在线| 中文天堂在线视频| 亚洲午夜综合网| 99热这里只有精品在线播放| 国产xxxxx免费视频| 天天综合网站| 精品国产中文一级毛片在线看| 找国产毛片看| 日本欧美中文字幕精品亚洲| 在线国产你懂的| 国产日韩久久久久无码精品| 色视频久久| 亚洲男人的天堂视频| 亚洲欧美天堂网| 日韩a级片视频| 天天色天天综合| 亚洲天堂视频网| 香蕉久久永久视频| 国产精品久久久久婷婷五月| 国产亚洲现在一区二区中文| 狠狠综合久久| 丰满人妻一区二区三区视频| 97精品伊人久久大香线蕉| 欧美人人干| 国产综合色在线视频播放线视 | 日本成人精品视频| 国产污视频在线观看| 97青草最新免费精品视频| 色婷婷在线播放| 久综合日韩| 2022国产无码在线| 亚洲色无码专线精品观看| 亚洲永久免费网站| 色婷婷色丁香| 日本免费高清一区| 国产精品亚洲五月天高清| AV熟女乱| 日韩AV手机在线观看蜜芽| 国产美女在线免费观看| 精品国产Av电影无码久久久| 91小视频在线观看| 国产婬乱a一级毛片多女| 亚洲清纯自偷自拍另类专区| 毛片免费视频| 日韩精品无码一级毛片免费| 日本成人福利视频| 亚洲一级毛片在线观播放| 成人免费一级片| 国产成人综合欧美精品久久| 精品成人免费自拍视频| 国产女主播一区| 中文字幕久久波多野结衣| 香蕉久久国产超碰青草| 美女被狂躁www在线观看| 亚洲色中色| 久久99国产综合精品1| 欧美乱妇高清无乱码免费| 日本人妻一区二区三区不卡影院| 狠狠色丁婷婷综合久久| 人人爽人人爽人人片| 国产成人免费高清AⅤ| 57pao国产成视频免费播放| 91精品国产一区自在线拍| 国产精品毛片在线直播完整版| 日韩午夜福利在线观看| 国产精品无码AV中文| 无码日韩精品91超碰| 婷婷在线网站| 高清无码手机在线观看| 精品国产一区二区三区在线观看| 再看日本中文字幕在线观看| 九九热这里只有国产精品| 特级毛片免费视频| 青青久视频| 日本免费新一区视频|