阿里云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应用:


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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/519012.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

炸了!看到抖音上Python程序员晒得工资条,我沉默了......

Python上抖音热搜了?作为短视频爱好者,最近刷到了一个Python工程师的工资条:看完后,我相信大家和我一样,what,Python这么时候值钱了?今天就把真实市场环境给揭开!Python岗位大厂30K起&#xff1…

Pandas时序数据处理入门

作为一个几乎每天与时间序列数据打交道的人员,我发现panda Python包在时间序列的操作和分析方面有强大优势。 这篇关于panda时间序列数据处理的基本介绍可以带你入门时间序列分析。本文将主要介绍以下操作: 创建一个日期范围处理时间戳数据将字符串数据转换为时间…

linux shell脚本关闭指定端口号的进程

关闭指定进程中关键词的进程,最好找一个唯一标识 例如:项目名称 等等 文章目录一、管道方式1. 关闭指定程序进程号2. 关闭指定端口号的进程(推荐使用)3. 关闭指定进程关键词的进程(推荐使用)4. 操作记录5. 知识补充二、jps方式2.1. 使用场景说明2.2. 不同…

6 个步骤,教你在Ubuntu虚拟机环境下,用Docker自带的DNS配置Hadoop | 附代码

作者 | tianyouououou责编 | Carol来源 | CSDN 博客封图 | CSDN付费下载于视觉中国最近,作者整理了一套Hadoop搭建方案。最后的镜像大小1.4G多,使用docker子网,容器重新启动不需要重新配置/etc/hosts文件。配置过程中参考了如下博客&#xff…

开发函数计算的正确姿势——支持 ES6 语法和 webpack 压缩

首先介绍下在本文出现的几个比较重要的概念: 函数计算(Function Compute): 函数计算是一个事件驱动的服务,通过函数计算,用户无需管理服务器等运行情况,只需编写代码并上传。函数计算准备计算资源&#xff…

邮件格式转换html,HTML邮件模板 - lenglingx的个人页面 - OSCHINA - 中文开源技术交流社区...

邮件要求兼容 outlook 等邮箱软件,发现很多样式都不生效。找到的模板如下:尊敬的开发者:                         “xxx”在此次的‘网络友好度测试’评级:4颗星(最高5颗星)。注意点不支持头部style、外…

Apache Cassandra 数据存储模型

我们在《Apache Cassandra 简介》文章中介绍了 Cassandra 的数据模型类似于 Google 的 Bigtable,对应的开源实现为 Apache HBase,而且我们在 《HBase基本知识介绍及典型案例分析》 文章中简单介绍了 Apache HBase 的数据模型。按照这个思路,A…

解决Navicat 出错:1130-host . is not allowed to connect to this MySql server,MySQL

use mysql; select host,user from user; update user set host% where userroot; flush privileges;

Knative Eventing 中 Channel 如何注入默认 Provisioner

场景 通常的在创建Broker时,我们需要通过 spec.ChannelTemplate 指定使用某个具体的 Channel Provisioner。例如这样的Broker: apiVersion: eventing.knative.dev/v1alpha1 kind: Broker metadata:name: pubsub-channel spec:channelTemplate:provisioner:apiVers…

删库跑路事件发生,SaaS云服务如何守护数据安全

作者 | 蒋敏峰责编 | Carol封图 | CSDN付费下载于视觉中国近日,某SaaS服务商/微盟遭遇员工删库跑路,服务器出现大面积故障,一时间让平台上的几百万家商户生意基本停摆。这一事件发生后,不管是厂商还是平台上的用户,都在…

express模板引擎 html,Express使用html模板的代码分析

express默认使用jade模板,可以配置让其支持使用ejs或html模板。1.安装ejs在项目根目录安装ejs.npminstallejs2、引入ejsvarejsrequire(ejs);//我是新引入的ejs插件3、设置html引擎app.engine(html,ejs.__express);设置视图引擎app.set(viewengine,html)…

记一次吐血的ping: unknown host

背景: 某客户的ECS,ping域名提示unknown host,ping ip则可以通,ping的时候抓包没有解析的包出去,是解析的问题吗?1,测试ping域名以及抓包发现没有dns的解析包出去 # ping www.baidu.com -c 1 p…

Nacos Committer 张龙:Nacos Sync 的设计原理和规划

与你同行,抬头便是星空。 本文整理自Nacos Committer 张龙的现场分享,阿里巴巴中间件受权发布。 随着 Nacos 1.0.0 稳定版的发布,越来越多的企业开始在测试/预演/生产环境中逐步部署 Nacos。目前,除了部分企业已处于转型分布式架…

Linux 会成为主流桌面操作系统吗?

整理 | 屠敏出品 | CSDN(ID:CSDNnews)2020 年 1 月 14 日,微软正式停止了 Windows 7 系统的扩展支持,这意味着服役十年的 Windows 7,属于它的时代真的终结了,说不出的再见,只能怀恋。…

阿里搜索推荐系统又双叒叕升级了?!

搜索导购产品作为搜索的流量入口,承载了为用户导购推荐、搜索流量分流的重要功能。主要产品包括:首页底纹、下拉推荐、搜索发现、导航、历史搜索等。经过几年的探索和积累,各个产品越发地成熟,机器学习算法广泛地应用于导购产品中…

处理网络超时问题的最佳实践

对于云上的用户来说,业务日志里面报超时问题处理起来往往比价棘手,因为1) 问题点可能在云基础设施层,也有可能在业务软件层,需要排查的范围非常广;2) 这类问题往往是不可复现问题,抓到现场比较难。在本文里…

BZip2Codec压缩、Map端压缩控制、Reduce端压缩控制……都在这份Hadoop整合压缩知识点里了!...

作者 | Tai_Park责编 | Carol来源 | CSDN 博客封图 | CSDN付费下载于东方 IC今天来聊聊 Hadoop 的压缩。压缩:原始数据通过压缩手段产生目标数据,要求输入和输出的内容是一样的(大部分),但体积是不一样的。对于单机用户…

WAF+SLB负载不均衡案例分享

问题演变过程 时间点1:高防WAFSLB2台ECS 时间点2:高防WAFSLB4台ECS 问题描述 在时间点1时,没有发现明显的负载不均衡的情况。在时间点2时,出现大部分请求都打到了其中一台ECS上。需要定位问题原因 问题梳理 问题链路 是SLB后…

架构整洁之道, 看这一篇就够了!

程序的世界飞速发展,今天所掌握的技能可能明年就过时了,但有些知识历久弥新,掌握了它们,你在程序的海洋中就不会迷路,架构思想就是这样的知识。 本文是《架构整洁之道》的读书心得,作者将书中内容拆解后再组…

2019年度CSDN博客之星TOP10榜单揭晓,你上榜了吗?

培根说,『读书造成充实的人,会议造成未能觉悟的人,写作造成正确的人』。在短信短视频快速迭代的快时代,更深度的思考、更正确的实践,更成体系的写作与分享,尤显可贵。这里,每一篇博文都是开发者…