关于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应用发布模型的实践全纪录相关推荐

  1. 阿里云Kubernetes服务上使用Tekton完成应用发布初体验

    Tekton 是一个功能强大且灵活的 Kubernetes 原生开源框架,用于创建持续集成和交付(CI/CD)系统.通过抽象底层实现细节,用户可以跨多云平台和本地系统进行构建.测试和部署. 本文是基于 ...

  2. 15分钟在阿里云Kubernetes服务上快速建立Jenkins X Platform并运用GitOps管理应用发布...

    本文主要介绍如何在阿里云容器服务Kubernetes上快速安装部署Jenkins X Platform并结合demo实践演示GitOps的操作流程. 注意: 本文中使用的jx工具.cloud-envi ...

  3. 在阿里云容器服务上,轻松搭建Concourse CI

    Concourse CI是一款CI/CD工具,它的魅力在于极简设计,被广泛应用于Cloud Foundry各个模块的CI/CD.阿里云也推出了CI工具CodePipeline,开箱即用,推荐试用. C ...

  4. 在阿里云容器服务上基于Istio实现出口Egress流量管理

    概述 在前面的文章中,介绍了在阿里云容器服务上基于Istio如何实现东西向流量管理. 回顾下引用的示例: 该样例应用由四个单独的微服务构成,用来演示多种 Istio 特性.该应用模仿某银行金融产品的一 ...

  5. 解锁高性能计算与区块链应用,阿里云Kubernetes服务召唤神龙

    摘要: 阿里云ECS弹性裸金属服务器(神龙)已经与其容器服务全面兼容,用户可以选择在弹性裸金属服务器上直接运行容器.管控Kubernetes/Docker容器集群,如此将会获得非常出色的性能.数倍提升 ...

  6. Knative 应用在阿里云容器服务上的最佳实践

    作者|元毅 阿里云智能事业群高级开发工程师 相信通过前面几个章节的内容,大家对 Knative 有了初步的体感,那么在云原生时代如何在云上玩转 Knative?本篇内容就给你带来了 Knative 应 ...

  7. mysql servicebroker_阿里云Kubernetes服务 - Service Broker快速入门指南

    4月底阿里云容器服务上线了基于Kubernetes集群的服务目录功能.阿里云的容器的服务目录遵循Open Service Broker API标准,提供了一系列的服务代理组件,实现了对主流开源服务如M ...

  8. 阿里云Kubernetes服务 - Service Broker快速入门指南

    4月底阿里云容器服务上线了基于Kubernetes集群的服务目录功能.阿里云的容器的服务目录遵循Open Service Broker API标准,提供了一系列的服务代理组件,实现了对主流开源服务如M ...

  9. 在阿里云容器服务上创建一个使用Redis的Python应用

    使用容器服务可以方便快速的创建应用,下面的例子展示如何在容器服务上创建一个使用Redis的Python应用,只需要简单的几步. 第一步:准备代码 由于只是一个例子,所以我不可能使用太复杂的应用代码. ...

最新文章

  1. 概率论中高斯分布(正态分布)介绍及C++11中std::normal_distribution的使用
  2. 高斯混合模型聚类实战(Gaussian Mixtures)
  3. 组策略管理——软件限制策略(5)
  4. mysql1067默认参数错误_MySQL 1067错误解决方法集合
  5. hyperf自定义注解类_swoole学习六hyperf注解的使用
  6. 深入浅出Java多线程
  7. 使用类似Lambda的语法切换为Java中的表达式
  8. spring boot admin 2.2 获取日志失败_SB实战20-Spring Boot的日志和报告
  9. WEB安全基础-Javascrp相关知识点之BOM
  10. 单CPU处理1s视频仅需37ms、GPU仅需10ms,谷歌提出TVN视频架构
  11. java中hashmap_Java HashMap – Java中的HashMap
  12. C#的目录与文件操作
  13. 小程序block标签配合if和else 和 动态修改标题栏
  14. 关于模电与数电的基础知识
  15. Intelligent reflecting surface (IRS) aided ISAC
  16. python画五角星代码_如何用python画一个五角星_python绘制五角形教程
  17. 实验——贝叶斯决策论预测贷款是否违约
  18. SimpleDateFormat多线程天坑
  19. 闲云野鹤:吃鸡(二)之场景制作—雾效的制作
  20. AForge学习笔记(4):AForge.Genetic

热门文章

  1. Java开发中如何用JDBC连接起数据库?
  2. php分页类smary,Smarty分页实现方法完整实例
  3. python dataframe遍历_对Python中DataFrame按照行遍历的方法
  4. python import如何使用_python之import引用
  5. C++数据的一些注意事项
  6. python增量更新数据_Python标准库——加密
  7. mysql 触发器 库存管理_Mysql中的触发器(库存、用户订单中用到)
  8. linux 删除含有关键词的文件_linux下查找包含关键字的文件
  9. 人间清醒!哈佛女硕士相亲平台找对象,霸气回应:扩大未来伴侣“候选人”样本!...
  10. 教授直言:学术界存在内卷化,而且非常严重;不改变量化式的管理模式,内卷化就不会消失...