自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

使用GitLabCI實現(xiàn) 多模塊項目CI/CD

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

[[374935]]

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

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


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

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

  1. monorepo/ 
  2.     backend/ 
  3.         src/ 
  4.         Dockerfile 
  5.     frontend/ 
  6.         src/ 
  7.         Dockerfile 
  8.     .git/ 
  9.     .gitignore 
  10.     .gitlab-ci.yaml 
  11.     docker-compose.yaml 

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

CI/CD管道

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

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

  1. backend_build: 
  2.   stage: build 
  3.   only
  4.     changes: 
  5.       - "backend/**/*"   
  6.   ... 

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

  1. backend_build: 
  2.   ... 
  3.   script: 
  4.     - docker login -u $DOCKER_USER -p $ACCESS_TOKEN $CI_REGISTRY 
  5.     - cd backend 
  6.     - docker build -f Dockerfile --tag latest . 
  7.     - docker push latest 
  8.   ... 

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

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

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

總之,可以在monorepo中組織由幾個服務(wù)和庫組成的應(yīng)用程序的源代碼。盡管使用monorepo的部署更加復(fù)雜,但是僅需使用一個附加工具即可實現(xiàn)。GitLab是此類工具的一個示例,它結(jié)合了存儲庫管理,強大的CI / CD管道和私有Docker鏡像倉庫。

 

責(zé)任編輯:姜華 來源: DevOps云學(xué)堂
相關(guān)推薦

2023-04-18 08:17:11

GitLab持續(xù)集成

2022-02-22 09:00:00

軟件開發(fā)CI/CD 管道工具

2020-12-15 16:13:21

DevSecOpsCICD

2020-10-21 14:10:28

工具測試開發(fā)

2021-05-13 18:23:53

Tekton云原生Kubernetes

2021-01-21 06:06:30

Jenkins分支管道CI

2022-12-30 08:17:28

Gradle多模塊項目

2019-07-25 10:31:55

AWSDevOps架構(gòu)

2021-09-07 08:23:45

GitOpsCICD

2022-08-31 22:25:53

微服務(wù)架構(gòu)DevOPs

2021-02-10 08:24:47

微服務(wù)CICD

2021-07-02 16:30:01

CICDDevOps

2023-05-04 16:03:50

KubernetesCI/CD集成

2022-07-29 07:04:03

Docker鏡像容器

2023-01-30 15:55:08

2018-09-07 11:12:19

CICD工具

2020-06-05 07:20:41

測試自動化環(huán)境

2021-05-18 08:00:00

Kubernetes容器進程

2022-05-19 09:00:00

安全CI/CD工具
點贊
收藏

51CTO技術(shù)棧公眾號