目錄
一、為什么要做 CI/CD ?
1.1 背景-傳統(tǒng)的應(yīng)用開發(fā)發(fā)布模式
問題
1.2 持續(xù)集成與持續(xù)交付
持續(xù)集成(CI)
持續(xù)交付(CD)
持續(xù)部署(CD)
1.3 CI/CD 的價(jià)值體現(xiàn)
1.4 推薦常用的 CI/CD 工具
Jenkins
GitLab
二、GitLab CI/CD 功能簡介
2.1 GitLab 內(nèi)置持續(xù)集成功能
持續(xù)集成(CI)
連續(xù)交付(CD)
2.2 GitLab CI/CD 優(yōu)勢
2.3 GitLab CI/CD 特點(diǎn)
2.4 GitLab CI/CD 架構(gòu)
GitLab CI/CD
GitLab Runner
.gitlab-ci.yml
2.5 GitLab CI/CD 工作原理
三、GitLabCI VS Jenkins
3.1 差異點(diǎn)對比
分支的可配置性
定時(shí)執(zhí)行構(gòu)建
拉取請求支持
權(quán)限管理
存儲(chǔ)庫交互
插件管理
3.2 優(yōu)勢與劣勢
GitLabCI
Jenkins
3.3 實(shí)際應(yīng)用
四、安裝部署 GitLab 服務(wù)
4.1 rpm 方式
4.2 Docker 方式
4.3 Kubernetes 部署
一、為什么要做 CI/CD ?
1.1 背景-傳統(tǒng)的應(yīng)用開發(fā)發(fā)布模式
- 開發(fā)團(tuán)隊(duì):在開發(fā)環(huán)境中完成軟件開發(fā),單元測試,測試通過,提交到代碼版本管理庫。
- 運(yùn)維團(tuán)隊(duì):把應(yīng)用部署到測試環(huán)境,供QA團(tuán)隊(duì)測試,測試通過后部署生產(chǎn)環(huán)境。
- QA 團(tuán)隊(duì):進(jìn)行測試,測試通過后通知部署人員發(fā)布到生產(chǎn)環(huán)境。
問題
- 錯(cuò)誤發(fā)現(xiàn)不及時(shí):很多錯(cuò)誤在項(xiàng)目的早期可能就存在,到最后集成的時(shí)候才發(fā)現(xiàn)問題。
- 人工低級錯(cuò)誤發(fā)生:產(chǎn)品和服務(wù)交付中的關(guān)鍵活動(dòng)全都需要手動(dòng)操作。
- 團(tuán)隊(duì)工作效率低:需要等待他人的工作完成后才能進(jìn)行自己的工作。
- 開發(fā)運(yùn)維對立: 開發(fā)人員想要快速更新,運(yùn)維人員追求穩(wěn)定,各自的針對的方向不同。
經(jīng)過上述問題我們需要作出改變,如何改變?
1.2 持續(xù)集成與持續(xù)交付
????????軟件開發(fā)的連續(xù)方法基于自動(dòng)執(zhí)行腳本,以最大程度地減少在開發(fā)應(yīng)用程序時(shí)引入錯(cuò)誤的機(jī)會(huì)。從開發(fā)新代碼到部署新代碼,他們幾乎不需要人工干預(yù),甚至根本不需要干預(yù)。
????????它涉及到在每次小的迭代中就不斷地構(gòu)建,測試和部署代碼更改,從而減少了基于錯(cuò)誤或失敗的先前版本開發(fā)新代碼的機(jī)會(huì)。
????????此方法有三種主要方法,每種方法都將根據(jù)最適合您的策略的方式進(jìn)行應(yīng)用。
持續(xù)集成(CI)
????????持續(xù)合并開發(fā)人員正在開發(fā)編寫的所有代碼的一種做法。通常一天內(nèi)進(jìn)行多次合并和提交代碼,從存儲(chǔ)庫或生產(chǎn)環(huán)境中進(jìn)行構(gòu)建和自動(dòng)化測試,以確保沒有集成問題并及早發(fā)現(xiàn)任何問題。
????????開發(fā)人員提交代碼的時(shí)候一般先在本地測試驗(yàn)證,只要開發(fā)人員提交代碼到版本控制系統(tǒng)就會(huì)觸發(fā)一條提交流水線,對本次提交進(jìn)行驗(yàn)證。
持續(xù)交付(CD)
????????持續(xù)交付是超越持續(xù)集成的一步。不僅會(huì)在推送到代碼庫的每次代碼更改時(shí)都進(jìn)行構(gòu)建和測試,而且,作為附加步驟,即使部署是手動(dòng)觸發(fā)的,它也可以連續(xù)部署。此方法可確保自動(dòng)檢查代碼,但需要人工干預(yù)才能從策略上手動(dòng)觸發(fā)更改的部署。
持續(xù)部署(CD)
????????通??梢酝ㄟ^將更改自動(dòng)推送到發(fā)布系統(tǒng)來隨時(shí)將軟件發(fā)布到生產(chǎn)環(huán)境中。持續(xù)部署 會(huì)更進(jìn)一步,并自動(dòng)將更改推送到生產(chǎn)中。類似于持續(xù)交付,持續(xù)部署也是超越持續(xù)集成的又一步。不同之處在于,您無需將其手動(dòng)部署,而是將其設(shè)置為自動(dòng)部署。部署您的應(yīng)用程序完全不需要人工干預(yù)。?
1.3 CI/CD 的價(jià)值體現(xiàn)
-
盡早反饋,盡早發(fā)現(xiàn)錯(cuò)誤。
-
減少集成問題,每次發(fā)現(xiàn)問題當(dāng)時(shí)解決,避免問題堆積。
-
每次更改都能成功發(fā)布,降低發(fā)布風(fēng)險(xiǎn)。
-
更加頻繁的交付價(jià)值,客戶反饋。
1.4 推薦常用的 CI/CD 工具
Jenkins
????????專業(yè)的 CI 工具,可擴(kuò)展自動(dòng)化服務(wù)器、安裝配置簡單、豐富的插件庫、分布式架構(gòu)設(shè)計(jì)、支持所有的平臺(tái)、可視化的管理頁面。 ?
GitLab
????????端到端 DevOps 工具,常用功能:代碼審查、問題跟蹤、動(dòng)態(tài)訂閱、易于擴(kuò)展、項(xiàng)目 wiki、多角色項(xiàng)目管理、項(xiàng)目代碼在線編譯預(yù)覽、CI 工具集成。
- 提交合并代碼集成:通過 git push 進(jìn)行操作或者在 GitLab Web 頁面操作。
- 發(fā)布應(yīng)用到服務(wù)器: 獲取制品庫中的應(yīng)用,然后用 salt、ansible 發(fā)布部署到服務(wù)器。
- 完全自動(dòng)化:提交代碼 -> 構(gòu)建部署 -> 發(fā)布
二、GitLab CI/CD 功能簡介
2.1 GitLab 內(nèi)置持續(xù)集成功能
持續(xù)集成(CI)
-
集成團(tuán)隊(duì)中每個(gè)開發(fā)人員提交的代碼到代碼存儲(chǔ)庫中。
-
開發(fā)人員在 Merge 或者 Pull 請求中合并拉取新代碼。
-
在提交或者合并更改到代碼存儲(chǔ)庫之前,會(huì)觸發(fā)了構(gòu)建,測試和新代碼驗(yàn)證的管道。
-
CI 可幫助您在開發(fā)周期的早期發(fā)現(xiàn)并減少錯(cuò)誤。
連續(xù)交付(CD)
-
可通過結(jié)構(gòu)化的部署管道確保將經(jīng)過 CI 驗(yàn)證的代碼交付給您的應(yīng)用程序。
-
CD 可以將經(jīng)過驗(yàn)證的代碼更快地移至您的應(yīng)用程序。
????????CI/CD 一起可以加快團(tuán)隊(duì)為客戶和利益相關(guān)者交付成果的速度。CI 和 CD 必須無縫協(xié)作,以使您的團(tuán)隊(duì)快速有效地進(jìn)行構(gòu)建,并且對于確保完全優(yōu)化的開發(fā)實(shí)踐至關(guān)重要。
2.2 GitLab CI/CD 優(yōu)勢
-
開源:CI/CD 是開源 GitLab 社區(qū)版和專有 GitLab 企業(yè)版的一部分。
-
易于學(xué)習(xí):具有詳細(xì)的入門文檔。
-
無縫集成:GitLab CI/CD 是 GitLab 的一部分,支持從計(jì)劃到部署,具有出色的用戶體驗(yàn)。
-
可擴(kuò)展:測試可以在單獨(dú)的計(jì)算機(jī)上分布式運(yùn)行,可以根據(jù)需要添加任意數(shù)量的計(jì)算機(jī)。
-
更快的結(jié)果:每個(gè)構(gòu)建可以拆分為多個(gè)作業(yè),這些作業(yè)可以在多臺(tái)計(jì)算機(jī)上并行運(yùn)行。
-
針對交付進(jìn)行了優(yōu)化:多個(gè)階段,手動(dòng)部署, 環(huán)境和變量。
2.3 GitLab CI/CD 特點(diǎn)
-
多平臺(tái):Unix,Windows,macOS 和任何其他支持 Go 的平臺(tái)上執(zhí)行構(gòu)建。
-
多語言:構(gòu)建腳本是命令行驅(qū)動(dòng)的,并且可以與 Java,PHP,Ruby,C 和任何其他語言一起使用。
-
穩(wěn)定構(gòu)建:構(gòu)建在與 GitLab 不同的機(jī)器上運(yùn)行。
-
并行構(gòu)建:GitLab CI/CD 在多臺(tái)機(jī)器上拆分構(gòu)建,以實(shí)現(xiàn)快速執(zhí)行。
-
實(shí)時(shí)日志記錄:合并請求中的鏈接將您帶到動(dòng)態(tài)更新的當(dāng)前構(gòu)建日志。
-
靈活的管道:您可以在每個(gè)階段定義多個(gè)并行作業(yè),并且可以 觸發(fā)其他構(gòu)建。
-
版本管道: 一個(gè) .gitlab-ci.yml 文件包含您的測試,整個(gè)過程的步驟,使每個(gè)人都能貢獻(xiàn)更改,并確保每個(gè)分支獲得所需的管道。
-
自動(dòng)縮放:您可以自動(dòng)縮放構(gòu)建機(jī)器,以確保立即處理您的構(gòu)建并將成本降至最低。
-
構(gòu)建工件:您可以將二進(jìn)制文件和其他構(gòu)建工件上載到 GitLab 并瀏覽和下載它們。
-
Docker 支持:可以使用自定義 Docker 鏡像, 作為測試的一部分啟動(dòng) 服務(wù), 構(gòu)建新的Docker 鏡像,甚至可以在 Kubernetes 上運(yùn)行。
-
容器注冊表: 內(nèi)置的容器注冊表,用于存儲(chǔ),共享和使用容器鏡像。
-
受保護(hù)的變量: 在部署期間使用受每個(gè)環(huán)境保護(hù)的變量安全地存儲(chǔ)和使用機(jī)密。
-
環(huán)境: 定義多個(gè)環(huán)境。
2.4 GitLab CI/CD 架構(gòu)
GitLab CI/CD
????????GitLab 的一部分,GitLab 是一個(gè) Web 應(yīng)用程序,具有將其狀態(tài)存儲(chǔ)在數(shù)據(jù)庫中的 API。 除了 GitLab 的所有功能之外,它還管理項(xiàng)目/構(gòu)建并提供一個(gè)不錯(cuò)的用戶界面。
GitLab Runner
????????是一個(gè)處理構(gòu)建的應(yīng)用程序。 它可以單獨(dú)部署,并通過?API 與 GitLab CI/CD一起使用。
.gitlab-ci.yml
定義流水線作業(yè)運(yùn)行,位于應(yīng)用項(xiàng)目根目錄下。
????????為了運(yùn)行測試,我們后面至少需要一個(gè) GitLab 實(shí)例、一個(gè) GitLab Runner、一個(gè) gitlab-ci 文件。
2.5 GitLab CI/CD 工作原理
-
將代碼托管到 Git 存儲(chǔ)庫。
-
在項(xiàng)目根目錄創(chuàng)建 ci 文件
.gitlab-ci.yml
,在文件中指定構(gòu)建,測試和部署腳本。 -
GitLab 將檢測到它并使用名為 GitLab Runner 的工具運(yùn)行腳本。
-
腳本被分組為作業(yè),它們共同組成了一個(gè)管道。
管道狀態(tài)也會(huì)由 GitLab 顯示: ?
最后,如果出現(xiàn)任何問題,可以輕松地回滾所有更改: ?
三、GitLabCI VS Jenkins
? Jenkins
是一個(gè)廣泛用于持續(xù)集成的可視化 web
自動(dòng)化工具,jenkins
可以很好的支持各種語言的項(xiàng)目構(gòu)建,也完全兼容?ant
、maven
、gradle
等多種第三方構(gòu)建工具,同時(shí)跟?svn
、git
能無縫集成,也支持直接與知名源代碼托管網(wǎng)站,比如?github
、bitbucket
直接集成,而且插件眾多,在這么多年的技術(shù)積累之后,在國內(nèi)大部分公司都有使用?Jenkins
。
? gitlab-CI
是?gitlab8.0
之后自帶的一個(gè)持續(xù)集成系統(tǒng),中心思想是當(dāng)每一次?push
到?gitlab
的時(shí)候,都會(huì)觸發(fā)一次腳本執(zhí)行,然后腳本的內(nèi)容包括了測試,編譯,部署等一系列自定義的內(nèi)容。
? gitlab-CI
的腳本執(zhí)行,需要自定義安裝對應(yīng)?gitlab-runner
來執(zhí)行,代碼?push
之后,webhook
檢測到代碼變化,就會(huì)觸發(fā)?gitlab-CI
,分配到各個(gè)?Runner
來運(yùn)行相應(yīng)的腳本?script
。這些腳本有的是測試項(xiàng)目用的,有的是部署用的。
3.1 差異點(diǎn)對比
分支的可配置性
-
使用 GitLabCI,新創(chuàng)建的分支無需任何進(jìn)一步配置即可立即使用 CI 管道中的已定義作業(yè)。
-
Jenkins 2 基于 gitlab 的多分支流水線可以實(shí)現(xiàn)。相對配置來說 gitlab 更加方便一些。
定時(shí)執(zhí)行構(gòu)建
有時(shí),根據(jù)時(shí)間觸發(fā)作業(yè)或整個(gè)管道會(huì)有所幫助。例如,常規(guī)的夜間定時(shí)構(gòu)建。
-
使用 Jenkins 2 可以立即使用??梢栽趹?yīng)執(zhí)行作業(yè)或管道的那一刻以 cron 式語法定義。
-
GitLab CI 沒有此功能。但是,可以通過一種變通辦法來實(shí)現(xiàn):通過 WebAPI 使用同一臺(tái)或另一臺(tái)服務(wù)器上的 cronjob 觸發(fā)作業(yè)和管道。
????????盡管使用 GitLab CI 無法做到這一點(diǎn),其實(shí)如果配置了提交代碼即觸發(fā)流水線,那么最后一次提交的構(gòu)建在什么時(shí)候沒有什么不同,反而減少未提交代碼的定時(shí)構(gòu)建資源浪費(fèi)。
拉取請求支持
????????如果很好地集成了存儲(chǔ)庫管理器和 CI / CD 平臺(tái),您可以看到請求的當(dāng)前構(gòu)建狀態(tài)。使用這種功能,可以避免將代碼合并到不起作用或無法正確構(gòu)建的主分支中。
-
Jenkins 沒有與源代碼管理系統(tǒng)進(jìn)一步集成,需要管理員自行寫代碼或者插件實(shí)現(xiàn)。
-
GitLab 與其 CI 平臺(tái)緊密集成,可以方便查看每個(gè)打開和關(guān)閉拉動(dòng)請求的運(yùn)行和完成管道。
權(quán)限管理
????????從存儲(chǔ)庫管理器繼承的權(quán)限管理對于不想為每個(gè)服務(wù)分別設(shè)置每個(gè)用戶的權(quán)限的大型開發(fā)人員或組織團(tuán)體很有用。大多數(shù)情況下,兩種情況下的權(quán)限都是相同的,因此默認(rèn)情況下應(yīng)將它們配置在一個(gè)位置。
-
由于 GitLab 與 GitLabCI 的深度整合,權(quán)限可以統(tǒng)一管理。
-
由于 Jenkins 2 沒有內(nèi)置的存儲(chǔ)庫管理器,因此它無法直接在存儲(chǔ)庫管理器和 CI / CD 平臺(tái)之間合并權(quán)限。
存儲(chǔ)庫交互
-
GitLab CI 是 Git 存儲(chǔ)庫管理器 GitLab 的固定組件,因此在 CI / CD 流程和存儲(chǔ)庫功能之間提供了良好的交互。
-
Jenkins 2 與存儲(chǔ)庫管理器都是松散耦合的,因此在選擇版本控制系統(tǒng)時(shí)它非常靈活。此外,就像其前身一樣,Jenkins 2 強(qiáng)調(diào)了對插件的支持,以進(jìn)一步擴(kuò)展或改善軟件的現(xiàn)有功能。
插件管理
-
擴(kuò)展 Jenkins 的本機(jī)功能是通過插件完成的。插件的維護(hù),保護(hù)和升級成本很高。
-
GitLab 是開放式的,任何人都可以直接向代碼庫貢獻(xiàn)更改,一旦合并,它將自動(dòng)測試并維護(hù)每個(gè)更改。
3.2 優(yōu)勢與劣勢
GitLabCI
-
輕量級,不需要復(fù)雜的安裝手段。
-
配置簡單,與?
gitlab
可直接適配。 -
實(shí)時(shí)構(gòu)建日志十分清晰,
UI
交互體驗(yàn)很好 -
使用
YAML
進(jìn)行配置,任何人都可以很方便的使用。 -
沒有統(tǒng)一的管理界面,無法統(tǒng)籌管理所有項(xiàng)目
-
配置依賴于代碼倉庫,耦合度沒有?
Jenkins
低
Jenkins
-
編譯服務(wù)和代碼倉庫分離,耦合度低
-
插件豐富,支持語言眾多。
-
有統(tǒng)一的?
web
管理界面。 -
插件以及自身安裝較為復(fù)雜。
-
體量較大,不是很適合小型團(tuán)隊(duì)。
3.3 實(shí)際應(yīng)用
-
GitLabCI 有助于 DevOps 人員,例如敏捷開發(fā)中,開發(fā)與運(yùn)維是同一個(gè)人,最便捷的開發(fā)方式。(小團(tuán)隊(duì))
-
JenkinsCI 適合在多角色團(tuán)隊(duì)中,職責(zé)分明、配置與代碼分離、插件豐富。
四、安裝部署 GitLab 服務(wù)
GitLab 官方安裝方法:GitLab下載安裝_GitLab最新中文免費(fèi)版下載安裝-極狐GitLab
4.1 rpm 方式
清華源地址:Index of /gitlab-ce/yum/el7/ | 清華大學(xué)開源軟件鏡像站 | Tsinghua Open Source Mirror
# 下載安裝包
wget https://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/yum/el7/gitlab-ce-15.3.3-ce.0.el7.x86_64.rpm
# 安裝
yum install -y curl policycoreutils-python openssh-server perl
rpm -ivh gitlab-ce-15.3.3-ce.0.el7.x86_64.rpm
# 編輯站點(diǎn)地址(服務(wù)器節(jié)點(diǎn)的 ip)
vim /etc/gitlab/gitlab.rb
external_url 'http://192.168.170.133'
# 重載配置(過程會(huì)比較久,耐心等待)
gitlab-ctl reconfigure
# GitLab 服務(wù)控制
gitlab-ctl start # 啟動(dòng)服務(wù)
gitlab-ctl status # 查看狀態(tài)
gitlab-ctl stop # 停止服務(wù)
注:此方式安裝的 GitLab 服務(wù)是開機(jī)自啟的服務(wù)。?
4.2 Docker 方式
參考官方文檔:極狐GitLab Docker 鏡像 | 極狐GitLab?
4.3 Kubernetes 部署
參考官方文檔:使用 Helm 安裝極狐GitLab | 極狐GitLab文章來源:http://www.zghlxwxcb.cn/news/detail-590936.html
下一篇文章:【基于 GitLab 的 CI/CD 實(shí)踐】02、gitlab-runner 實(shí)踐_Stars.Sky的博客-CSDN博客?文章來源地址http://www.zghlxwxcb.cn/news/detail-590936.html
到了這里,關(guān)于【基于 GitLab 的 CI/CD 實(shí)踐】01、GitLab CI/CD 基礎(chǔ)概念的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!