溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

如何使用GitLabCI實(shí)現(xiàn)多模塊項(xiàng)目CI/CD

發(fā)布時(shí)間:2021-09-06 15:04:14 來(lái)源:億速云 閱讀:310 作者:小新 欄目:web開發(fā)

這篇文章將為大家詳細(xì)講解有關(guān)如何使用GitLabCI實(shí)現(xiàn)多模塊項(xiàng)目CI/CD,小編覺得挺實(shí)用的,因此分享給大家做個(gè)參考,希望大家閱讀完這篇文章后可以有所收獲。

Monorepo在開發(fā)多服務(wù)應(yīng)用程序方面的優(yōu)勢(shì)。以及如何使用GitLab CI/CD和Docker輕松構(gòu)建,測(cè)試和部署此類應(yīng)用程序。

基于現(xiàn)代Web的應(yīng)用程序通常都包含多種服務(wù)。例如,后端API和前端客戶端。在規(guī)模擴(kuò)大成為問(wèn)題的大型項(xiàng)目中,服務(wù)也可以拆分為多個(gè)微服務(wù)。如何在這樣的項(xiàng)目中組織源代碼?一種解決方案是monorepo,即項(xiàng)目中所有源代碼在同一個(gè)存儲(chǔ)庫(kù)中管理。還有一種是每個(gè)微服務(wù)分別創(chuàng)建一個(gè)存儲(chǔ)庫(kù)管理。monorepo方法允許輕松訪問(wèn)整個(gè)代碼庫(kù),這帶來(lái)了許多優(yōu)勢(shì),例如易于代碼重用、簡(jiǎn)化了依賴性管理。但每服務(wù)語(yǔ)義版本控制和部署過(guò)程將會(huì)更加復(fù)雜。

如何使用GitLabCI實(shí)現(xiàn)多模塊項(xiàng)目CI/CD

我將通過(guò)一個(gè)示例項(xiàng)目來(lái)解釋monorepo的概念及其部署。該項(xiàng)目是一個(gè)僅由兩項(xiàng)服務(wù)組成的Web應(yīng)用程序:后端和前端。例如,后端可以是運(yùn)行在服務(wù)器上并提供REST或GraphQL  API的Node.js應(yīng)用程序。前端可以是用JavaScript框架(例如React或Vue.js)編寫的單頁(yè)應(yīng)用程序,該應(yīng)用程序由一個(gè)簡(jiǎn)單的Web服務(wù)器提供給客戶端。

所有源代碼都在一個(gè)monorepo中進(jìn)行管理。我們的簡(jiǎn)單項(xiàng)目的文件結(jié)構(gòu)如下:

monorepo/     backend/         src/         Dockerfile     frontend/         src/         Dockerfile     .git/     .gitignore     .gitlab-ci.yaml     docker-compose.yaml

在本地開發(fā)過(guò)程中以及服務(wù)器上的生產(chǎn)版本中,我們使用Docker容器。因此,每個(gè)服務(wù)都有一個(gè)Dockerfile描述其Docker鏡像。該文件docker-compose.yaml用于在本地開發(fā)環(huán)境中配置和啟動(dòng)容器??梢栽诜?wù)器上使用類似的文件來(lái)運(yùn)行應(yīng)用程序,或者您也可以使用Docker編排工具,例如Kubernetes。

CI/CD管道

我們的目標(biāo)是每次發(fā)布新版本(即“代碼提交到GitLab”)時(shí)自動(dòng)將應(yīng)用程序構(gòu)建,測(cè)試和部署到服務(wù)器。這包括構(gòu)建和測(cè)試服務(wù),將每個(gè)服務(wù)捆綁在Docker映像中,并將這些映像存儲(chǔ)在(私有)GitLab  Docker Registry中。最后,服務(wù)器會(huì)自動(dòng)收到有關(guān)新版本的通知,并會(huì)觸發(fā)從注冊(cè)表中提取新映像。所有這些都可以通過(guò)GitLab CI /  CD來(lái)實(shí)現(xiàn)。這是一個(gè)非常強(qiáng)大的工具?;旧希珿itLab CI /  CD管道包括幾個(gè)階段如build,test和deploy。該管道配置有一個(gè)名為.gitlab-ci.yaml的文件,該文件存儲(chǔ)在我們存儲(chǔ)庫(kù)的根目錄中。如果是monorepo,我們必須確保觸發(fā)了GitLab  CI / CD管道的正確階段。而且,我們通常只希望構(gòu)建,測(cè)試和部署應(yīng)用程序中已更改的那些服務(wù),而不是將所有服務(wù)都合并在一起,因?yàn)檫@可能會(huì)非常耗時(shí)。

在.gitlab-ci.yaml文件中我們?yōu)槊總€(gè)服務(wù)和每個(gè)階段定義job。為了確保僅在更改服務(wù)源代碼后才執(zhí)行該服務(wù)的作業(yè),我們可以將only/changes子句與文件夾路徑的正則表達(dá)式結(jié)合使用。例如,后端服務(wù)的構(gòu)建作業(yè)可以定義如下:

backend_build:   stage: build   only:     changes:       - "backend/**/*"     ...

script在job部分中只需四行代碼即可構(gòu)建后端服務(wù)的Docker鏡像并將其推送到GitLab Docker Registry 。

backend_build:   ...   script:     - docker login -u $DOCKER_USER -p $ACCESS_TOKEN $CI_REGISTRY     - cd backend     - docker build -f Dockerfile --tag latest .     - docker push latest   ...

在第一行中,我們使用用戶名和訪問(wèn)令牌登錄到GitLab Docker  Registry,該用戶名和訪問(wèn)令牌先前已在變量名稱$DOCKER_USER和中定義$ACCESS_TOKEN(在GitLab項(xiàng)目的設(shè)置中)。然后,我們轉(zhuǎn)到backend/文件夾,運(yùn)行Docker  build命令,最后將鏡像推送到注冊(cè)表。

我們的服務(wù)測(cè)試可以在另一個(gè)job中執(zhí)行,例如backend_test。所需的命令和腳本在很大程度上取決于我們項(xiàng)目的測(cè)試基礎(chǔ)結(jié)構(gòu),但基本上,我們調(diào)用的腳本與在本地開發(fā)環(huán)境中使用的腳本相同。使用GitLab  CI /  CD也可以進(jìn)行更復(fù)雜的測(cè)試,例如集成或端到端測(cè)試。構(gòu)建并存儲(chǔ)在注冊(cè)表中后,可以輕松地將服務(wù)的Docker鏡像放入CI/CD管道中,并在測(cè)試中用作服務(wù)容器。

一旦構(gòu)建和測(cè)試,我們的Docker鏡像就可以部署了。我們?yōu)閼?yīng)用程序的每個(gè)服務(wù)定義部署作業(yè),在其中登錄服務(wù)器并觸發(fā)從GitLab  Docker鏡像倉(cāng)庫(kù)中提取新映像。

關(guān)于“如何使用GitLabCI實(shí)現(xiàn)多模塊項(xiàng)目CI/CD”這篇文章就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,使各位可以學(xué)到更多知識(shí),如果覺得文章不錯(cuò),請(qǐng)把它分享出去讓更多的人看到。

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI