日本综合一区二区|亚洲中文天堂综合|日韩欧美自拍一区|男女精品天堂一区|欧美自拍第6页亚洲成人精品一区|亚洲黄色天堂一区二区成人|超碰91偷拍第一页|日韩av夜夜嗨中文字幕|久久蜜综合视频官网|精美人妻一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
使用Zadig交付云原生微服務(wù)應(yīng)用

前面我們介紹了??使用 Zadig 交付一個非常簡單的應(yīng)用示例??,接下來我們來介紹下微服務(wù)項目如何在 Zadig 下進行交付。

讓客戶滿意是我們工作的目標,不斷超越客戶的期望值來自于我們對這個行業(yè)的熱愛。我們立志把好的技術(shù)通過有效、簡單的方式提供給客戶,將通過不懈努力成為客戶在信息化領(lǐng)域值得信任、有價值的長期合作伙伴,公司提供的服務(wù)項目有:主機域名、網(wǎng)絡(luò)空間、營銷軟件、網(wǎng)站建設(shè)、都昌網(wǎng)站維護、網(wǎng)站推廣。

微服務(wù)示例

我們這里使用到開源項目是 https://github.com/GoogleCloudPlatform/microservices-demo,該開源項目名叫 Online Boutique(https://onlineboutique.dev/),是一個云原生微服務(wù)演示應(yīng)用程序,其中包含 11 個微服務(wù),該應(yīng)用程序是一個基于 Web 的電子商務(wù)應(yīng)用程序,用戶可以在其中瀏覽商品、將它們添加到購物車并購買它們。

基于該項目針對 Zadig 做了優(yōu)化修改,項目地址:https://github.com/cnych/microservices-demo

該項目由 11 個使用不同語言編寫的微服務(wù)組成,它們通過 gRPC 相互通信。架構(gòu)如下所示。

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

每個服務(wù)的功能描述如下表所示。

服務(wù)功能

Zadig 項目

接下來我們來使用 Zadig 來交付該微服務(wù)項目,使用方式和前面基本類似。

首先新建一個名為 microservices-demo 的項目,項目類型為 K8s YAML 項目。

新建項目

點擊立即新建按鈕,然后進入項目初始化頁面。

項目初始化

點擊下一步進入到服務(wù)配置頁面,我們知道服務(wù)模板可以通過手動創(chuàng)建、代碼倉庫中同步或者現(xiàn)有 K8s 資源中導(dǎo)入而來。我們這里服務(wù)模板在代碼倉庫中,所以選擇從代碼庫中進行同步,選擇對應(yīng)的代碼倉庫、分支和對應(yīng)的資源清單目錄,然后點擊同步按鈕即可將對應(yīng)的服務(wù)同步到 Zadig 中來。

同步服務(wù)

可以看到我們這里同步過來后包含了 12 個服務(wù),每個服務(wù)的模板也都直接展示出來了,但是由于是通過倉庫同步的,模板是只讀模式,右側(cè)會自動讀取到服務(wù)對應(yīng)的鏡像信息。

注意:Zadig 讀取資源清單后,會以 K8s YAML 中的容器名作為唯一的 key 進行去重,所以在編寫 K8s YAML 的時候不要讓容器名重復(fù),否則導(dǎo)入后會丟失服務(wù)。

服務(wù)模板

點擊右側(cè)讀取到的鏡像服務(wù)組件后面的添加構(gòu)建按鈕,前往配置該服務(wù)的鏡像是如何進行構(gòu)建的。

首先需要添加服務(wù)代碼源信息,我們這里的代碼在 GitLab 上面,所以添加對應(yīng)的代碼倉庫以及分支信息。我們這里的所有服務(wù)代碼都位于代碼倉庫根目錄下面的 src 目錄下。

代碼結(jié)構(gòu)

這屬于典型的 Monorepo 類型的倉庫(單體),而里面的每個服務(wù)我們也并未配置成 submodule,所以每個服務(wù)構(gòu)建的時候均要將整個代碼倉庫 Clone 下來,但其實我們只需要其中的一個服務(wù)即可,Git 是支持這種操作的,比如我們現(xiàn)在只想要獲取 adservice 這個服務(wù)的數(shù)據(jù),可以通過下面的方式來獲取。

$ mkdir microservices-demo && cd microservices-demo
$ git init
$ git remote add origin git@git.k8s.local:course/microservices-demo.git
$ git config core.sparsecheckout true
$ git sparse-checkout set "src/adservice"
$ git pull --depth 1 origin main
remote: Enumerating objects: 307, done.
remote: Counting objects: 100% (307/307), done.
remote: Compressing objects: 100% (234/234), done.
remote: Total 307 (delta 72), reused 185 (delta 39), pack-reused 0
Receiving objects: 100% (307/307), 9.55 MiB | 5.28 MiB/s, done.
Resolving deltas: 100% (72/72), done.
From git.k8s.local:course/microservices-demo
* branch main -> FETCH_HEAD
* [new branch] main -> origin/main
$ ls -la src
total 0
drwxr-xr-x 3 cnych staff 96 Jul 15 14:10 .
drwxr-xr-x 4 cnych staff 128 Jul 15 14:10 ..
drwxr-xr-x 12 cnych staff 384 Jul 15 14:10 adservice

通過上面的方式可以只獲取指定目錄的代碼,但是遺憾的是 Zadig 目前并不支持該功能,或許后續(xù)會支持吧!

代碼源配置后,最主要的是添加通用構(gòu)建腳本。

構(gòu)建服務(wù)

我們這里其實就是配置如何構(gòu)建鏡像,對應(yīng)的腳本如下所示:

#!/bin/bash
set -e
cd $WORKSPACE/$REPONAME_0/src/adservice
docker build -t $IMAGE -f Dockerfile .
docker push $IMAGE

首先需要進入到當前服務(wù)的代碼根目錄下面,我們這里使用的是 cd $WORKSPACE/$REPONAME_0/src/adservice 命令,其中的 $WORKSPACE、$REPONAME_0、$IMAGE 均為內(nèi)置的構(gòu)建變量,$WORKSPACE 表示工作根目錄,而 $REPONAME_0 表示配置的第一個代碼倉庫的名稱,也就是 microservices-demo。

構(gòu)建變量

進入到服務(wù)根目錄下面后,我們只需要執(zhí)行 docker build 命令構(gòu)建鏡像即可,每個服務(wù)的根目錄下面均配置了 Dockerfile 文件,構(gòu)建的鏡像使用變量 $IMAGE 代替,會使用添加的默認的鏡像倉庫。

默認的鏡像命名規(guī)則如下所示,我們也可以自行定制。

鏡像命令規(guī)則

構(gòu)建配置完過后,記得保存構(gòu)建,用同樣的方式配置所有服務(wù)的構(gòu)建。

服務(wù)配置完成后下一步開始加入環(huán)境,同樣默認情況下會自動創(chuàng)建一套 dev 和 qa 的環(huán)境以及 3 條工作流。

加入環(huán)境

加入環(huán)境后就可以看到對應(yīng)的 3 條工作流了,點擊完成即可。

工作流

執(zhí)行工作流

這樣項目就創(chuàng)建成功了,現(xiàn)在我們先在 dev 環(huán)境來運行工作流。點擊執(zhí)行工作流,在服務(wù)中可以選擇我們要構(gòu)建的服務(wù),可以選擇一個也可以選擇多個服務(wù)。

執(zhí)行任務(wù)

同樣任務(wù)執(zhí)行后會執(zhí)行配置的通用腳本,然后將對應(yīng)的服務(wù)部署到 K8s 集群中去。

任務(wù)詳情

將所有的服務(wù)執(zhí)行完成后在環(huán)境頁面可以看到所有服務(wù)的狀態(tài)和最新鏡像信息。

dev環(huán)境

每個服務(wù)都正常部署到 dev 環(huán)境后,查看對應(yīng)的 Pod 狀態(tài):

$ kubectl get pods -n microservices-demo-env-dev
NAME READY STATUS RESTARTS AGE
adservice-5b5b97cf59-b7d6g 1/1 Running 0 21m
cartservice-7d66bd5c4-wxd6v 1/1 Running 0 15m
checkoutservice-6dbc8cdc46-fqrnx 1/1 Running 0 14m
currencyservice-54fccf7b9f-c29h5 1/1 Running 0 13m
emailservice-844b6c9b58-j5smc 1/1 Running 0 13m
frontend-649699cc5-s5ggp 1/1 Running 0 12m
loadgenerator-565cdbb5dc-6dtrb 1/1 Running 0 5m42s
paymentservice-fd8f95f79-4889n 1/1 Running 0 11m
productcatalogservice-775db476b6-l4s2t 1/1 Running 0 6m47s
recommendationservice-79f558bc9b-jx69n 1/1 Running 0 6m47s
redis-cart-f9bdd7959-qtc9n 1/1 Running 0 34m
shippingservice-f789c4494-ktbnz 1/1 Running 0 6m43s
$ kubectl get svc -n microservices-demo-env-dev
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
adservice ClusterIP 10.96.40.23 9555/TCP 41m
cartservice ClusterIP 10.110.0.136 7070/TCP 41m
checkoutservice ClusterIP 10.109.209.29 5050/TCP 41m
currencyservice ClusterIP 10.98.43.229 7000/TCP 41m
emailservice ClusterIP 10.101.67.47 5000/TCP 41m
frontend ClusterIP 10.96.37.222 80/TCP 41m
frontend-external LoadBalancer 10.109.168.181 192.168.0.53 80:30090/TCP 41m
paymentservice ClusterIP 10.105.223.48 50051/TCP 41m
productcatalogservice ClusterIP 10.102.112.64 3550/TCP 41m
recommendationservice ClusterIP 10.99.127.143 8080/TCP 41m
redis-cart ClusterIP 10.111.15.205 6379/TCP 41m
shippingservice ClusterIP 10.104.122.207 50051/TCP 41m

該服務(wù)最后是通過 frontend-external 這個 LoadBalancer 類型的 Service 來暴露的服務(wù),我們可以直接通過分配的 IP 192.168.0.53 來訪問服務(wù)了。

frontend external

觸發(fā)器

同樣我們也可以給服務(wù)添加觸發(fā)器來觸發(fā)任務(wù),在工作流編輯頁面點擊左側(cè)的觸發(fā)器添加,勾選 Webhook -> 添加配置,我們可以先添加一個只針對 adservice 這個服務(wù)的觸發(fā)器,選擇對應(yīng)的代碼庫、要部署的服務(wù),最關(guān)鍵的是文件目錄部分的配置,也就是代碼倉庫中的什么文件變更才會觸發(fā)我們的任務(wù),我們的配置為:

src/adservice/
!.md
!.gitignore

該段配置的表示當代碼倉庫中 src/adservice/ 目錄下面的代碼有變更,并且不是 .md 或者 .gitignore 文件則會觸發(fā)任務(wù)。

觸發(fā)器

配置后記得保存?,F(xiàn)在我們可以去修改下 adservice 服務(wù)中的代碼,修改代碼 src/adservice/src/main/java/hipstershop/AdService.java,比如我們將 177 行的 50%修改為 60%,然后提交代碼到 main 分支。

修改代碼

當我們將上述代碼 push 到 main 分支后,Zadig 就立即觸發(fā)了一次新的任務(wù)。

webhook trigger

該任務(wù)執(zhí)行成功后我們可以去查看該產(chǎn)品的頁面是否生效。

驗證修改

到這里我就實現(xiàn)了該微服務(wù)項目的持續(xù)構(gòu)建,同樣的我們可以去手動創(chuàng)建一個環(huán)境來進行交付,操作方式一樣的。

測試用例

此外我們還可以來新建一些測試用例,在測試頁面點擊新建測試按鈕即可開始創(chuàng)建測試用例。

新建測試

比如我們這里對一個 go 服務(wù)做一次簡單的測試,在依賴的軟件包中可以選擇對應(yīng)的依賴,如果沒有對應(yīng)的軟件包,則可以新建一個。

軟件依賴

比如我們需要一個 1.17 版本的 go 環(huán)境,可以通過 系統(tǒng)設(shè)置 -> 軟件包管理 新建一個軟件包。

新建軟件包

然后我們重新去創(chuàng)建一個測試用例,選擇相應(yīng)的依賴,同樣配置對應(yīng)的代碼源和測試腳本。

測試腳本

創(chuàng)建后可以用同樣的方式來執(zhí)行該測試用例。

執(zhí)行測試

測試詳情頁面和工作流的任務(wù)頁面基本上一致。

測試詳情

同樣也可以看到對應(yīng)的測試報告。

測試報告

此外我們還可以將自動化測試和工作流關(guān)聯(lián)起來,當日常運行工作流更新環(huán)境后,會自動執(zhí)行自動化測試??梢詫崿F(xiàn)只要環(huán)境有變更,就第一時間對其做自動化測試。

關(guān)聯(lián)工作流

關(guān)聯(lián)后啟動工作流任務(wù)就可以看到有該測試用例了。

測試用例

工作流

Zadig 還會為我們的構(gòu)建數(shù)據(jù)進行統(tǒng)計,提供構(gòu)建效能、部署效能等數(shù)據(jù)。

構(gòu)建效能

到這里我們就完成了使用 Zadig 來對微服務(wù)項目進行持續(xù)集成和交付,當然在實際的生產(chǎn)環(huán)境中和具體的項目業(yè)務(wù)有關(guān)系,這就需要能夠結(jié)合實際需求去實踐了。


分享標題:使用Zadig交付云原生微服務(wù)應(yīng)用
標題來源:http://www.dlmjj.cn/article/dphppei.html