阿里云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 新建任务,输入名称选择流水线类型并点击创建:
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.json
5.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.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应用:
原文链接
本文为云栖社区原创内容,未经允许不得转载。
阿里云Kubernetes服务上从零搭建GitLab+Jenkins+GitOps应用发布模型的实践全纪录相关推荐
- 阿里云Kubernetes服务上使用Tekton完成应用发布初体验
Tekton 是一个功能强大且灵活的 Kubernetes 原生开源框架,用于创建持续集成和交付(CI/CD)系统.通过抽象底层实现细节,用户可以跨多云平台和本地系统进行构建.测试和部署. 本文是基于 ...
- 15分钟在阿里云Kubernetes服务上快速建立Jenkins X Platform并运用GitOps管理应用发布...
本文主要介绍如何在阿里云容器服务Kubernetes上快速安装部署Jenkins X Platform并结合demo实践演示GitOps的操作流程. 注意: 本文中使用的jx工具.cloud-envi ...
- 在阿里云容器服务上,轻松搭建Concourse CI
Concourse CI是一款CI/CD工具,它的魅力在于极简设计,被广泛应用于Cloud Foundry各个模块的CI/CD.阿里云也推出了CI工具CodePipeline,开箱即用,推荐试用. C ...
- 在阿里云容器服务上基于Istio实现出口Egress流量管理
概述 在前面的文章中,介绍了在阿里云容器服务上基于Istio如何实现东西向流量管理. 回顾下引用的示例: 该样例应用由四个单独的微服务构成,用来演示多种 Istio 特性.该应用模仿某银行金融产品的一 ...
- 解锁高性能计算与区块链应用,阿里云Kubernetes服务召唤神龙
摘要: 阿里云ECS弹性裸金属服务器(神龙)已经与其容器服务全面兼容,用户可以选择在弹性裸金属服务器上直接运行容器.管控Kubernetes/Docker容器集群,如此将会获得非常出色的性能.数倍提升 ...
- Knative 应用在阿里云容器服务上的最佳实践
作者|元毅 阿里云智能事业群高级开发工程师 相信通过前面几个章节的内容,大家对 Knative 有了初步的体感,那么在云原生时代如何在云上玩转 Knative?本篇内容就给你带来了 Knative 应 ...
- mysql servicebroker_阿里云Kubernetes服务 - Service Broker快速入门指南
4月底阿里云容器服务上线了基于Kubernetes集群的服务目录功能.阿里云的容器的服务目录遵循Open Service Broker API标准,提供了一系列的服务代理组件,实现了对主流开源服务如M ...
- 阿里云Kubernetes服务 - Service Broker快速入门指南
4月底阿里云容器服务上线了基于Kubernetes集群的服务目录功能.阿里云的容器的服务目录遵循Open Service Broker API标准,提供了一系列的服务代理组件,实现了对主流开源服务如M ...
- 在阿里云容器服务上创建一个使用Redis的Python应用
使用容器服务可以方便快速的创建应用,下面的例子展示如何在容器服务上创建一个使用Redis的Python应用,只需要简单的几步. 第一步:准备代码 由于只是一个例子,所以我不可能使用太复杂的应用代码. ...
最新文章
- 概率论中高斯分布(正态分布)介绍及C++11中std::normal_distribution的使用
- 高斯混合模型聚类实战(Gaussian Mixtures)
- 组策略管理——软件限制策略(5)
- mysql1067默认参数错误_MySQL 1067错误解决方法集合
- hyperf自定义注解类_swoole学习六hyperf注解的使用
- 深入浅出Java多线程
- 使用类似Lambda的语法切换为Java中的表达式
- spring boot admin 2.2 获取日志失败_SB实战20-Spring Boot的日志和报告
- WEB安全基础-Javascrp相关知识点之BOM
- 单CPU处理1s视频仅需37ms、GPU仅需10ms,谷歌提出TVN视频架构
- java中hashmap_Java HashMap – Java中的HashMap
- C#的目录与文件操作
- 小程序block标签配合if和else 和 动态修改标题栏
- 关于模电与数电的基础知识
- Intelligent reflecting surface (IRS) aided ISAC
- python画五角星代码_如何用python画一个五角星_python绘制五角形教程
- 实验——贝叶斯决策论预测贷款是否违约
- SimpleDateFormat多线程天坑
- 闲云野鹤:吃鸡(二)之场景制作—雾效的制作
- AForge学习笔记(4):AForge.Genetic
热门文章
- Java开发中如何用JDBC连接起数据库?
- php分页类smary,Smarty分页实现方法完整实例
- python dataframe遍历_对Python中DataFrame按照行遍历的方法
- python import如何使用_python之import引用
- C++数据的一些注意事项
- python增量更新数据_Python标准库——加密
- mysql 触发器 库存管理_Mysql中的触发器(库存、用户订单中用到)
- linux 删除含有关键词的文件_linux下查找包含关键字的文件
- 人间清醒!哈佛女硕士相亲平台找对象,霸气回应:扩大未来伴侣“候选人”样本!...
- 教授直言:学术界存在内卷化,而且非常严重;不改变量化式的管理模式,内卷化就不会消失...