持续交付/持续部署流水线介绍(CD)

目录

一、概述

二、典型操作流程

2.1 CI/CD典型操作流

2.2 CI/CD操作流程说明

2.3 总结

三、基于GitHub+Docker的持续交付/持续部署流水线(公有云)

3.1 基于GitHub+Docker的持续交付/持续部署操作流程示意图

3.2 GitHub+Docker持续交付/持续部署流水线技术实现原理

3.2.1 添加Action模板

3.2.2 构建Workflow流程

四、基于Jenkins+Docker+K8s的持续交付/持续部署流水线

4.1 Jenkins+Docker+K8s持续部署流程示意图

4.2 Jenkins+Docker+K8s持续部署流水线技术实现原理

4.2.1 安装KubeOperator

4.2.2 Jenkins配置

4.2.2.1 安装Jenkins K8s插件

4.2.2.2 配置K8s凭据

4.2.2.3 配置K8s集群连接

4.2.2.4 Jenkinsfile 文件编写

4.2.3 总结


一、概述

在实际工作中,CI/CD通常是在一起的。但是为了详细地向大家讲述其中涉及的技术要求将其拆分,分别向大家讲述持续交付、持续部署与持续集成的流程,方便大家理解自动化流程是如何从测试环境向生产环境变化过渡的,下面就从这些变化点,结合前文的CI流程,来介绍CD操作流程和使用场景。并介绍公有云基于GitHub+Docker的持续交付/持续部署流水线方案和私有云基于Jenkins+Docker+K8s的持续交付/持续部署流水线方案

二、典型操作流程

2.1 CI/CD典型操作流

无论是中小型企业还是大型互联网企业,当企业DevSecOps能力完成CD全流程覆盖时,通常选择容器技术来构建,其典型操作流程和使用场景大体如下图所示:

2.2 CI/CD操作流程说明

上图操作流程主要步骤如下:

  1. 开发人员提交代码到GitHub代码仓库。
  2. 版本控制系统发起更新通知,触发CI自动构建动作。
  3.  CI完成持续集成构建后,最终生成可用于部署的Docker镜像。
  4. 推送Docker镜像到容器注册表。
  5. CD同步K8s更新配置,触发部署服务。
  6.  K8s集群管理通过容器注册表和配置信息,拉取Docker镜像。
  7.  完成容器实例创建,并运作。

在这些步骤中,读者可以看出步骤4)及之前是前文CI持续集成流程中所讲述的内容;步骤4)之后,是文本所讲述的内容。在整个流程中,黄金管道的流水线能力仍是流程的核心,通过流水线对流程的代码化,完成镜像打包到镜像管理、镜像注册、应用发布、应用更新等多个使用场景的自动化。使用者通过脚本或代码,依托流水线能力的调度,贯穿部署、更新流程,降低因手工操作带来的出错率,同时将重复性的、枯燥的工作代码化,将人力资源释放出来做更有价值的事,提升了整体的工作效率。

2.3 总结

在企业内部,构建持续交付、持续部署的平台能力时,和持续集成能力的构建一样,可以选择依托公有云厂商的能力来建设,也可以在企业内部私有云的基础上自行建设。在构建时选择哪种方式主要依赖于其企业的基础设施资产是什么形态的,如果是公有云上的资产为主,建议依托云厂商能力来构建。反之,则建议企业自建。在企业自建的过程中,目前主要是以容器化技术去构建应用级持续交付及持续部署能力。

三、基于GitHub+Docker的持续交付/持续部署流水线(公有云)

3.1 基于GitHub+Docker的持续交付/持续部署操作流程示意图

这里继续使用GitHub平台的GitHub Actions功能,在原有流程上添加持续交付/持续部署的流程,其中步骤变化点有:代码构建完成后添加容器镜像构建、镜像文件上传/注册、服务器部署等,最终形成的流程示意图如下图所示:

在这个方案里,CI/CD流水线使用GitHub Actions,容器镜像管理使用阿里云ACR,配置管理使用GitHub Actions,K8s集群环境管理使用阿里云ACK。下面就跟大家一起来看看整个流程的具体实现。

3.2 GitHub+Docker持续交付/持续部署流水线技术实现原理

3.2.1 添加Action模板

在前文中已经对GitHub Actions的使用和相关语法做了详细的介绍,当需要持续交付/持续部署能力时,只需要调整YAML文件,定义CD流程中的各个操作即可。编写此文件时,可以在GitHub手工添加Action模板,如下图所示:

3.2.2 构建Workflow流程

添加完毕后,将得到文件名为alibabacloud.yml的模板文件,如下图所示,再基于此定制化修改为自己想要的Workflow流程即可。

当以Java SpringBoot应用程序为例,仅需调整文件中的环境变量和代码构建部分内容即可,如下即为需要修改的:

当上述配置完成后,GitHub Actions被触发时,自动执行部署流程。大家可以在GitHub上对流程进行跟踪,也可以通过阿里云的ACK跟踪流程执行结果。

四、基于Jenkins+Docker+K8s的持续交付/持续部署流水线

除了使用GitHub+Docker构建持续交付/持续部署流水线外,私有化平台建设的场景下,使用Jenkins+Docker+K8s作为技术栈也是比较常见的。在这一小节中,将为大家讲述基于Jenkins+Docker+K8s的持续交付/持续部署流水线实现。

4.1 Jenkins+Docker+K8s持续部署流程示意图

当选择私有化方案替代上节的GitHub Actions时,在流程上并没有大的变化,变化更多的是在技术实现上,如代码管理使用GitLab、CI/CD调度使用Jenkins、镜像管理使用Harbor、容器集群管理使用K8s等。最终形成的流程示意图如下图所示:

4.2 Jenkins+Docker+K8s持续部署流水线技术实现原理

基于这个方案,一起来看看整个流程的具体技术实现。

4.2.1 安装KubeOperator

已经安装过K8s的读者,想必对K8s复杂的安装过程较为熟悉,如果对K8s不熟悉也没关系,它不是本节的重点。想学习的读者,推荐安装开源产品KubeOperator,如下图所示:

KubeOperator是飞致云开源的轻量级Kubernetes发行版,它的安装非常简单,在满足基本配置的基础上,执行一键安装脚本即可。同时KubeOperator采用Terraform自动创建虚机,采用Ansible作为自动化部署工具,这也是和本书基础设施安全相关章节的内容一致。

4.2.2 Jenkins配置

4.2.2.1 安装Jenkins K8s插件

使用Jenkins管理K8s,首先需要安装Jenkins K8s插件。登录Jenkins后,依次选择【系统管理】→【插件管理】,在搜索框中搜索kubernetes,选择Kubernetes,单击【安装】按钮,完成后重启Jenkins即可,如下图所示:

4.2.2.2 配置K8s凭据

等插件安装完成重启Jenkins后,接着需要配置K8s凭据。登录系统,依次选择【用户】→【凭据】→【全局凭据】,添加凭据类型,推荐选择X.509 Client Certificate,如下图所示:

这里需要注意的是以下3项内容,均来源于.kube/config文件,需要登录K8s集群查看后填写,如下:

  • Client Key,即.kube/config文件中client-key值对应的文件。
  • Client Certificate,即. kube/config文件中client-certificate值对应的文件,格式为crt或pem。
  • Server CA Certificate,即. kube/config文件中certificate-authority值对应的文件,格式同上。
4.2.2.3 配置K8s集群连接

凭据配置完成后,接下来即可配置K8s集群连接了。依次选择【系统管理】→【管理节点与云】→【云配置】,开始配置集群,如下图所示:

这里,K8s集群相关配置内容比较多,单击上图中的第二个输入框【Kubernetes Cloud details...】,详细输入如下图所示内容:

图中的各输入项含义如下:

  • Kubernetes地址,即Kubernetes服务地址,一般填写Master节点IP地址加端口。
  • Kubernetes服务证书key,即前文提及的kube-ca.crt文件内容。
  • Kubernetes命名空间,即前文提及的kube-ca.crt文件内容。
  • JNLP Docker Registry,即自定义JNLP容器镜像地址,用于Jenkins工作节点容器化,如使用K8s插件,Jenkins通过Job动态生成工作节点(Pod),并在结束后销毁容器。
  • 凭据,即前文创建的certificate凭据。

除了上述参数之外,还有Jenkins和Pod相关配置参数项,如下图所示:

除了Jenkins地址需要填写Jenkins Master地址之外,其他的值可以默认。配置完成后,即可以编写Jenkinsfile来操作Pipline。需要注意的是,Jenkins调用Pod管理的ServiceAccount需要先在K8s集群上创建好。

4.2.2.4 Jenkinsfile 文件编写

Jenkinsfile的编写比较简单,为了便于读者的理解,这里以Jenkinsfile伪码的形式展示其基本结构,其包含的操作步骤如下:

  1. 拉取代码。
  2. 编译+单元测试。
  3. 构建镜像文件。
  4. 上传镜像仓库。
  5. 发布到K8s集群。

此时,Jenkinsfile伪码内容如下所示(重点关注加粗部分的内容):

当K8s的发布环境区分测试环境、准生产环境、生产环境时,可以通过此方式完成不同环境的部署发布及回滚设置,以满足灰度发布、蓝绿发布、滚动发布等发布要求。

4.2.3 总结

通过上述内容的介绍,大家基本理解Jenkins+Docker+K8s持续部署流水线技术实现原理及其关键步骤,但Docker、K8s、Jenkins等技术细节涉及的内容比较繁杂,仍需要大家进一步学习其他资料,以便在此基础上,深入理解云原生技术与DevSecOps自动化实现的关系。后续有时间,我会再整理发布跟个部署构建相关教程文档吧,回头再说。。。。。。。

好了,本次内容就分享到这,欢迎大家关注《DevSecOps》专栏,后续会继续输出相关内容文章。如果有帮助到大家,欢迎大家点赞+关注+收藏,有疑问也欢迎大家评论留言!

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

总结TCP协议各类知识点

前言 本篇博客博主将详细地介绍TCP有关知识点,坐好板凳发车啦~ 一.TCP特点 1.有连接 TCP传输的过程中类似于打电话的各个过程 2.可靠传输 通过TCP自身的多种机制来保证可靠传输 3.面向字节流 内容是以字节的方式来进行发送与接收 4.缓冲区 TCP有接收缓冲区…

智慧驿站式的“智慧公厕”,给城市新基建带来新变化

随着智慧城市建设的推进,智慧驿站作为一种多功能城市部件,正逐渐在城市中崭露头角。这些智慧驿站集合了智慧公厕的管理功能,为城市的新基建带来了全新的变革。本文以智慧驿站智慧公厕源头实力厂家广州中期科技有限公司,大量精品案…

基于UML的系统分析与设计

统一建模语言(Unified Modeling Language,UML)是一种为面向对象系统的产品进行说明、可视化和编制文档的一种标准语言,是非专利的第三代建模和规约语言。UML是面向对象设计的建模工具,独立于任何具体程序设计语言。 毕业设计是实现本科教学培…

Ps:颜色查找

颜色查找 Color Lookup命令通过应用预设的 LUT 来改变图像的色彩和调性,从而为摄影师和设计师提供了一种快速实现复杂色彩调整的方法,广泛应用于颜色分级、视觉风格的统一和创意色彩效果的制作。 Ps菜单:图像/调整/颜色查找 Adjustments/Colo…

Unity自定义框架(1)-----------单例模式

前言: Unity作为一款强大的游戏开发引擎,其基础框架的设计对于项目的结构和性能有着重要的影响。其中,单例模式是一种常用的设计模式,用于确保一个类只有一个实例,并提供一个全局访问点。 什么是单例模式&#xff1f…

练习 16 Web [极客大挑战 2019]LoveSQL

extractvalue(1,concat(‘~’, (‘your sql’) ) )报错注入,注意爆破字段的时候表名有可能是table_name不是table_schema 有登录输入框 常规尝试一下 常规的万能密码,返回了一个“admin的密码”: Hello admin! Your password is…

【Redis】NoSQL之Redis的配置和优化

关系型数据库与非关系型数据库 关系型数据库 关系型数据库是一个结构化的数据库,创建在关系型模型(二维表)的基础上;一般面向于记录; SQL语句(标准数据查询语句)就是一种基于关系型数据库的语言,用于执行…

【文化课学习笔记】【数学】复数

【数学】复数 定义 规定 \(i^2 -1\),并称 \(i\) 为虚数单位。则 \(i^3 -i,i^4 (i^2)^2 1,i^5 i^4 \cdot i i\),所以 \(i^k\) 具有周期性,周期为 \(4\)。 复数: \[z a bi(a,b \in \mathrm R) \] 其中 \(a\) 为实部&#xf…

数据仓库实践

什么是数据仓库? 数据仓库是一个用于存储大量数据并支持数据分析与报告的系统。它通常用于集成来自不同来源的数据,提供一个统一的视图,以便进行更深入的分析和决策。 数据仓库的主要优势? 决策支持:为企业决策提供可靠…

景联文科技提供高质量医疗健康AI大模型数据

医疗行业是典型的知识和技术密集型行业,其发展水平直接关系到国民健康和生命质量。 医疗健康AI大模型,作为人工智能的一个分支,能够通过学习大量的数据来生成新的数据实例,在医药研发、医学影像、医疗文本分析等都有广泛的应用前景…

HarmonyOS 应用开发之LifecycleForm接口切换LifecycleApp接口切换 LifecycleApp接口切换

LifecycleForm接口切换 FA模型接口Stage模型接口对应d.ts文件Stage模型对应接口onCreate?(want: Want): formBindingData.FormBindingData;ohos.app.form.FormExtensionAbility.d.tsonAddForm(want: Want): formBindingData.FormBindingData;onCastToNormal?(formId: string…

【LeetCode热题100】17. 电话号码的字母组合(回溯)

一.题目要求 给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合。答案可以按 任意顺序 返回。 给出数字到字母的映射如下(与电话按键相同)。注意 1 不对应任何字母。 二.题目难度 中等 三.输入样例 示例 1: 输入…

macbook更改默认打开方式

1、mac上更改文件的默认打开方式,例如将.sql文件默认方式改成文本编辑 2、单击右键(两指单机触摸板)-> 显示简介 -> 打开方式 -> 选择新的默认打开方式 -> 全部更改 3、再次打开就设置完成了

Redission--布隆过滤器解决缓存穿透问题

布隆过滤器在缓存穿透问题中的使用 布隆过滤器的核心是一个位数组 布隆过滤器的误判 使用Redission的布隆过滤器步骤 添加 Redission 依赖:首先需要将 Redission 添加到你的 Java 项目中,你可以通过 Maven 来添加 Redission 的依赖。 创建 Redissio…

记录几个常用命令

目录 一、查询历史命令 二、启动java容器 三、启动java容器并联通mysql容器 一、查询历史命令 # 查出所有"docker run"的历史命令 history | grep "docker run" 二、启动java容器 docker run -itd --name atcc-door -v /home/wwwroot/atcc-door:/hom…

如何同时安全高效管理多个谷歌账号?

您的业务活动需要多个 Gmail 帐户吗?出海畅游,Gmail账号是少不了的工具之一,可以关联到Twitter、Facebook、Youtube、Chatgpt等等平台,可以说是海外网络的“万能锁”。但是大家都知道,以上这些平台注册多账号如果产生关…

2024年限时免费:申领一年免费二级域名

免费申领一年域名 onflashdrive.app,现已可转入 CloudFlare 托管! #注册账号 1、打开身份生成网站,然后按照图片下面所填写即可 邮箱填写自己的,密码必须包含大写字母 2、选择 New orders 3、点击选择产品–>Domain 4、输入…

3.5网安学习第三阶段第五周回顾(个人学习记录使用)

本周重点 ①SSRF服务器端请求伪造 ②序列化和反序列化 ③Vaudit代码审计 本周主要内容 ①SSRF服务器端请求伪造 一、概述 SSRF: server site request forgery (服务器端请求伪造)。 SSR: 服务端请求,A服务器通过函数向B服务器发送请求。 SSRF发生的前提条件…

OurBMC技术委员会2024年一季度例会顺利召开

3 月 28 日,OurBMC 社区技术委员会一季度例会顺利召开。本次会议汇报了 OurBMC 社区一季度工作总结,规划了二季度重点工作,同时针对产业化落地 SIG 实施方案开展了深入讨论。 本次会议采取线上线下形式举行,由 技术委员会主席李煜…

手撸一个简易 Grid 拖拽布局

公众号:程序员白特,欢迎一起交流学习~ 以下文章来源于稀土掘金技术社区 ,作者游仙好梦 最近有个需求需要实现自定义首页布局,需要将屏幕按照 6 列 4 行进行等分成多个格子,然后将组件可拖拽对应格子进行渲染展示。 对比…