持续交付/持续部署流水线介绍(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操作流程说明
上图操作流程主要步骤如下:
- 开发人员提交代码到GitHub代码仓库。
- 版本控制系统发起更新通知,触发CI自动构建动作。
- CI完成持续集成构建后,最终生成可用于部署的Docker镜像。
- 推送Docker镜像到容器注册表。
- CD同步K8s更新配置,触发部署服务。
- K8s集群管理通过容器注册表和配置信息,拉取Docker镜像。
- 完成容器实例创建,并运作。
在这些步骤中,读者可以看出步骤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伪码的形式展示其基本结构,其包含的操作步骤如下:
- 拉取代码。
- 编译+单元测试。
- 构建镜像文件。
- 上传镜像仓库。
- 发布到K8s集群。
此时,Jenkinsfile伪码内容如下所示(重点关注加粗部分的内容):
当K8s的发布环境区分测试环境、准生产环境、生产环境时,可以通过此方式完成不同环境的部署发布及回滚设置,以满足灰度发布、蓝绿发布、滚动发布等发布要求。
4.2.3 总结
通过上述内容的介绍,大家基本理解Jenkins+Docker+K8s持续部署流水线技术实现原理及其关键步骤,但Docker、K8s、Jenkins等技术细节涉及的内容比较繁杂,仍需要大家进一步学习其他资料,以便在此基础上,深入理解云原生技术与DevSecOps自动化实现的关系。后续有时间,我会再整理发布跟个部署构建相关教程文档吧,回头再说。。。。。。。
好了,本次内容就分享到这,欢迎大家关注《DevSecOps》专栏,后续会继续输出相关内容文章。如果有帮助到大家,欢迎大家点赞+关注+收藏,有疑问也欢迎大家评论留言!
相关文章:

持续交付/持续部署流水线介绍(CD)
目录 一、概述 二、典型操作流程 2.1 CI/CD典型操作流 2.2 CI/CD操作流程说明 2.3 总结 三、基于GitHubDocker的持续交付/持续部署流水线(公有云) 3.1 基于GitHubDocker的持续交付/持续部署操作流程示意图 3.2 GitHubDocker持续交付/持续部署流水…...

第四百三十八回
文章目录 1. 概念介绍2. 思路与方法2.1 实现思路2.2 实现方法 3. 示例代码4. 内容总结 们在上一章回中介绍了"不同平台上换行的问题"相关的内容,本章回中将介绍如何在页面上显示蒙板层.闲话休提,让我们一起Talk Flutter吧。 1. 概念介绍 我们…...

Python学习:面相对象
面向对象 面向对象技术简介 类(Class): 用来描述具有相同的属性和方法的对象的集合。它定义了该集合中每个对象所共有的属性和方法。对象是类的实例。方法:类中定义的函数。类变量:类变量在整个实例化的对象中是公用的。类变量定义在类中且在函数体之外。类变量通常不作为实…...

SSM学习——Spring AOP与AspectJ
Spring AOP与AspectJ 概念 AOP的全称为Aspect-Oriented Programming,即面向切面编程。 想象你是汉堡店的厨师,每一份汉堡都有好几层,这每一层都可以视作一个切面。现在有一位顾客想要品尝到不同风味肉馅的汉堡,如果按照传统的方…...
Android 使用LeakCanary检测内存泄漏,分析原因
内存泄漏是指无用对象(不再使用的对象)持续占有内存或无用对象的内存得不到及时释放,从而造成内存空间的浪费称为内存泄漏。 平时我们在使用app时,少量的内存泄漏我们是发现不了的,但是当内存泄漏达到一定数量时&…...

Linux部署Kafka2.8.1
安装Jdk 首先确保你的机器上安装了Jdk,Kafka需要Java运行环境,低版本的Kafka还需要Zookeeper,我此次要安装的Kafka版本为2.8.1,已经内置了一个Zookeeper环境,所以我们可以不部署Zookeeper直接使用。 1、解压Jdk包 t…...

【pytest、playwright】allure报告生成视频和图片
目录 1、修改插件pytest_playwright 2、conftest.py配置 3、修改pytest.ini文件 4、运行case 5、注意事项 1、修改插件pytest_playwright pytest_playwright.py内容如下: # Copyright (c) Microsoft Corporation. # # Licensed under the Apache License, Ver…...

浅谈iOS开发中的自动引用计数ARC
1.ARC是什么 我们知道,在C语言中,创建对象时必须手动分配和释放适量的内存。然而,在 Swift 中,当不再需要类实例时,ARC 会自动释放这些实例的内存。 Swift 使用 ARC 来跟踪和管理应用程序的内存,其主要是由…...

Spring IoCDI(2)
IoC详解 通过上面的案例, 我们已经知道了IoC和DI的基本操作, 接下来我们来系统地学习Spring IoC和DI的操作. 前面我们提到的IoC控制反转, 就是将对象的控制权交给Spring的IoC容器, 由IoC容器创建及管理对象. (也就是Bean的存储). Bean的存储 我们之前只讲到了Component注解…...

30. UE5 RPG GamplayAbility的配置项
在上一篇文章,我们介绍了如何将GA应用到角色身上的,接下来这篇文章,将主要介绍一下GA的相关配置项。 在这之前,再多一嘴,你要能激活技能,首先要先应用到ASC上面,才能够被激活。 标签 之前介绍…...
提升自己最快的方式是什么?
提升自己最快的方式通常涉及到个人成长的各个方面,包括心理、情感、技能和知识等。根据查阅到的资料,以下是一些具体的方法和步骤,帮助你快速提升自己: 1. 培养屏蔽力 荷兰畅销书作家罗伊马丁纳提到,屏蔽力是个人成长…...
题目:一个5位数,判断它是不是回文数。即12321是回文数,个位与万位相同,十位与千位相同。
题目:一个5位数,判断它是不是回文数。即12321是回文数,个位与万位相同,十位与千位相同。 There is no nutrition in the blog content. After reading it, you will not only suffer from malnutrition, but also impotence…...

《HelloGitHub》第 96 期
兴趣是最好的老师,HelloGitHub 让你对编程感兴趣! 简介 HelloGitHub 分享 GitHub 上有趣、入门级的开源项目。 https://github.com/521xueweihan/HelloGitHub 这里有实战项目、入门教程、黑科技、开源书籍、大厂开源项目等,涵盖多种编程语言 …...

C++tuple类型
tuple 类型 tuple是类似pair的模板。 每个pair的成员类型都不相同,但每个pair都恰好有两个成员。不同tuple类型的成员类型也不相同,但一个tuple可以有任意数量的成员。 每个确定的tuple类型的成员数目是固定的,但一个tuple类型的成员数目可…...
亚远景科技-浅谈ASPICE标准和ASPICE认证/评估
ASPICE(Automotive SPICE)是一种针对汽车行业的软件开发过程的评估模型,它旨在帮助汽车制造商和供应商提高软件开发过程的能力和质量,从而提升产品的质量、安全性和效率。 ASPICE标准涵盖了软件开发的各个阶段和活动,…...
PHP性能提升方案
一、背景与介绍 PHP语言开发效率高,特别应用于适合中小型项目,对于创业初期敏捷开发验证项目可行性或者Demo演示绝对占据优势。 但是随着现在Web应用的复杂性,针对项目要适应高并发、高流量的访问特性,PHP确实在性能方面相对Go、J…...

关系(二)利用python绘制热图
关系(二)利用python绘制热图 热图 (Heatmap)简介 热图适用于显示多个变量之间的差异,通过颜色判断彼此之间是否存在相关性。 快速绘制 基于seaborn import seaborn as sns import pandas as pd import numpy as np i…...
P8597 [蓝桥杯 2013 省 B] 翻硬币
# [蓝桥杯 2013 省 B] 翻硬币 ## 题目背景 小明正在玩一个“翻硬币”的游戏。 ## 题目描述 桌上放着排成一排的若干硬币。我们用 * 表示正面,用 o 表示反面(是小写字母,不是零),比如可能情形是 **oo***oooo&#x…...

主流公链 - Fantom
Fantom:高性能的区块链协议 Fantom是一种开创性的区块链协议,旨在革新去中心化应用和数字金融领域 技术特点 共识机制 Lachesis协议:Fantom使用了Lachesis协议作为其共识算法。Lachesis是一种 异步拜占庭容错(ABFT)共…...

vue-quill-editor 富文本编辑器(可上传视频图片),组件挂载的方式实现
1.安装 npm install vue-quill-editor --save npm install quill-image-drop-module --save npm install quill-image-resize-module --save2.在组件下面新增组件 QlEditor (1)index.vue <template><div><div idquillEditorQiniu><!-- 基于element…...

基于uniapp+WebSocket实现聊天对话、消息监听、消息推送、聊天室等功能,多端兼容
基于 UniApp + WebSocket实现多端兼容的实时通讯系统,涵盖WebSocket连接建立、消息收发机制、多端兼容性配置、消息实时监听等功能,适配微信小程序、H5、Android、iOS等终端 目录 技术选型分析WebSocket协议优势UniApp跨平台特性WebSocket 基础实现连接管理消息收发连接…...
【SpringBoot】100、SpringBoot中使用自定义注解+AOP实现参数自动解密
在实际项目中,用户注册、登录、修改密码等操作,都涉及到参数传输安全问题。所以我们需要在前端对账户、密码等敏感信息加密传输,在后端接收到数据后能自动解密。 1、引入依赖 <dependency><groupId>org.springframework.boot</groupId><artifactId...

CocosCreator 之 JavaScript/TypeScript和Java的相互交互
引擎版本: 3.8.1 语言: JavaScript/TypeScript、C、Java 环境:Window 参考:Java原生反射机制 您好,我是鹤九日! 回顾 在上篇文章中:CocosCreator Android项目接入UnityAds 广告SDK。 我们简单讲…...

(转)什么是DockerCompose?它有什么作用?
一、什么是DockerCompose? DockerCompose可以基于Compose文件帮我们快速的部署分布式应用,而无需手动一个个创建和运行容器。 Compose文件是一个文本文件,通过指令定义集群中的每个容器如何运行。 DockerCompose就是把DockerFile转换成指令去运行。 …...
根据万维钢·精英日课6的内容,使用AI(2025)可以参考以下方法:
根据万维钢精英日课6的内容,使用AI(2025)可以参考以下方法: 四个洞见 模型已经比人聪明:以ChatGPT o3为代表的AI非常强大,能运用高级理论解释道理、引用最新学术论文,生成对顶尖科学家都有用的…...

AI书签管理工具开发全记录(十九):嵌入资源处理
1.前言 📝 在上一篇文章中,我们完成了书签的导入导出功能。本篇文章我们研究如何处理嵌入资源,方便后续将资源打包到一个可执行文件中。 2.embed介绍 🎯 Go 1.16 引入了革命性的 embed 包,彻底改变了静态资源管理的…...

浪潮交换机配置track检测实现高速公路收费网络主备切换NQA
浪潮交换机track配置 项目背景高速网络拓扑网络情况分析通信线路收费网络路由 收费汇聚交换机相应配置收费汇聚track配置 项目背景 在实施省内一条高速公路时遇到的需求,本次涉及的主要是收费汇聚交换机的配置,浪潮网络设备在高速项目很少,通…...

逻辑回归暴力训练预测金融欺诈
简述 「使用逻辑回归暴力预测金融欺诈,并不断增加特征维度持续测试」的做法,体现了一种逐步建模与迭代验证的实验思路,在金融欺诈检测中非常有价值,本文作为一篇回顾性记录了早年间公司给某行做反欺诈预测用到的技术和思路。百度…...

Qemu arm操作系统开发环境
使用qemu虚拟arm硬件比较合适。 步骤如下: 安装qemu apt install qemu-system安装aarch64-none-elf-gcc 需要手动下载,下载地址:https://developer.arm.com/-/media/Files/downloads/gnu/13.2.rel1/binrel/arm-gnu-toolchain-13.2.rel1-x…...

Linux 下 DMA 内存映射浅析
序 系统 I/O 设备驱动程序通常调用其特定子系统的接口为 DMA 分配内存,但最终会调到 DMA 子系统的dma_alloc_coherent()/dma_alloc_attrs() 等接口。 关于 dma_alloc_coherent 接口详细的代码讲解、调用流程,可以参考这篇文章,我觉得写的非常…...