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

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

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

相关文章

Haproxy2.8.1+Lua5.1.4部署,haproxy.cfg配置文件详解和演示

目录 一.快速安装lua和haproxy 二.配置haproxy的配置文件 三.配置haproxy的全局日志 四.测试负载均衡、监控和日志效果 五.server常用可选项 1.check 2.weight 3.backup 4.disabled 5.redirect prefix和redir 6.maxconn 六.调度算法 1.静态 2.动态 一.快速安装lu…

uniApp使用XR-Frame创建3D场景(5)材质贴图的运用

上一篇讲解了如何在uniApp中创建xr-frame子组件并创建简单的3D场景。 这篇我们讲解在xr-frame中如何给几何体赋予贴图材质。 先看源码 <xr-scene render-system"alpha:true" bind:ready"handleReady"><xr-node><xr-assets><xr-asse…

Go的数据结构与实现【Set】

介绍 Set是值的集合&#xff0c;可以迭代这些值、添加新值、删除值并清除集合、获取集合大小并检查集合是否包含值&#xff0c;集合中的一个值只存储一次&#xff0c;不能重复。 本文代码地址为go-store 简单实现 这是集合的一个简单实现&#xff0c;还不是并发安全的&#…

【tensorflow框架神经网络实现鸢尾花分类】

文章目录 1、数据获取2、数据集构建3、模型的训练验证可视化训练过程 1、数据获取 从sklearn中获取鸢尾花数据&#xff0c;并合并处理 from sklearn.datasets import load_iris import pandas as pdx_data load_iris().data y_data load_iris().targetx_data pd.DataFrame…

kubernetes K8s的监控系统Prometheus升级Grafana,来一个酷炫的Node监控界面(二)

上一篇文章《kubernetes K8s的监控系统Prometheus安装使用(一)》中使用的监控界面总感觉监控的节点数据太少&#xff0c;不能快算精准的判断出数据节点运行的状况。 今天我找一款非常酷炫的多维度数据监控界面&#xff0c;能够非常有把握的了解到各节点的数据&#xff0c;以及运…

快速上手Spring Cloud 七:事件驱动架构与Spring Cloud

快速上手Spring Cloud 一&#xff1a;Spring Cloud 简介 快速上手Spring Cloud 二&#xff1a;核心组件解析 快速上手Spring Cloud 三&#xff1a;API网关深入探索与实战应用 快速上手Spring Cloud 四&#xff1a;微服务治理与安全 快速上手Spring Cloud 五&#xff1a;Spring …

AOP切入点表达式基本格式

版权声明 本文原创作者&#xff1a;谷哥的小弟作者博客地址&#xff1a;http://blog.csdn.net/lfdfhl 官方地址 https://docs.spring.io/spring-framework/reference/core/aop/ataspectj/pointcuts.html AOP切入点表达式基本格式如下&#xff1a; execution(modifiers-patte…

竞赛 python+opencv+深度学习实现二维码识别

0 前言 &#x1f525; 优质竞赛项目系列&#xff0c;今天要分享的是 &#x1f6a9; pythonopencv深度学习实现二维码识别 &#x1f947;学长这里给一个题目综合评分(每项满分5分) 难度系数&#xff1a;3分工作量&#xff1a;3分创新点&#xff1a;3分 该项目较为新颖&…

ES6 学习(三)-- es特性

文章目录 1. Symbol1.1 使用Symbol 作为对象属性名1.2 使用Symbol 作为常量 2. Iterator 迭代器2.1 for...of循环2.2 原生默认具备Interator 接口的对象2.3 给对象添加Iterator 迭代器2.4 ... 解构赋值 3. Set 结构3.1 初识 Set3.2 Set 实例属性和方法3.3 遍历3.4 相关面试题 4…

RabbitMQ3.x之四_RabbitMQ角色说明及创建用户与授权

RabbitMQ3.x之四_角色说明及创建用户与授权 文章目录 RabbitMQ3.x之四_角色说明及创建用户与授权1. 访问和授权1. Tags说明2. 命令行示例 2. 管理界面新建用户及访问授权1. 管理界面新建用户2. 管理界面中的授权说明3. guest用户不能远程登录提示 3. 创建用户1. 基本命令2. 实际…

新网站收录时间是多久,新建网站多久被百度收录

对于新建的网站而言&#xff0c;被搜索引擎收录是非常重要的一步&#xff0c;它标志着网站的正式上线和对外开放。然而&#xff0c;新网站被搜索引擎收录需要一定的时间&#xff0c;而且时间长短受多种因素影响。本文将探讨新网站收录需要多长时间&#xff0c;以及新建网站多久…

微信小程序更换头像的功能

微信小程序开发&#xff0c;个人中心中更换头像的更能使用频率很高&#xff0c;这里记录下实现方式&#xff1a; <view class"setting-list avatar-container"><text>头像</text><view class"avatar"><button hover-class"…

华为云使用指南02

5.​​使用GitLab进行团队及项目管理​​ GitLab旨在帮助团队进行项目开发协作&#xff0c;为软件开发和运营生命周期提供了一个完整的DevOps方案。GitLab功能包括&#xff1a;项目源码的管理、计划、创建、验证、集成、发布、配置、监视和保护应用程序等。该镜像基于CentOS操…

ZK友好代数哈希函数安全倡议

1. 引言 前序博客&#xff1a; ZKP中的哈希函数如何选择ZK-friendly 哈希函数&#xff1f;snark/stark-friendly hash函数Anemoi Permutation和Jive Compression模式&#xff1a;高效的ZK友好的哈希函数Tip5&#xff1a;针对Recursive STARK的哈希函数 随着Incrementally Ve…

STM32 字符数组结束符 “\0”

STM32 字符数组结束符 “\0” 使用字符数组使用printf&#xff0c;string参考 使用字符数组 使用STM32的串口发送数据&#xff0c;核心代码如下&#xff1a; char str[] "hello world!\n\r";while(1) {HAL_UART_Transmit(&huart2, str, sizeof (str), 10);HAL…

构建一个基础的大型语言模型(LLM)应用程序

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗&#xff1f;订阅我们的简报&#xff0c;深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同&#xff0c;从行业内部的深度分析和实用指南中受益。不要错过这个机会&#xff0c;成为AI领…

Radio Silence for mac 好用的防火墙软件

Radio Silence for Mac是一款功能强大的网络防火墙软件&#xff0c;专为Mac用户设计&#xff0c;旨在保护用户的隐私和网络安全。它具备实时网络监视和控制功能&#xff0c;可以精确显示每个网络连接的状态&#xff0c;让用户轻松掌握网络活动情况。 软件下载&#xff1a;Radio…

图扑数字孪生智慧城市,综合治理一屏统览

现代城市作为一个复杂系统&#xff0c;牵一发而动全身&#xff0c;城市化进程中产生新的矛盾和社会问题都会影响整个城市系统的正常运转。智慧城市是应对这些问题的策略之一。领导曾在中央城市工作会议上指出&#xff0c;城市工作要树立系统思维&#xff0c;从构成城市诸多要素…

探索数据库mysql--------------mysql主从复制和读写分离

目录 前言 为什么要主从复制&#xff1f; 主从复制谁复制谁&#xff1f; 数据放在什么地方&#xff1f; 一、mysql支持的复制类型 1.1STATEMENT&#xff1a;基于语句的复制 1.2ROW&#xff1a;基于行的复制 1.3MIXED&#xff1a;混合类型的复制 二、主从复制的工作过程 三个重…

HarmonyOS 应用开发之UIAbility组件与UI的数据同步

基于当前的应用模型&#xff0c;可以通过以下几种方式来实现UIAbility组件与UI之间的数据同步。 使用EventHub进行数据通信&#xff1a;在基类Context中提供了EventHub对象&#xff0c;可以通过发布订阅方式来实现事件的传递。在事件传递前&#xff0c;订阅者需要先进行订阅&a…