本書展示了以GitLab CI/CD 流水線為基礎,結合時下十分火熱的云原生技術,打造企業級DevOps應用體系的全流程。
全書共分為3篇,第1篇為第1~3章,主要介紹云計算、云原生、微服務、敏捷開發、持續集成、DevOps、docker容器技術以及Kubernetes(簡稱K8s)核心技術等。第2篇為第4~9章,主要介紹了GitLab安裝部署與基礎使用、GitLab CI/CD中Runner的類型以及部署、GitLab CI/CD流水線模型、GitLab CI/CD變量、GitLab CI/CD流水線的觸發方式以及GitLab CI/CD流水線中的緩存和附件等。第3篇為第10~13章,主要介紹了前后端項目的創建、GitLab CI/CD中基于SonarQube的靜態代碼檢查,以及GitLab CI/CD 中的編譯、構建、發布、部署、測試和上線等流程。
全書以搭建企業級DevOps應用平臺為目標,從云原生技術基礎容器以及Kubernetes技術入手;然后介紹了GitLab CI/CD的常見功能應用;最后從零開始,以經典的前后端項目為例,以解決企業內研發流程的困境為思路,一步一步地將整個項目的DevOps流水線創建起來。此外,還結合Kubernetes技術進行可動態伸縮的彈性部署上線。
本書適合對docker技術、K8s技術、GitLab技術及DevOps技術感興趣的讀者和相關工作人員。隨書配備了案例源代碼、授課用PPT及教學視頻(掃碼觀看),可以幫助讀者更好地學習這些知識。
通過本書的學習,讀者既可以掌握以docker容器技術和Kubernetes技術為代表的云原生技術,又可以掌握GitLab CI/CD中豐富的流水線功能,最重要的是可以更容易地搭建起企業級應用的DevOps平臺。
基于云原生和GitOps思想
匯集Docker、K8s、GitLab Cl/CD技術
CI/CD流水線設計與應用實戰
提供源代碼、PPT及掃碼看視頻
隨著云原生技術的飛速發展以及敏捷開發的廣泛應用,DevOps系統變得越來越重要。如今,我們很難想象一個研發團隊,如果沒有DevOps體系的支撐可以持續地健康發展。尤其隨著微服務架構的深入人心,研發團隊往往擁有多個微服務應用,傳統的部署方式早已無法滿足實際需求。在虛擬化技術和云原生技術飛速發展的背景下,當今互聯網時代的絕大多數微服務部署要基于云原生技術,或者是虛擬化技術。
在DevOps體系中,Jenkins曾經充當了重要角色。但是隨著業務的不斷擴張和規模的不斷擴大,以Jenkins為基礎的DevOps流水線弊端日趨明顯。因此,基于GitLab CI/CD技術和云原生技術相結合的DevOps自動化體系越來越受歡迎,導致越來越多的企業更喜歡使用GitLab CI/CD。
市面上關于GitLab CI/CD方面的書籍資料相對較少,有些也是僅僅停留在文檔介紹層面,很少有書籍基于實戰角度的介紹。因此,本書致力于從企業級實戰應用的角度,介紹基于GitLab CI/CD和云原生技術相結合的DevOps體系建設。
本書共分為3篇。第1篇為DevOps技術基礎,包含第1~3章:第1章介紹了云計算、云原生、微服務、敏捷開發、持續集成、DevOps等相關的技術;第2章詳細介紹了docker容器技術;第3章詳細介紹了Kubernetes技術。第2篇為GitLab CI/CD功能應用,包含第4~9章:第4章介紹了如何安裝部署GitLab以及GitLab的基本應用;第5章介紹了GitLab CI/CD中的Runner類型及其部署方式;第6章介紹了GitLab CI/CD中流水線模型的類型選擇與應用;第7章介紹了GitLab CI/CD中的變量類型與使用技巧;第8章介紹了GitLab CI/CD流水線的各種觸發方式;第9章介紹了GitLab CI/CD中的緩存技術以及附件等。第3篇為企業級DevOps實戰,包含第10~13章:第10章為環境準備,介紹了如何創建后端SpringBoot項目、前端Vue項目以及基于pytest框架的自動化測試體系;第11章介紹了靜態代碼檢查步驟,包含如何搭建SonarQube平臺、配置靜態檢查流水線和SpringBoot項目的單元測試流水線;第12章介紹了SpringBoot項目編譯Jar包以及構建docker鏡像的流水線,同時搭建私有化dockerhub,并構建前端項目的docker鏡像;第13章結合Kubernetes環境,對前后端項目進行彈性擴縮容方式的部署,并從實際應用的角度設置了CI、測試、生產三套環境的部署以及自動化測試等。
本書從基礎入手,層層遞進。首先講解了DevOps體系的基礎,即云原生技術,以docker容器技術和Kubernetes技術為代表。然后從實際應用的角度介紹GitLab CI/CD功能的使用,比如第6章介紹流水線模型時,詳細介紹了如何根據業務場景選擇適合自己的流水線模型,而非簡單地介紹GitLab CI/CD中的某幾個關鍵字的使用方法。最后通過比較典型的前后端項目組合的例子,從企業實際需求出發,一步一步建立DevOps體系。本書特別強調靈活性,要因時因勢地做出最符合自身的選擇而非教條思維。堅持DevOps流水線是為了服務產品研發而非阻礙產品研發,這也是DevOps工作的出發點和落腳點。
本書涉及docker容器技術、Kubernetes技術、GitLab CI/CD技術以及綜合實戰。對docker技術感興趣的讀者可以重點閱讀第2章,對Kubernetes技術感興趣的讀者可以重點閱讀第3章,對GitLab CI/CD技術感興趣的讀者可以重點關注第4~9章。當然,對DevOps感興趣的讀者,既可以從頭開始閱讀,也可以根據自己的技術基礎,選擇性地閱讀。此外,本書還可以作為眾多DevOps工作者和愛好者手邊查閱的工具書。總體來說,對于從事測試開發(尤其是從事研發質量平臺建設)、測試(向測試開發轉型)、運維(向自動化運維轉型)及開發等崗位的讀者,均可從本書獲得提升自身價值的知識。
由于編者水平有限,書中難免有不足之處,懇請讀者批評指正。
溫紅化
中國科學院軟件研究所資深DevOps工程師,負責建設團隊DevOps體系及自動化測試體系,在自動化測試、CI/CD流水線、工具開發和自動化運維等測試開發領域擁有豐富的實戰經驗。曾在華為、中興主持過大型產品團隊的DevOps體系建設及自動化測試體系建設,對DevOps有深刻而獨到的見解。
第1篇DevOps技術基礎
第1章 DevOps技術背景
1.1云計算簡介
1.1.1什么是虛擬化技術
1.1.2什么是云計算
1.1.3云計算的類型與應用
1.2云原生簡介
1.3微服務簡介
1.4敏捷開發簡介
1.5CICD簡介
1.6DevOps簡介
1.7GitLab CICD簡介
第2章 容器技術基礎
2.1容器概述
2.1.1容器技術簡介
2.1.2docker技術簡介
2.2虛擬機及docker環境安裝
2.2.1VMware虛擬機的安裝
2.2.2VMware安裝CentOS 7操作系統的虛擬機
2.2.3docker環境安裝
2.3docker鏡像常用操作命令
2.4docker容器的基礎應用
2.4.1docker容器的常用操作命令詳解
2.4.2docker容器實戰:基于docker部署MySQL數據庫
2.5自定義docker鏡像
2.5.1Dockerfile常用的語法
2.5.2鏡像編譯實戰:將flask應用編譯為docker鏡像并部署
2.5.3發布鏡像到dockerhub
2.6docker-compose的應用
2.6.1docker-compose的安裝
2.6.2docker-compose實戰:編譯部署flask應用與redis數據庫
2.7搭建私有dockerhub服務
2.8DockerSwarm集群
2.8.1DockerSwarm集群部署
2.8.2基于DockerSwarm實現服務彈性擴縮容
第3章 Kubernetes核心技術
3.1初識Kubernetes
3.1.1Kubernetes的產生背景
3.1.2Kubernetes的組件
3.1.3Kubernetes的常見插件
3.2Kubernetes集群環境搭建
3.3Kubernetes快速體驗
3.4Kubernetes的命名空間
3.4.1對命名空間進行操作
3.4.2利用yaml配置文件方式處理命名空間
3.5Pod基礎操作
3.5.1通過命令行方式操作Pod
3.5.2通過yaml配置文件的方式操作Pod
3.5.3Pod的yaml配置文件的編寫方法
3.6Pod中常用配置
3.6.1Pod中的容器名稱和鏡像配置
3.6.2Pod中容器鏡像拉取策略配置
3.6.3Pod中容器的環境變量配置
3.6.4Pod中容器啟動命令配置
3.6.5Pod中容器的端口配置
3.6.6Pod中容器的配額配置
3.6.7Pod中的容器探針配置
3.6.8Pod中的初始化容器
3.6.9Pod中的鉤子函數
3.6.10Pod的定向調度方式
3.6.11Pod的親和性調度方式
3.6.12污點與容忍的調度方式
3.7Pod控制器
3.7.1Pod控制器簡介
3.7.2ReplicaSet控制器
3.7.3Deployment控制器
3.7.4Deployment控制器實現滾動發布
3.7.5Deployment控制器實現版本回退
3.7.6Deployment控制器實現金絲雀發布
3.7.7HPA控制器實現全自動動態擴縮容
3.7.8DaemonSet控制器
3.7.9Job和CronJob控制器
3.7.10StatefulSet控制器
3.8Kubernetes中Service服務組件
3.8.1ClusterIP類型的Service
3.8.2Headless類型的Service
3.8.3NodePort類型的Service
3.8.4ExternalName類型的Service
3.9Kubernetes中的存儲管理
3.9.1HostPath類型的存儲
3.9.2NFS類型的存儲
3.9.3PV和PVC
3.9.4ConfigMap配置存儲
3.9.5Secret安全存儲第2篇GitLab CICD功能應用
第4章 GitLab基礎
4.1GitLab CICD簡介
4.2GitLab環境部署
4.2.1基于Linux虛擬機部署GitLab
4.2.2基于docker部署GitLab
4.2.3基于Kubernetes部署GitLab
4.3GitLab基礎應用
4.3.1GitLab創建組及項目
4.3.2GitLab代碼倉分支管理
4.3.3GitLab需求任務管理
4.4GitLab代碼管理
4.4.1配置SSH公鑰
4.4.2更新與提交代碼
4.5Git常用命令
4.5.1安裝Git客戶端
4.5.2Git常用的命令
第5章 GitLab CICD配置Runners
5.1GitLab-Runner簡介
5.2注冊GitLab-Runner準備工作
5.3配置shell類型的GitLab-Runner
5.4配置docker類型的GitLab-Runner
第6章 GitLab CICD流水線模型
6.1GitLab CICD流水線快速體驗
6.2基本類型流水線
6.3有向圖(DAG)類型流水線
6.4父子類型流水線
6.5多項目類型流水線
第7章 GitLab CICD變量
7.1預定義變量
7.2yaml中自定義變量
7.3UI中自定義變量目錄
第8章GitLab CICD流水線的觸發方式
8.1通過指定分支名觸發
8.2通過MergeRequest觸發
8.3通過打tag觸發
8.4手動按鈕觸發
8.5定時任務觸發
8.6通過trigger觸發
8.7通過檢測指定目錄文件修改觸發
8.8通過正則匹配方式觸發
第9章GitLab CICD中的緩存與附件
9.1相同分支不同Job之間實現數據共享
9.2不同分支相同Job之間實現數據共享
9.3不同分支不同Job之間實現數據共享
9.4將文件文件夾保存為附件
9.5基于artifacts在不同的Job和runner之間實現數據共享
第3篇企業級DevOps實戰
第10章環境準備
10.1基于SpringBoot創建后端項目
10.2基于Vue創建前端項目
10.3基于pytest創建自動化測試
10.4DevOps流水線設計
第11章GitLab CICD靜態代碼檢查
11.1后端Java項目的單元測試
11.2部署SonarQube平臺
11.3配置SonarQube集成GitLab
11.4配置SonarQube使用GitLab賬號授權登錄
11.5配置后端Java項目靜態代碼檢查
第12章GitLab CICD 編譯發布
12.1后端Java項目編譯Jar包
12.2后端Java項目構建docker鏡像
12.3前端Web項目構建docker鏡像
第13章GitLab CICD 部署應用
13.1后端Java項目部署
13.2前端Web項目部署
13.3部署自動化測試
13.4DevOps流水線應用流程