gitlab 将管理员权限移交给ldap账户_阿里云Kubernetes服务上搭建GitLab+Jenkins应用发布模型的实践...

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

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

1.1 新建Kubernetes集群:

421936200746fadcb27893f298929f64.png

1.2 新建命名空间gitops

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

4e34a5134befcbad6348da2587920206.png

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

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

bcbab4bf8d87bf2df4db4c2d9070af04.png

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

033813711ea048630fea1f01adf322c5.png

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

6433d8b556bf054f8664ae871a61943c.png
553a23c6b4dad8acfdb97d10de5cd88d.png

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

3.1 新建private group application

创建private group application:

fd6e0f0548acefc285c5cab3c49c6062.png

3.2 新建并上传private project application-demo

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

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

从master新建一个分支latest:

0ff533ac5b870647e1a3b9fe049089fa.png

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

f45628785a51dc6f1b50becf92121a3c.png
057ff50bab35a7faa9c6dc11707914b5.png

3.3 新建private group builds

f174e6146d286f3300d4e0cb5bcad6ce.png

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:

331c492cf4ab412ced6703a814a6992d.png

staging-pipeline

2e046ab59c6270ea80f9dfe1297e80a3.png

production-pipeline

b79d53b197b2bd8718f13285f7d15da3.png

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

554feb65c3eb1af75abd5dd804dc0ac7.png

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

fb227fb8d5410fa8adad64243e64d0f1.png

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

4cf2341b3c3672a2d08e66221d22dc3e.png

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

生成并复制保存apiToken:

8db073653cf5528ea16d80e5c1f03cc1.png

4. 创建Jenkins应用

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

6d9b121be6c2599f3a2d2a8c007b5b67.png

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

760694133992415d6246b1db518dfb6b.png

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

1a528ecafdb19725b7541cb2437a8e72.png
56f03609bce5451bae813023132f9434.png

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

5.1 配置gitlabConnection

系统管理 -> 系统设置 -> Gitlab:

312745adad9a954708b190352c693701.png
d70a953537358e369813eee5c673b527.png

配置完毕后点击 Save 保存。

5.2 新建构建任务preview-pipeline

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

c00ea29f0a2ce407ac3276a03e1331fb.png

5.2.2 Build Triggers 区域勾选 GitLab 插件配置如图所示:

516fd43d436290f997b800b96bf5a37e.png

点击 Advanced 进行高级选项配置如图所示:

7dc5f3c36fc036f6db95c57e38ab157d.png

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

5.2.3 Pipeline区域配置preview-pipeline构建项目的git repo

bddc418cb8613119d88e95f97198741c.png
291acb85b3a1ab77ea1dd7a49705989c.png

完成配置后点击 保存。

5.3 新建构建任务staging-pipeline

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

a20fb4b7088ecd56cc50035fe16cc1e1.png

5.3.2 Build Triggers 区域勾选 GitLab 插件配置如图所示:

b0b6d77c63365d747a10d1d4a1072b76.png

点击 Advanced 进行高级选项配置如图所示:

3477502a3f37caaada2973f60f8ad81f.png

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

5.3.3 Pipeline区域配置staging-pipeline构建项目的git repo

bddc418cb8613119d88e95f97198741c.png
7c372561429c5f9e22c01423378ff661.png

完成配置后点击 保存。

5.4 新建构建任务production-pipeline

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

cbddd11c4592e924b63d7b242254a363.png

5.4.2 Build Triggers 区域勾选 GitLab 插件配置如图所示:

a92a606ff82e5397f8656708ed09cf89.png

点击 Advanced 进行高级选项配置如图所示:

f7ab169c1894eb32c9f25bcbb874d496.png

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

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

bddc418cb8613119d88e95f97198741c.png
8d64af0ae5d0f91c23bf7d39a7c9bc35.png

完成配置后点击 保存。

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/v1kind: ClusterRoleBindingmetadata: name: gitops-cluster-adminsubjects: - kind: ServiceAccount name: default namespace: gitopsroleRef: kind: ClusterRole name: cluster-admin apiGroup: rbac.authorization.k8s.io$ kubectl create -f clusterrolebinding.yaml

5.7 设置匿名用户的可读权限

系统管理 ->全局安全管理-> Authorization -> 勾选 Allow anonymous read access 并保存:

6e489b454313e7869a27e48bec3dd2f9.png

6. 配置GitLab webhook

进入application-demo项目的webhook配置页面:

51ab24de1d87ceda1469761211fd2ab1.png

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

所图所示:

c4cb15a0f9a442564a076937d11f0893.png

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

所图所示:

8f21dc334d754dada4c0782728ea2eb4.png

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

所图所示:

4343660c2d0c1654b83f83af1e222d27.png

7. GitOps模型发布应用

7.1 developer用户做以下操作

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

624acca1030f727eecad61ef4ce59e93.png

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

7.1.3 创建请求合并到latest分支的Merge Request

f46da43a84adcc74b567ab1574d90b26.png

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页面的内容

7645eb6c7826a72914f2b51f603c6733.png

点击可跳转至jenkins构建日志:

41a8d1871f1d7e59d18997363d160efe.png

7.1.4 构建完成后可以看到一个application-demo应用的预览页面

3f7237f6be7c1749e1ad3fd62960c4ea.png

点击预览应用:

520fb62bcbd23d335e97ab01721dca51.png

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

51969ab08d6b9130439eb42838f24fe3.png

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

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

合并MR:

c620eff95d1304b740d7bdbe78093a38.png

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

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

a6d54f97730319d2d00aa39386bf9701.png
aaff0c873710b886e90d769aa3773e17.png

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

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

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

3573ac476b25092b5d83ec1df5fd6028.png
d5e2c2e8a37511eda3bdf56f6b520e6e.png

作者:流生

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值