阿里云Kubernetes服务上从零搭建GitLab+Jenkins+GitOps应用发布模型的实践全纪录

本文详细介绍如何在Kubernetes集群中利用GitOps模型实现高效CICD流程。从创建集群、部署GitLab与Jenkins,到配置GitLab webhook及Jenkins构建任务,最后演示应用发布过程,全面覆盖GitOps关键步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

关于GitOps的介绍,可以参考 GitOps:Kubernetes多集群环境下的高效CICD实践

1. 在 容器服务控制台 创建kubernetes集群

1.1 新建Kubernetes集群:

1e3d14d534a5281622bed58bf3ba24c8669.jpg

1.2 新建命名空间gitops

我们将会把gitlab和jenkins全部部署到此命名空间下2486bc38b4307fc6208c060b0b855d263e2.jpg

2. 创建GitLab应用 (可选项,可以对接已有GitLab环境)

容器服务控制台上依次点击 市场 -> 应用目录 -> gitlab-ce :b532e47b73450e25619a2230db57d97819c.jpg

在 参数 中设置externalUrl和gitlabRootPassword后选择gitops命名空间并创建应用,本次实践中 externalUrl 设置为 http://ls-gitlab.example.com/, 如果没有dns解析的话,可以在创建成功后直接使用ipf7f44d6553cfc80b7d7c7337a6450eade52.jpg

容器服务控制台上依次点击 路由与负载均衡 -> 服务 查看gitlab应用的访问地址,大约2分钟后可访问gitlab并登陆:294c48545ebbc24e7a462b4e06308bee276.jpg

3. 设置GitLab并上传示例源码项目

3.1 新建private group application

创建private group application:0f194731f87479d3fdb3d3f34e5da154bda.jpg

3.2 新建并上传private project application-demo

创建private project application-demo, 示例源码地址:

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

3f3020d8a5856cbbf953cc57360ebe35be1.jpg

从master新建一个分支latest:

bd830dd35200390f08ae82b4b11b78c7a48.jpg

设置master和latest分支只有管理员才能merge和push代码的操作:ce1a61dcd598eaeaf7d9017aa463b0f89db.jpg

3.3 新建private group builds

9070a51398363341fed0e016ecf5ba41610.jpg

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:

d936818763c03b05813773ff3379aef2da6.jpg

staging-pipeline

e2c25ca84303ccd54286c885ee0f2339ecb.jpg

production-pipeline

0015b01098863eccfcb96e6b00746c31d0b.jpg

3.5 注册一个普通开发者用户developer

408a3d365b51c11a2bc39e05220f0778a9a.jpg

管理员用户登录后将developer用户添加为application组的developer member:f0b9beb9703f49fc138b7276466e60bea2d.jpg

此时developer用户只有application组下projects的权限, 没有builds组的权限:e1d8296a5f9d3376e0f76b61560e3530616.jpg

3.6 生成一个apiToken用于Jenkins配置gitlabConnection

生成并复制保存apiToken:

eeb5b23bb177c45b741356cdfb68e9ffcef.jpg

4. 创建Jenkins应用

容器服务控制台上依次点击 市场 -> 应用目录 -> jenkins:5a05db2ac6f5bc50a1bddb25946bae069c2.jpg

在 参数 中设置Master.AdminPassword的值,并更改rbac.install的值为true,选择gitops命名空间后点击创建:9465009a3c8c83ab748804ab7cee1bda65a.jpg

容器服务控制台上依次点击 路由与负载均衡 -> 服务 查看jenkins应用的访问地址,大约1分钟后可访问jenkins并登陆:1d171cc996337c1114dbf05946cb8e5fe5f.jpg

5. 配置Jenkins并创建构建任务

5.1 配置gitlabConnection

系统管理 -> 系统设置 -> Gitlab:3a2a5f5efad17afd9c52a83855aeb9e4791.jpg

配置完毕后点击 Save 保存。

5.2 新建构建任务preview-pipeline

5.2.1 新建任务,输入名称选择流水线类型并点击创建:b6d925d10abfe52115dccea901348f7d5c6.jpg

5.2.2 Build Triggers 区域勾选 GitLab 插件配置如图所示:
c192b1a14f63f2adbcdf78eff82ef375735.jpg
点击 Advanced 进行高级选项配置如图所示:b5af66c001280d4b1e3cccba1da4be7db23.jpg

复制并保存GitLab webhook URL和Secret token的值用于在Gitlab上配置webhook。

5.2.3 Pipeline区域配置preview-pipeline构建项目的git repoda4a7574cf0cd0f7a3628a7ddfd499e3a0c.jpg

完成配置后点击 保存。

5.3 新建构建任务staging-pipeline

5.3.1 新建任务,输入名称选择流水线类型并点击创建:6287c7e0469b92096ecaab52b816883bd2b.jpg

5.3.2 Build Triggers 区域勾选 GitLab 插件配置如图所示:
a47d486459d3855f71476e24da246d2596d.jpg
点击 Advanced 进行高级选项配置如图所示:6fbd5ede73d16817d17253e66476e5db6f0.jpg

复制并保存GitLab webhook URL和Secret token的值用于在Gitlab上配置webhook。

5.3.3 Pipeline区域配置staging-pipeline构建项目的git repo
410e8a11ba2088d5f8dad53bdab647b6ade.jpg45c6db3fcee76f34c5b4b866ac1eeccb3d8.jpg

完成配置后点击 保存。

5.4 新建构建任务production-pipeline

5.4.1 新建任务,输入名称选择流水线类型并点击创建:c4c1c7a56f11ef75713d0f8659a2e34949a.jpg

5.4.2 Build Triggers 区域勾选 GitLab 插件配置如图所示:
19d67c0823fdb4c6d590891310f3aa1ffd9.jpg
点击 Advanced 进行高级选项配置如图所示:7dfba5abc625d2068dc1aa9d6d8da83084f.jpg

复制并保存GitLab webhook URL和Secret token的值用于在Gitlab上配置webhook。

5.4.3 Pipeline区域配置production-pipeline构建项目的git repo
c2239c67d3a89a363b6e8595bdcda17638e.jpg5b47713f9c1be9df1ce2da9a0e5eced33c6.jpg

完成配置后点击 保存。

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 并保存:0091fce8bc4f5d7a69c2049a92e58bc1cef.jpg

6. 配置GitLab webhook

进入application-demo项目的webhook配置页面:27077813e6a6c0e22cce98bf5722d7056e7.jpg

6.1 配置触发jenkins job preview-pipeline的触发器

所图所示:

4979008c5cac0b6da9281c8b5882183ffe3.jpg

6.2 配置触发jenkins job staging-pipeline的触发器

所图所示:12538310a6088d79c6fe774844c8b8a0cd3.jpg

6.3 配置触发jenkins job production-pipeline的触发器

所图所示:85e5396672ef181c3c1f6839cbe35148307.jpg

7. GitOps模型发布应用

7.1 developer用户做以下操作

7.1.1 在application-demo项目上新建一个开发分支features/change-index-1f4ae02a2cf3fd0770440ec524cfe8edcfb2.jpg

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

7.1.3 创建请求合并到latest分支的Merge Requestaa088b591556500c470bed206086442b3f9.jpg

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页面的内容1980ba0c8778f2b01a253ee2c369edc8f4d.jpg

点击可跳转至jenkins构建日志:9d77bf9251a780065d373e04e79815aec99.jpg

7.1.4 构建完成后可以看到一个application-demo应用的预览页面
bce45ee6c8b22f5456304ddc76144904e7f.jpg
点击预览应用:

e7775fa801be328796d285dd0c39a311c79.jpg

也可以直接在钉钉群里查看应用访问链接等信息:38ebff90efa4e3ee6b050f8afd6672700db.jpg

7.1.5 应用预览验证后, developer可以申请管理员接受此合并

7.2 管理员合并指向latest分支的MergeRequest

合并MR:

9c2c6903273c85447e716fe3cdac34ff6ef.jpg

Accept MR的动作或触发staging-pipeline的构建,拉取application-demo项目的latest分支代码并构建和部署到staging命名空间下

查看钉钉通知并访问staging环境中的application-demo应用:ac1dbd7947ab37054e8cc2e999398dfa18b.jpg

7.3 管理员创建latest到master分支的Merge Request并合并此指向master的Merge Request

Accept MR的动作或触发production-pipeline的构建,拉取application-demo项目的master分支代码并构建和部署到production命名空间下

查看钉钉通知并访问production环境中的application-demo应用:f0d526ab12b0ed2d730030b4d29442dd32a.jpg


原文链接
本文为云栖社区原创内容,未经允许不得转载。

转载于:https://my.oschina.net/u/1464083/blog/3047403

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值