阿里云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.gitstaging-pipeline示例源碼地址為:
https://code.aliyun.com/haoshuwei/staging-pipeline.gitproduction-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 新建任務,輸入名稱選擇流水線類型并點擊創建:
5.3.2 Build Triggers 區域勾選 GitLab 插件配置如圖所示:
點擊 Advanced 進行高級選項配置如圖所示:
復制并保存GitLab webhook URL和Secret token的值用于在Gitlab上配置webhook。
5.3.3 Pipeline區域配置staging-pipeline構建項目的git repo
完成配置后點擊 保存。
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.json5.6 創建clusterrolebinding授予serviceaccount default對gitops命名空間的管理權限
clusterrolebinding.yaml:
apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRoleBinding metadata:name: gitops-cluster-admin subjects:- kind: ServiceAccountname: defaultnamespace: gitops roleRef:kind: ClusterRolename: cluster-adminapiGroup: rbac.authorization.k8s.io $ kubectl create -f clusterrolebinding.yaml5.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應用:
原文鏈接
本文為云棲社區原創內容,未經允許不得轉載。
總結
以上是生活随笔為你收集整理的阿里云Kubernetes服务上从零搭建GitLab+Jenkins+GitOps应用发布模型的实践全纪录的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 阿里大规模数据中心性能分析
- 下一篇: 阿里巴巴在内蒙古旱区试水物联网灌溉技术,