持续集成流水线介绍(CI)

目录

一、概述

二、持续集成的典型操作流程

2.1 概述

2.2 持续集成的操作流程图

2.3 持续集成关键流程说明

三、构建持续集成流水线的方式

3.1 依托云厂商能力

3.2 采用开源产品

3.3 企业自研

四、构建持续化集成流水线

4.1 基于GitHub的持续集成流水线(公有云方案)

4.1.1 概述

4.1.2 GitHub持续集成方案操作流程示意图

4.1.3 GitHub Actions持续集成技术实现原理

4.1.3.1 GitHub Actions工作流程构成关系图

4.1.3.2 GitHub Actions工作流程

4.1.3.2.1 新建Actions

4.1.3.2.2 自定义工作流程

4.1.3.2.3 选择快捷模板

4.1.3.2.4 进入配置页面

4.1.3.3 举例配置Node.js YAML文件

4.1.3.4 总结

4.2 基于Jenkins/GitLab CI的持续集成流水线(私有云)

4.2.1 概述

4.2.2 Jenkins持续集成方案操作流程示意图

4.2.3 Jenkins+GitLab持续集成技术实现原理

4.2.3.1 说明

4.2.3.2 安装GitLab

4.2.3.3 安装Jenkins

4.2.3.4 GitLab配置访问令牌

4.2.3.5 Jenkins配置


一、概述

介绍完了持续集成基本概念和包含的主要系统,接下来将从平台建设和技术实现的角度为大家详细讲述其典型流程下的技术细节。

二、持续集成的典型操作流程

2.1 概述

持续集成流程在DevSecOps平台中主要表现为持续集成流水线,在实际的平台建设中,这一段流程的线上化过程通常是分阶段、分步骤实现的。大多数情况下,首先实现的是代码管理到集成测试这一段的线上化,然后再通过安全左移,逐步完成整个持续集成到持续开发的线上化。

2.2 持续集成的操作流程图

当整个流程完成线上化之后,在DevSecOps平台中,编排调度系统是持续集成平台能力的核心,承担着流程调度、任务管理和面向用户交互的职责。基于日常的研发操作和上文中提及的持续集成流程中涉及的主要系统,其典型操作流程如下图所示:

2.3 持续集成关键流程说明

其关键流程如下:

  • 当开发人员完成开发后,提交代码至代码存储仓库。
  • 触发源码及版本控制系统事件HOOK,发起代码编译构建动作。
  • 编译构建系统拉取源代码,开始代码编译。
  • 依次执行代码编译、制品打包、静态检测。
  • 当上述步骤执行通过后,通过调度将制品上传至过程制品库。
  • 生成的过程制品将被部署在资源及环境管理系统准备好的研测环境上。
  • 制品部署完成后,进入测试阶段,依次完成集成测试、安全测试、回归测试。
  • 当测试阶段动作全部完成后,将验证后的制品上传可发布制品库,供生产环境发布使用。

在整个过程中,各个任务在流水线上依次递进,直至将代码转化为可交付的制品,这就是DevSecOps平台中持续集成流程的核心作用。

三、构建持续集成流水线的方式

当一家企业着手搭建持续集成流水线时,通常可以使用如下三种不同的方式去构建此能力

3.1 依托云厂商能力

依托云厂商能力,即利用云厂商SaaS化持续集成相关系统或服务,构建企业自身的持续集成流水线。

3.2 采用开源产品

采用开源产品,即企业通过整合开源的持续集成相关产品,构建本地化的持续集成流水线。

3.3 企业自研

企业自研,即企业通过独立研发持续集成相关产品,构建本地化的持续集成流水线。

上述三种平台能力构建方式中,企业自研的方式更适用于大型互联网企业的大规模并发的持续集成场景,当然需要的资源投入和实施周期也不一样。考虑本书内容的普及性和实用性,这里主要以前两种方式为例向读者介绍持续集成流水线平台能力的搭建。

四、构建持续化集成流水线

4.1 基于GitHub的持续集成流水线(公有云方案)

4.1.1 概述

基于GitHub的持续集成流水线适合中小型互联网企业,或者说使用公有云基础设施及源代码云托管服务的企业。这类企业有一个典型的特点是代码管理托管在云服务上(这里主要是指GitHub),企业大多数没有自己的数据中心,采购云厂商的云主机、云数据库、云存储等作为企业的基础设施,如研测环境和生产环境均在公有云上。

4.1.2 GitHub持续集成方案操作流程示意图

GitHub Actions是GitHub平台上的一个功能模块,在代码托管的基础上可以承担持续集成流水线的功能,用户通过GitHub Actions对软件开发流程的定义,自动化地帮助用户完成代码检出、编译构建、代码检测、依赖管理、测试、部署等操作。当基础设施使用公有云时,在此持续集成方案的基础上,可以快速方便地完成持续部署的自动化。此方案的操作流程概览图如下图所示:

从图中可以看出,当使用GitHub作为持续集成流水线控制时,GitHub Actions担当着总体流程调度的角色,当触发工作流程的事件后,流程启动开始执行。

4.1.3 GitHub Actions持续集成技术实现原理

4.1.3.1 GitHub Actions工作流程构成关系图

使用GitHub Actions来实现持续集成时,工作流程是通过在GitHub上定义的YAML文件来描述的。YAML文件一般存放在.github/workflows目录中,一个项目可以定义多个YAML文件,一个YAML文件定义一个流程(Workflows),流程由事件(Event)触发作为入口。一个流程包含多个不同的任务(Job),每一个任务由一个或多个步骤(Step)组成,每一个步骤可以执行一个或多个操作(Actions)。Workflows-Job-Step-Actions它们组装在一起,构成整个工作流程,如图所示:

配置完成的工作流程可以通过手工操作、GitHub CLI、API接口等方式触发流程启动事件。事情启动后,会依次执行每一个任务,直至流程结束。如果流程执行失败,GitHub Actions也会起到监控和调度的作用。

4.1.3.2 GitHub Actions工作流程
4.1.3.2.1 新建Actions

当用户代码托管在GitHub后,可以在项目中的Code标签页直接新建Actions,如图所示:

4.1.3.2.2 自定义工作流程

进入页面后,单击New workflow的按钮,开始定义工作流程。默认情况下,当前页面提供了一系列的工作流程模板,如推荐的模板列表、持续集成的模板列表、安全检测的模板列表等。同时,用户也可以自定义自己的工作流程。

在上图中,

❶所示位置为用户自定义工作流程入口,

❷所示位置为系统推荐的工作流程模板入口。

4.1.3.2.3 选择快捷模板

当然,用户还可以选择其他的工作流程的快捷模板,如下图所示:

4.1.3.2.4 进入配置页面

这里选择GitHub Actions工作流程后,则进入YAML文件的配置页面,如下图所示:

在上图中,

❶所示区域为YAML文件的自定义配置编辑区,

❷所示区域为GitHub根据应用市场的使用情况推荐给用户的操作模板和说明文档。用户参考操作模板和说明文档完成YAML文件的自定义编辑之后,修改❸的文件名,最后单击❹Start commit按钮提交YAML文件,提交后在代码项目“根目录/.github/workflows”下会存在刚才提交的YAML文件。

至此,工作流程的定义已完成。当代码仓库发生变化时,如果发现“根目录/. github/workflows”下存在yml文件,将根据流程触发条件,启动流程。

4.1.3.3 举例配置Node.js YAML文件

在整个工作流程中的定义中,YAML文件的配置是流程定义关键。下面以一个Node.js项目为例介绍持续集成配置,其文件样例如下图所示:

在上图中,文件主要包含三个部分:

❶表示整个流程的名称,

❷表示流程的触发条件为事件push,

❸表示要执行的任务内容。

其中

❹表示使用代码的主分支master,

❺表示任务主要是编译构建与测试,

❻表示编译构建和测试的使用环境为Ubuntu操作系统,

❼表示当前Job任务所包含的步骤,

❽~11均为其操作步骤:

❽表示代码Checkout操作,

❾表示命令行环境下依赖环境的安装、构建和测试操作,

10表示对dist目录下的文件排除txt类型之后生成的制品上传

11表示上传自动化测试报告。

这是一个简单的Node.js项目持续集成样例,在实际使用中,开发语言不同,使用场景不同,流程的定义往往要复杂得多。但通过这个样例,读者能概要性地了解GitHub Actions实现持续集成流程的基本逻辑。

4.1.3.4 总结

对于GitHub Actions的使用GitHub官方文档中有比较详细的描述,感兴趣的读者可以详细阅读其案例,并动手操作,理解不同场景下的持续集成流程的定义和使用。

例如,GitHub上Action的代码仓库包含各种流程定义模板,感兴趣的读者可以访问地址:

GitHub - actions/starter-workflows: Accelerating new GitHub Actions workflows

同时,在GitHub的应用市场上也有非常多的使用案例,这些案例,既包含持续集成能力,也包含安全能力(如下图所示);

既包含GitHub自身功能,也包含其他厂商的SaaS化能力,如亚马逊AWS、阿里云、RedHat等(如下图所示)。

这些与GitHub可集成的能力,对于使用GitHub实现持续集成流水线的企业来说,无疑是极大地缩短了DevSecOps能力构建的周期,降低了平台学习和平台使用的成本。

4.2 基于Jenkins/GitLab CI的持续集成流水线(私有云)

4.2.1 概述

基于Jenkins或GitLab CI去构建企业级持续集成流水线是业界非常普遍的方案,这与它们本身的开源、易于操作,满足常见持续集成场景下各个任务的调度需求有关,同时也与周边生态系统的成熟,与版本管理工具、版本控制工具、构建工具等易于集成也有很大的关系。用户通过使用此类方案,可以方便、一揽子地解决多个业务操作和系统数据之间的打通与联动。

除了少数大规模、高并发的大型互联网企业需要自己去研发流程调度系统外,在使用已有的开源产品或商业产品来构建持续集成能力时,Jenkins通常是企业的首选方案。

4.2.2 Jenkins持续集成方案操作流程示意图

Jenkins是基于Java语言的企业级持续集成工具,可以持续、自动化、分布式完成持续集成流程中的多个任务,如构建、测试、监控等。以Jenkins为流程调度的持续集成流水线,其概览图如下图所示:

从此方案中可以看到,图中编译、打包、镜像构建、上传镜像、删除镜像等操作,都是在Jenkins统一调度下完成的,Jenkins通过API接口、脚本、应用等调用,完成持续集成流程中的关键任务。它与基于GitHub持续集成方案的不同在于,此方案中代码托管在本地环境,管理工具使用的是Git和GitLab,Jenkins、Docker仓库、测试环境等也都是企业自己搭建的,整个平台具有很好的自主性和可定制性

4.2.3 Jenkins+GitLab持续集成技术实现原理

4.2.3.1 说明

接下来,将以Jenkins+GitLab相结合的方案介绍持续集成能力的实现。Jenkins+GitLab的安装市面上有很多文字资料和视频,这里仅做简要地介绍,通过简化安装让读者了解其系统构成即可。

4.2.3.2 安装GitLab

GitLab是业界使用比较广泛的一款覆盖DevSecOps全流程的软件,它分为GitLab CE和GitLab EE两个版本,其中GitLab CE为社区的开源版本,GitLab EE为企业级版本,企业版有一定时间的免费试用期。这里以GitLab CE版本为例,讲述GitLab的安装。GitLab安装有多种安装方式,常见的有使用已下载安装包安装、在线安装,如Linux环境下rpm包安装,yum在线安装、Docker安装等。使用yum安装时,需要注意的是,安装时需要考虑到网络速度的传输。建议选择安装源时,首选考虑国内的安装镜像源,如清华大学开源软件镜像源、科大镜像源、华为镜像源等,如下图所示:

本文为了简化GitLab的安装操作,方便读者快速使用和了解GitLab,使用Docker化安装方式。Docker安装首先要下载GitLab,如下命令行所示:

待此命令执行完成后,即可启动GitLab,如下命令行所示:

等待一段时间,当所有的容器状态正常时,即可以通过gitlab.devsecops-demo.com访问GitLab。如果通过域名无法访问,读者需要配置IP解析。首次使用时,需要配置GitLab管理员密码,设置完密码后才可以管理员身份登录GitLab。

相比yum安装,Docker的安装与配置要简单得多,读者也可以使用其他方式安装,来加深对GitLab的理解。另外,对于英文不好的读者,建议安装时选择中文版,即选择镜像gitlab-ce-zh:latest即可,其他步骤与英文版一致。

4.2.3.3 安装Jenkins

Jenkins是Java语言开发的,所以安装之前先查看本机是否已安装JDK,如果没有安装则需要首先安装JDK。本文默认JDK已正确安装,如果有读者不知道JDK如何安装,请查阅相关资料。这里仍以Docker环境为例,讲述Jenkins的安装过程。

在Docker命令行模式下,执行以下命令:

默认情况下,使用latest镜像。待此命令执行完成后,即可启动GitLab,如下命令行所示:

等命令行执行完成后,即可通过jenkins.devsecops-demo.com访问页面。这里需要读者注意的是,GitLab的Docker启动参数与Jenkins的启动参数在端口上要避免冲突,并且和GitLab安装一样,考虑jenkins.devsecops-demo.com与IP地址的解析。否则也是无法访问的。


首次访问Jenkins需要解锁管理员密码,这时只需要进入Jenkins HOME目录查询密码复制输入即可,如下图所示:

解锁完成后,即可登录进系统,参考新手入门的指引,创建用户、添加插件及执行相关配置。

4.2.3.4 GitLab配置访问令牌

GitLab配置访问令牌,并通过令牌与Jenkins之间进行认证和授权。进入GitLab主界面,进入一个代码仓库后,选择【Setting】→【Access Tokens】,填写Token name:gitlab-jenkins-user-api-token并勾选【api】后,生成令牌信息,如下图所示:

需要将该令牌信息复制下来并保存至安全的位置,后续在Jenkins配置的时候还会使用到该令牌。

4.2.3.5 Jenkins配置

Jenkins主页选择【Manage Jenkins】→【Available】,安装Jenkins GitLab Plugin插件,如下图所示:

选择【Credentials】→【System】→【Global Credentials】→【Add Credentials】,填写GitLab用户令牌,如下图所示:

最后选择【Manage Jenkins】→【Configure System】,选择【GitLab】标签,填入GitLab相关配置,如下图所示:

通过以上四个步骤,已经完成了GitLab与Jenkins的集成。接下来就可以在Jenkins中创建任务进行构建。

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

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

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

相关文章

【氮化镓】GaN器件中关态应力诱导的损伤定位

概括总结: 这项研究通过低频1/f噪声测量方法,探究了在关态(OFF-state)应力作用下,AlGaN/GaN高电子迁移率晶体管(HEMTs)中由应力引起的损伤的定位。研究中结合了电致发光(EL&#xf…

如何合理利用chatgpt写高质量论文,10分钟速成(四)

演示站点: https://www.cnsai.net/ 论文模块 官方论坛: www.jingyuai.com 京娱AI 一、文章结构剖析 如果我们经常去写文章或者是去看别人的文章,你会发现文章分为以下几部分 标题大纲前言/导语正文(不同的结构)结尾呼…

pod反亲和配置【软亲和和硬亲和】

pod反亲和含义解读:pod反亲和就是根据pod包含的标签来做亲和或者反亲和操作,亲和就是部署在一起,反亲和就是不部署在一起,然后反亲和包括硬反亲和和软反亲和,软反亲就是尽量避免部署在一起如果找不到满足条件也会部署&…

springboot和spring的区别

Spring Boot 与 Spring 框架的对比 概述 Spring Boot 和 Spring 框架是 Java 开发领域的两个重要产品。Spring Boot 本质上是对 Spring 框架的一种扩展,目的是简化 Spring 应用的开发和部署流程。接下来将从多个维度详细对比这两者。 配置方式 Spring 传统框架主…

Linux查看重启时间,关机时间,运行时长的指令

Linux查看重启时间,关机时间,运行时长的指令 查看上次启动时间查看系统重启时间查看关机时间查看运行时长 这里测试环境为Ubuntu 16.04 查看上次启动时间 who -b可以通过who --help查看who指令的更多功能 查看系统重启时间 可以通过下面的方式来进行…

1. Java概述

文章目录 1.Java语言概述1.1 Java介绍1.1.1 软件开发概述1.1.2 计算机语言1.1.3 Java 简史1.1.4 Java 技术体系平台1.1.5 Java在各领域的应用1.1.6 Java语言特点1.1.7 Java核心机制一-Java虚拟机1.1.8 Java核心机制二-垃圾回收1.1.9 Java开发工具 1.2 Java环境搭建1.2.1 JDK、J…

农村分散式生活污水分质处理及循环利用技术指南

标准已完成意见征集: 本文件给出了农村分散式生活污水分质处理及循环利用的总则、污水收集、污水分质处理、资源化利用、利用模式、运维管理等的指导。 本文件适用于农村分散式生活污水分质处理及循环利用的设施新建、扩建和改建工程的设计、施工与运维。 注:本文件…

MySQL实现复制功能实现主从服务器数据备份分发机制

MySQL的复制功能是处理大规模数据和实现高可用性的重要方式。 MySQL复制功能:复制是一种通过将从一台服务器(主服务器)的数据库复制到另一台服务器(从服务器)的方式,实现数据的备份或者分发的机制。主从复制…

算法系列--动态规划--回文子串系列

💕"我们好像在池塘的水底,从一个月亮走向另一个月亮。。"💕 作者:Mylvzi 文章主要内容:算法系列–动态规划–回文子串系列 今天为大家带来的是算法系列--动态规划--回文子串系列(1),本文重点掌握如何快速判…

Echarts地图之——如何给地图添加外边框轮廓

有时候我们希望给地图外围加一圈边框来增加美感 但实际情况中,我们需要把国界的边框和各个省份属于国界的边框相吻合,否则就会造成两者看起来是错位的感觉 这就需要我们把echarts registerMap的全国省份json和国界边框json的坐标相一致。 这个json我们可…

佳能机械制造将莅临2024第13届生物发酵产品与技术装备展

参展企业介绍 过滤与分离设备专业制造商 •碟式离心机及机组模块、系统 •卧式螺旋卸料沉降离心机及系统 江苏佳能机械制造有限公司位于中国“龙虾之都”——江苏盱眙,地处淮安西南部,淮河下游,洪泽湖南岸&#…

网络七层模型之表示层:理解网络通信的架构(六)

🤍 前端开发工程师、技术日更博主、已过CET6 🍨 阿珊和她的猫_CSDN博客专家、23年度博客之星前端领域TOP1 🕠 牛客高级专题作者、打造专栏《前端面试必备》 、《2024面试高频手撕题》 🍚 蓝桥云课签约作者、上架课程《Vue.js 和 E…

【LeetCode热题100】124.二叉树的最大路径和(二叉树)

一.题目要求 二叉树中的 路径 被定义为一条节点序列,序列中每对相邻节点之间都存在一条边。同一个节点在一条路径序列中 至多出现一次 。该路径 至少包含一个 节点,且不一定经过根节点。 路径和 是路径中各节点值的总和。 给你一个二叉树的根节点 root …

Doris实践——叮咚买菜基于OLAP引擎的应用实践

目录 前言 一、业务需求 二、选型与对比 三、架构体系 四、应用实践 4.1 实时数据分析 4.2 B端业务查询取数 4.3 标签系统 4.4 BI看板 4.5 OLAP多维分析 五、优化经验 六、总结 原文大佬介绍的这篇Doris数仓建设实践有借鉴意义的,这些摘抄下来用作沉淀学…

Windows MySQL通过data 文件夹恢复数据

前言 在MySql数据库中,为了备份和恢复数据,通常会使用mysqldump工具来导出和导入数据。但是,如果数据库非常大,name导出和导入数据可能会需要很长时间。这时,一种更快速的备份和恢复数据的方式就是直接复制mysql的data文件夹。 什么是mysql的…

天然橡胶衬板的局限性

天然橡胶衬板的局限性 天然橡胶衬板作为一种广泛应用于工业领域的材料,以其独特的弹性和耐磨性受到了广泛的认可。然而,就像任何材料一样,天然橡胶衬板也存在一些局限性。本文将从材料性能、应用领域、环境影响和使用寿命等方面,…

【嵌入式开发 Linux 常用命令系列 1.4 -- grep -Ev 反向搜索】

请阅读【嵌入式开发学习必备专栏 】 文章目录 grep 的反向搜索 grep 的反向搜索 如果想从文件 a 中过滤掉包含字符串 “dash” 或 “tom” 的行,并将剩余的行写入到文件 b,可以使用 grep 命令配合正则表达式。使用 grep 的 -E 选项允许你指定一个扩展的…

c++ 的左值和右值如何理解

在C中,左值(lvalue)和右值(rvalue)是表达式的分类,这个分类是基于表达式在程序中的位置和行为。理解左值和右值对于掌握C中的移动语义和高效编程非常重要。 左值(lvalue) 左值通常…

docker-compose mysql

使用docker-compose 部署 MySQL(所有版本通用) 一、拉取MySQL镜像 我这里使用的是MySQL8.0.18,可以自行选择需要的版本。 docker pull mysql:8.0.18二、创建挂载目录 mkdir -p /data/mysql8/log mkdir -p /data/mysql8/data mkdir -p /dat…

老程序员不讲武德

职业生涯的一些心得,不一定对,大家辨证的看吧 只有结论,没有推论,如果有感兴趣的topic可以在评论区留言,我给你讲故事 忠告 给即将踏入职场的同学一句忠告: "不要听信那些职场老油条的忠告" 竞争 刚毕业的时…