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

news2024/11/25 20:40:59

目录

一、概述

二、典型操作流程

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》专栏,后续会继续输出相关内容文章。如果有帮助到大家,欢迎大家点赞+关注+收藏,有疑问也欢迎大家评论留言!

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

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

相关文章

2023.4.7 机器学习周报

目录 引言 Abstract 文献阅读 1、题目 2、引言 3、过去方案和Motivation 4、Segment Anything模型 5、创新点 6、实验过程 7、实验结果 1、评价绩效 2、检测评价 3、跟踪评价 8、 结论 总结 引言 本周阅读了一篇关于高效的任意分割模型的文献,用于自…

1区、TOP、CCF推荐,最快16天录用!4月刊源表已更新!

毕业推荐 SSCI • 社科类,分区稳步上升(最快13天录用) IEEE: • 计算机类,1区(TOP),CCF推荐 SCIE • 计算机工程类,CCF推荐(最快16天录用) 2024年4月 SCI/SSCI/EI…

环境搭建 | Windows 11系统从0开始搭建SonarQube环境分析C sharp项目代码

1 安装&使用流程 JDK 17环境搭建Sonarqube 10.0安装PostgreSQL 12数据库安装配置MSBuild下载安装SonarScanner for MSBuild使用SonarQube分析C#代码并上传到服务器 注意:SonarQube环境搭建时对各个软件的版本都有要求,如果你不确定使用何版本&…

窥探未来:Web3如何颠覆传统互联网

随着科技的迅速发展,Web3正逐渐成为人们关注的焦点。与传统的Web2相比,Web3代表了一种全新的互联网模式,其潜力和影响力引发了人们对未来的期待和探索。本文将深入探讨Web3如何颠覆传统互联网的各个方面,并展望其可能带来的未来变…

缺省参数

缺省参数 缺省参数概念 缺省参数是声明或定义函数时为函数的参数指定一个缺省值。在调用该函数时&#xff0c;如果没有指定实 参则采用该形参的缺省值&#xff0c;否则使用指定的实参。 void Func(int a 0) {cout<<a<<endl; } int main() {Func(); // 没有传…

websocket 局域网 webrtc 一对一 多对多 视频通话 的示例

基本介绍 WebRTC&#xff08;Web Real-Time Communications&#xff09;是一项实时通讯技术&#xff0c;它允许网络应用或者站点&#xff0c;在不借助中间媒介的情况下&#xff0c;建立浏览器之间点对点&#xff08;Peer-to-Peer&#xff09;的连接&#xff0c;实现视频流和&am…

DC-9靶场

一.环境搭建 1.下载地址 靶机下载地址&#xff1a;https://download.vulnhub.com/dc/DC-9.zip 2.虚拟机配置 设置虚拟机为nat&#xff0c;遇到错误点重试和是 开启虚拟机如下图所示 二.开始渗透 1. 信息收集 查找靶机的ip地址 arp-scan -l 发现靶机的ip地址为192.168.11…

计算机网络面试问题(一)

1.在浏览器中输⼊URL并按下回⻋之后会发⽣什么 2.TCP三次握⼿的过程,为什么三次握手 TCP&#xff08;传输控制协议&#xff09;的三次握⼿是建⽴⽹络连接的过程&#xff0c;确保通信双⽅能够正确地进⾏数据传输。 第⼀次握⼿&#xff08;SYN&#xff09;&#xff1a; 客户端&am…

从原理图到PCB全过程(嘉立创)1

1 将已经画好的原理图更新到PCB中&#xff08;点击应用修改&#xff09; 2 一开始PCB是杂乱的&#xff0c;需要回到原理图&#xff0c;框选各个模块&#xff0c;然后按住CtrlShiftX会自动在PCB显示这个部分&#xff0c;然后把各个部分分开 3 PCB画板需要有板框(嘉立创每个月都i…

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

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

GT收发器第六篇_GT channel内部时钟关系

文章目录 一、TX端时钟二、RX端时钟 一、TX端时钟 TX端可分为4个区域&#xff0c;分别为FPGA TX接口、PCS靠FPGA侧、PCS靠PMA侧、PMA&#xff0c;如下图。GTX/GTH发射器包括TXBUFFER和TX相位校准电路&#xff0c;以解决时钟域之间的相位差。TX相位校准电路用于TXBUFFER被旁路时…

【THM】Passive Reconnaissance(被动侦察)-初级渗透测试

介绍 欢迎来到网络安全模块的第一个房间,该模块涵盖: 1.被动侦察 2.主动侦察 3.Nmap实时主机发现 4.Nmap基本端口扫描 5.Nmap高级端口扫描 6.Nmap后端口扫描 7.协议和服务器 8.协议和服务器2 9.网络安全挑战 在这个房间里,在我们定义被动侦察和主动侦察之后,我们…

windows linux 安装 nvm

windows 一、下载nvm-windows 前往github https://github.com/coreybutler/nvm-windows 进入latest 往下滑下载nvm-setup.exe 二、下载好后直接一直点击下一步就好。 检查一下 nvm -v &#xff0c;会输出版本号 附带常用命令 nvm install 10.15.3 安装v10.15.3版本 nvm u…

基于python爬虫与数据分析系统设计

**单片机设计介绍&#xff0c;基于python爬虫与数据分析系统设计 文章目录 一 概要二、功能设计设计思路 三、 软件设计原理图 五、 程序六、 文章目录 一 概要 基于Python爬虫与数据分析系统的设计是一个结合了网络数据抓取、清洗、存储和数据分析的综合项目。这样的系统通常…

总结TCP协议各类知识点

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

Vue基础配置、组件通信、自定义指令

基础配置 Vue框架已经集成了webpack配置 小注意点 vbase 快速生成vue模板 组件名必须是多词格式(驼峰模式) 具体三种写法: ①小驼峰:abcDef.vue ②大驼峰&#xff1a;AbcDef.vue ③中横线&#xff1a;abc-def.vue 假如文件名不符合多次格式的补救办法&#xff1a; 导出重命名…

154 Linux C++ 通讯架构实战9 ,信号功能添加,信号使用sa_sigaction 回调,子进程添加,文件IO详谈,守护进程添加

初始化信号 使用neg_init_signals(); 在nginx.cxx中的位置如下 //(3)一些必须事先准备好的资源&#xff0c;先初始化ngx_log_init(); //日志初始化(创建/打开日志文件)&#xff0c;这个需要配置项&#xff0c;所以必须放配置文件载入的后边&#xff1b;//(4)一些初…

Appium无线自动化实用教程

文章目录 简介核心特点工作原理使用Appium进行自动化测试的一般步骤 环境设置安装和启动Appium Server使用Node.js和npm安装Appium Server&#xff1a;启动Appium Server:命令行启动使用Appium Desktop安装和启动Appium Server&#xff1a;使用代码启动appium server 编写测试代…

矩阵的组合

重构 将原始矩阵,重构形状 例如,下图中,将AB重构为一个新的矩阵,CD重构为一个新的矩阵,EF重构为一个新的矩阵,GH重构为一个新的矩阵。 MATLAB实现 clc; clearvars; close all;X1=1:64; X1=reshape(X1,8,8)

基于YOLOv8/YOLOv5的人脸表情识别系统(附完整资源+PySide6界面+训练代码)

本篇博客呈现了一种基于深度学习的人脸表情识别系统&#xff0c;并详细展示了其实现代码。系统采纳了领先的YOLOv8算法&#xff0c;并与YOLOv7、YOLOv6、YOLOv5等早期版本进行了比较&#xff0c;展示了其在图像、视频、实时视频流及批量文件中识别人脸表情的高准确度。文章深入…