1. 程式人生 > >阿里雲Kubernetes服務上從零搭建GitLab+Jenkins+GitOps應用釋出模型的實踐全紀錄

阿里雲Kubernetes服務上從零搭建GitLab+Jenkins+GitOps應用釋出模型的實踐全紀錄

關於GitOps的介紹,可以參考 GitOps:Kubernetes多叢集環境下的高效CICD實踐

1. 在 容器服務控制檯 建立kubernetes叢集

1.1 新建Kubernetes叢集:

1.2 新建名稱空間gitops

我們將會把gitlab和jenkins全部部署到此名稱空間下

2. 建立GitLab應用 (可選項,可以對接已有GitLab環境)

容器服務控制檯上依次點選 市場 -> 應用目錄 -> gitlab-ce :

在 引數 中設定externalUrl和gitlabRootPassword後選擇gitops名稱空間並建立應用,本次實踐中 externalUrl

 設定為 http://ls-gitlab.example.com/, 如果沒有dns解析的話,可以在建立成功後直接使用ip

容器服務控制檯上依次點選 路由與負載均衡 -> 服務 檢視gitlab應用的訪問地址,大約2分鐘後可訪問gitlab並登陸:

3. 設定GitLab並上傳示例原始碼專案

3.1 新建private group application

建立private group application:

3.2 新建並上傳private project application-demo

建立private project application-demo, 示例原始碼地址:

https://code.aliyun.com/haoshuwei/application-demo.git

從master新建一個分支latest:

設定master和latest分支只有管理員才能merge和push程式碼的操作:

3.3 新建private group builds

3.4 新建並上傳private project preview-pipeline staging-pipeline production-pipeline

preview-pipeline示例原始碼地址為:

https://code.aliyun.com/haoshuwei/preview-pipeline.git

staging-pipeline示例原始碼地址為:

https://code.aliyun.com/haoshuwei/staging-pipeline.git

production-pipeline示例原始碼地址為:

https://code.aliyun.com/haoshuwei/production-pipeline.git

上傳3個構建專案之前需要替換以下欄位:
IMAGE_REPO:  應用容器映象要上傳到哪個映象倉庫,映象倉庫地址
dingTalkToken: 釘釘通知所使用的釘釘機器人accessToken
Fetch Git Repo -> credentialsId : 用於Jenkins拉取git專案的證書名稱,需要在Jenkins中建立名為gitlab的證書
Fetch Git Repo -> url : Jenkins拉取git repo的url

preview-pipeline:

staging-pipeline

production-pipeline

3.5 註冊一個普通開發者使用者developer

管理員使用者登入後將developer使用者新增為application組的developer member:

此時developer使用者只有application組下projects的許可權, 沒有builds組的許可權:

3.6 生成一個apiToken用於Jenkins配置gitlabConnection

生成並複製儲存apiToken:

4. 建立Jenkins應用

容器服務控制檯上依次點選 市場 -> 應用目錄 -> jenkins:

在 引數 中設定Master.AdminPassword的值,並更改rbac.install的值為true,選擇gitops名稱空間後點擊建立:

容器服務控制檯上依次點選 路由與負載均衡 -> 服務 檢視jenkins應用的訪問地址,大約1分鐘後可訪問jenkins並登陸:

5. 配置Jenkins並建立構建任務

5.1 配置gitlabConnection

系統管理 -> 系統設定 -> Gitlab:



 

配置完畢後點擊 Save 儲存。

5.2 新建構建任務preview-pipeline

5.2.1 新建任務,輸入名稱選擇流水線型別並點選建立:

5.2.2 Build Triggers 區域勾選 GitLab 外掛配置如圖所示:

點選 Advanced 進行高階選項配置如圖所示:

複製並儲存GitLab webhook URL和Secret token的值用於在Gitlab上配置webhook。

5.2.3 Pipeline區域配置preview-pipeline構建專案的git repo

完成配置後點擊 儲存。

5.3 新建構建任務staging-pipeline

5.3.1 新建任務,輸入名稱選擇流水線型別並點選建立:
image

5.3.2 Build Triggers 區域勾選 GitLab 外掛配置如圖所示:
image
點選 Advanced 進行高階選項配置如圖所示:
image

複製並儲存GitLab webhook URL和Secret token的值用於在Gitlab上配置webhook。

5.3.3 Pipeline區域配置staging-pipeline構建專案的git repo
image
image

完成配置後點擊 儲存。

5.4 新建構建任務production-pipeline

5.4.1 新建任務,輸入名稱選擇流水線型別並點選建立:

5.4.2 Build Triggers 區域勾選 GitLab 外掛配置如圖所示:

點選 Advanced 進行高階選項配置如圖所示:

複製並儲存GitLab webhook URL和Secret token的值用於在Gitlab上配置webhook。

5.4.3 Pipeline區域配置production-pipeline構建專案的git repo

完成配置後點擊 儲存。

5.5 建立docker registry auth secret:

$ docker login registry.cn-hangzhou.aliyuncs.com
$ kubectl -n gitops create secret generic jenkins-docker-cfg  --from-file=/root/.docker/config.json

5.6 建立clusterrolebinding授予serviceaccount default對gitops名稱空間的管理許可權

clusterrolebinding.yaml:

apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
  name: gitops-cluster-admin
subjects:
  - kind: ServiceAccount
    name: default
    namespace: gitops
roleRef:
  kind: ClusterRole
  name: cluster-admin
  apiGroup: rbac.authorization.k8s.io
$ kubectl create -f clusterrolebinding.yaml

5.7 設定匿名使用者的可讀許可權

系統管理 ->全域性安全管理-> Authorization -> 勾選 Allow anonymous read access 並儲存:

6. 配置GitLab webhook

進入application-demo專案的webhook配置頁面:

6.1 配置觸發jenkins job preview-pipeline的觸發器

所圖所示:

6.2 配置觸發jenkins job staging-pipeline的觸發器

所圖所示:

6.3 配置觸發jenkins job production-pipeline的觸發器

所圖所示:

7. GitOps模型釋出應用

7.1 developer使用者做以下操作

7.1.1 在application-demo專案上新建一個開發分支features/change-index-1

7.1.2 修改src/main/resources/static/index.html中的kubernetes.svg為jenkins.svg並提交修改

7.1.3 建立請求合併到latest分支的Merge Request

Open MergeRequest的動作會觸發jenkins job preview-pipeline的自動構建,並完成以下stages:
(1)拉取http://xxx.xxx.xxx/builds/preview-pipeline.git專案並按照Jenkins定義的內容繼續執行以下內容
(2)Fetch Git Repo: 拉取應用原始碼專案http://xxx.xxx.xxx.xxx/application/application-demo.git
(3)Maven Build: 打包
(4)Maven Test: 測試
(5)Docker Build And Publish: docker映象構建和推送
(6)Kubectl Deploy: 部署應用到Kubernetes叢集(本示例使用的是本叢集的一個動態建立的名稱空間preview-xxx)
(7)Post Actions: 釘釘通知

developer可以檢視Merge Request頁面的內容

點選可跳轉至jenkins構建日誌:

7.1.4 構建完成後可以看到一個application-demo應用的預覽頁面

點選預覽應用:

也可以直接在釘釘群裡檢視應用訪問連結等資訊:

7.1.5 應用預覽驗證後, developer可以申請管理員接受此合併

7.2 管理員合併指向latest分支的MergeRequest

合併MR:

Accept MR的動作或觸發staging-pipeline的構建,拉取application-demo專案的latest分支程式碼並構建和部署到staging名稱空間下

檢視釘釘通知並訪問staging環境中的application-demo應用:

7.3 管理員建立latest到master分支的Merge Request併合並此指向master的Merge Request

Accept MR的動作或觸發production-pipeline的構建,拉取application-demo專案的master分支程式碼並構建和部署到production名稱空間下

檢視釘釘通知並訪問production環境中的application-demo應用:

作者:流生

原文連結

本文為雲棲社群原創內容,未經