第七章:敏捷开发工具方法-part2-CI/CD工具介绍
文章目录
- 前言
- 一、CI-持续集成
- 1.1 安装部署gitlab
- 二、gitlab CI配置
- 三、jenkins实现CI / CD
- 3.1 安装jenkins
- 3.2 配置CI
- 3.3 配置CD
- 3.4 其他构建方式
- 1、定时构建
- 2、指定参数构建
- 3、webhook自动根据git事件进行构建
前言
什么是CI/Cd?
CI-Continuous integration: 持续集成是指多名开发者在开发不同功能代码的过程当中,可以频繁的将代吗行合并到一起并切相互不影响工作。
CD-continuous deployment:持续部署是基于某种工具或平台实现代码自动化的构建、测试和部署到线上环境以实现交付高质量的产品,持续部署在某种程度上代表了一个开发团队的更新迭代速率。
Continuous Delivery: 持续交付是在持续部署的基础之上,将产品交付到线上环境,因此持续交付是产品价值的一种交付,是产品价值的一种盈利的实现。
- 持续交付并不是指软件每一个改动都要尽快的部署到产品环境中。它指的是任何的修改都已证明可以在任何时候实施部署。 持续
- 交付(Continuous Delivery)是一系列的开发实践方法,用来确保让代码能够快速安全的部署到产品环境中,它通过将每一次改动都提交到一个模拟产品环境中,使用严格的自动化测试,确保业务应用和服务能符合预期。因为使用完全的自动化过程来把每个变更自动的提交到测试环境中,所以当业务开发完成时,你有信心只需要按一次按钮就能将应用安全的部署到产品环境中。
特点:
- 通常将侧重研发侧的过程称为CI(持续集成),侧重正式环境部署的过程称为CD(持续交付)
- 一般不单独提持续部署(ContinuousDeployment)

主要工具:
- 代码仓库:Git进行管理;静态检查;Sonar集成
- 单元测试:Junit;单测覆盖率
- JaCoCo插件;编译打包;
- 集成部署: she11脚本/服务接口;
- 自动化测试:RobotFrameWork,
- 自动化测试平台;CI报告;Sonar。
- Gitlab+Jenkins+SonarQube+阿里EDAS平台+RF自动化测试套件等.

一、CI-持续集成
Martin Flowler对持续集成是这样定义的:持续集成是一种软件开发实践,即团队开发成员经常集成它们的工作,通常每个成员每天至少集成一次,也就意味着每天可能会发生多次集成。每次集成都通过自动化的构建 (包括编译,部署,自动化测试)来验证,从而尽快地发现集成错误。许多团队发现这个过程可以大大减少集成的问题,让团队能够更快的开发内聚的软件。
常用工具:
- 代码管理:gitlab(企业自建),gitee(企业租户形式使用)
- 持续集成:jenkins
1.1 安装部署gitlab
- 官网:官网,中文官网
- 注意:建议安装的gitlab在虚拟机中至少给到2G以上内存,不然可能会安装不成功,卡在某个地方报错

1、下载镜像
由于官网镜像太慢,所以在国内开源镜像站中查找。如:清华大学开源软件镜像站 - 搜索gitlab镜像(目前使用社区版),下载最新。镜像列表地址:https://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/yum/el7/

2、登录服务器,下载镜像
# 下载
wget https://mirrors.tuna.tsingua.edu.cn/gitlab-ce/yum/el7/gitlab-ce-14.9.4-ce..el7.x864.rpm
# 安装邮件服务postfix(gitlab依赖)
yum install postfix
# 启动邮件服务
systemctl start postfix
# 安装gitlab
rpm -ivh gitlab-ce-14.9.4-ce.0.el7.x86_64.rpm
3、安装完成后,根据提示设置访问地址

# 修改添加gitlab的访问地址
vim /etc/gitlab/gitlab.rb
# 进入gitlab.rb编辑内容中后-----
external_url 'http://192.168.xx.xx:8000'
# :wq 保存并退出编辑----- ip试自身环境定
# 开放端口号
firewall-cmd --permanent --zone=public --add-port=8000/tcp
# 重启防火墙
firewall-cmd --reload
# 查看当前开放端口
firewall-cmd --list-ports
# 重置gitla
gitlab-ctl reconfigure
# 重启gitlab服务
gitlab-ctl restart
4、重启完成后,根据external_url访问gitlab
- 当遇到502时,可以尝试多刷新几次
- 如果一直无法访问,就通过
gitlab-ctl status查看运行状态 - 登录默认为root,初始密码默认在/etc/gitlab/initial_root_password中查看,登录gitlab后自定设置


二、gitlab CI配置
本节假设已建立一个vue3-vite项目的仓库,并在项目根目录新建
.gitlab-ci.yml
- gitlab-ci配置的保留字:image(使用docker image),services(使用docker service),stages(定义工作阶段),types(stage的别名),before_script(在工作任务执行前执行的脚本命令),after_script(在任务执行结束后执行的脚本命令),variables(定义变量)
- 配置文件示例
# stages:是保留字,用于定义工程执行的阶段
stages:- build- deploy
# build_job: job名称,可以自定义
build_job:stage: buildscript: - 'echo "start build"'- 'echo "多行输出"'deploy_job:stage: deployscript: 'echo "start deploy"'
- 以上只是简单的gitlab-ci配置,而要构建gitlab流水线,需要搭配使用runner,runner的安装一般由管理员部署实现,这里略过了。
三、jenkins实现CI / CD
官网地址, jenkins中文网

3.1 安装jenkins
以centos系统安装为例,官网参考:https://pkg.jenkins.io/redhat-stable/
- 注意:jenkins依赖于java,所以需要先安装java jdk
- 根据官网文档要求,在对应服务器上下载java及jinkins安装包

# 安装(已下载jenkins-2.332.3-1.1.noarch.rpm安装包
rpm -ivh jenkins-2.332.3-1.1.noarch.rpm
# 查看jenkins配置文件
vim /etc/init.d/jenkins
# 修改配置(端口或USER,视情况定)
vim /etc/sysconfig/jenkins
# 启动jenkins(首次启动较慢,可能需要四五分钟)
service jenkins start
# 获取初始密码
tail /var/lib/jenkins/secrets/initialAdminPassword
解锁jenkins获取初始密码

-
首次启动会推荐安装插件,但安装会耗时很久,所以建议不安装推荐插件,点击“选择插件来安装”后,不勾选插件从而进入下一步。


-
创建管理员用户

-
配置实例(默认不改就好)

进入系统后,显示欢迎页:

- 添加中文插件(Manage Jenkins左侧菜单——》Manage Plugins——》available标签页)

3.2 配置CI
1、创建新任务并命名

2、关联gitlab仓库
此处需要先安装git插件

在jenkins安装对应服务器上安装git
# 安装
yum install -y git
# 测试安装是否完成
git --version
- 配置源码管理

- 添加凭据,向下选择是否切换分支

- 点击构建,测试是否成功

/var/lib/jenkins/workspace是jenkins的默认工作目录,在里面可以看到上一步构建拉取到的项目文件
- 新增构建步骤(进入上一步新建任务的配置中)

- 配置shell

3.3 配置CD
1、基于上一步的执行shell脚本中,继续添加shell
cd /var/lib/jenkins/workspace/DemoTest
# 安装依赖
npm install
# 打包
npm run build
# 进入打包后目录
cd dist
# 压缩前先删除已有压缩包
rm -f demotest.tar.gz
# 压缩所有文件
tar -zcvf demotest.tar.gz *
# 查看dist目录
ll

2、将上一步的压缩包,传到nginx服务器
- 先安装 publish over ssh插件(用于推送压缩包)

- 配置Publish Over ssh (对应nginx服务根目录)


- 添加构建后操作

- 添加构建后操作配置(注意:对应nginx服务器上已创建demotest文件夹的前提下,且配置了nginx对demotest路径的配置)

3.4 其他构建方式
1、定时构建
1、打开demotest任务的配置,切到构建触发器

2、指定参数构建
1、安装git parameter插件

2、修改任务配置——勾选“参数化构建过程”

3、添加Git参数配置

4、修改“源码管理”处的指定分支

5、查看可用构建的标签和分支(选中后,点击开始构建即可)

3、webhook自动根据git事件进行构建
1、添加插件


2、打开demotest配置(在安装gitlab插件后,会新增一个构建触发器选项如下)

3、到gitlab中配置出站请求(gitlab群组管理中设置)
设置——》网络——》出站请求

4、设置webhooks(对应代码仓库中设置)

5、测试push event

相关文章:
第七章:敏捷开发工具方法-part2-CI/CD工具介绍
文章目录 前言一、CI-持续集成1.1 安装部署gitlab 二、gitlab CI配置三、jenkins实现CI / CD3.1 安装jenkins3.2 配置CI3.3 配置CD3.4 其他构建方式1、定时构建2、指定参数构建3、webhook自动根据git事件进行构建 前言 什么是CI/Cd? CI-Continuous integration&…...
【自学开发之旅】Flask-回顾--对象拆分-蓝图(二)
url-统一资源定位符-不同的url对应不同的资源 作为服务端,url和视图函数的映射关系就是路由。 定义传递参数的方式: 1.创建动态url app.route("/login2/<username>/<passwd>") def login2(username, passwd):if username "…...
自动驾驶中间件
自动驾驶中间件 1. 什么是中间件2. 中间件的分类3. 自动驾驶为什么需要中间件4. 通信中间件 Reference: 自动驾驶中间件:量产落地的关键技术通俗易懂的告诉你什么是中间件 对于初入自动驾驶行业的人来说,各色各样的新型传感器、线控系统、芯…...
鲲鹏920(ARM64)移植javacpp
JavaCPP JavaCPP 使得Java 应用可以在高效的访问本地C++方法,JavaCPP底层使用了JNI技术,可以广泛的用在Java SE应用中(也包括安卓),以下两个特性是JavaCPP的关键,稍后咱们会用到: 提供一些注解,将Java代码映射为C++代码提供一个jar,用java -jar命令可以将C++代码转为…...
python打包exe实用版
pyinstaller模块用于将python项目打包成exe文件,以方便地在没有安装python环境的机器上运行。该模块使用 pip install pyinstaller 安装即可。 参数命令含义-Dpyinstaller -D demo.py默认选项。除了主程序demo.exe外,还会在在dist文件夹中生成很多依赖文…...
什么是反向代理(Reverse Proxy)?解释反向代理的作用和常见应用。
1、什么是反向代理(Reverse Proxy)?解释反向代理的作用和常见应用。 反向代理是一种代理服务器模型,它位于客户端和后端服务器之间。它允许将请求转发到后端服务器,并将响应返回给客户端。反向代理的主要作用如下&…...
算法通关村第十二关——不简单的字符串转换问题
前言 字符串是我们在日常开发中最常处理的数据,虽然它本身不是一种数据结构,但是由于其可以包含所有信息,所以通常作为数据的一种形式出现,由于不同语言创建和管理字符串的方式也各有差异,因此针对不同语言特征又产生…...
PROSOFT PTQ-PDPMV1网络接口模块
通信接口:PROSOFT PTQ-PDPMV1 网络接口模块通常配备了多种通信接口,以便与不同类型的设备和网络进行通信。常见的接口包括以太网、串行端口(如RS-232和RS-485)、Profibus、DeviceNet 等。 协议支持:该模块通常支持多种…...
力扣(LeetCode)算法_C++——稀疏矩阵的乘法
给定两个 稀疏矩阵 :大小为 m x k 的稀疏矩阵 mat1 和大小为 k x n 的稀疏矩阵 mat2 ,返回 mat1 x mat2 的结果。你可以假设乘法总是可能的。 示例 1: 输入:mat1 [[1,0,0],[-1,0,3]], mat2 [[7,0,0],[0,0,0],[0,0,1]] 输出&am…...
华为云API人脸识别服务FRS的感知力—偷偷藏不住的你
云服务、API、SDK,调试,查看,我都行 阅读短文您可以学习到:人工智能AI人脸的识别、检测、搜索、比对 1、IntelliJ IDEA 之API插件介绍 API插件支持 VS Code IDE、IntelliJ IDEA等平台、以及华为云自研 CodeArts IDE,…...
产品技术体系
产品,是一个企业或公司针对市场客户推出的一系列相关的功能或者服务,为对应的客户解决实际问题,进而产生对应的商业、社会价值。有了这些实际的价值,企业就会获得相应的利益或者利润回报。正常来讲,这应该是一个良性的…...
Docker从认识到实践再到底层原理(二-3)|LXC容器
前言 那么这里博主先安利一些干货满满的专栏了! 首先是博主的高质量博客的汇总,这个专栏里面的博客,都是博主最最用心写的一部分,干货满满,希望对大家有帮助。 高质量博客汇总 然后就是博主最近最花时间的一个专栏…...
[运维|docker] ubuntu镜像更新时报E: Problem executing scripts APT::Update::Post-Invoke错误
参考文献 docker-ce在ubuntu:22.04进行apt update时报错E: Problem executing scripts APT::Update::Post-Invoke 详细报错信息 E: Problem executing scripts APT::Update::Post-Invoke rm -f /var/cache/apt/archives/*.deb /var/cache/apt/archives/partial/*.deb /var/c…...
计算机网络的故事——HTTP首部
HTTP首部 在HTTP协议通信交互中使用的首部字段。不限于RFC2616中定义的47种首部字段,还有Cookie、setCookie和Content-Disposition等 HTTP 首部字段将定义成缓存代理和非缓存代理的行为,分成 2 种类型。端到端首部和逐跳首部...
js农历与阳历转换使用笔记
1、新建utils/dateChange.js /*** 1900-2100区间内的公历、农历互转* charset UTF-8* Author jiangjiazhi* 公历转农历:calendar.solar2lunar(1987,11,01); //[you can ignore params of prefix 0]* 农历转公历:calendar.lunar2solar(1987,09,10); //[…...
苹果与芯片巨头Arm达成20年新合作协议,将继续采用芯片技术
9月6日消息,据外媒报道,芯片设计巨头Arm宣布在当地时间周二提交给美国证券交易委员会(SEC)的最新IPO文件中,透露与苹果达成了一项长达20年的新合作协议,加深了双方之间的合作关系。 报道称,虽然…...
Linux下systemd深入指南:如何优化Java服务管理与开机自启配置
🌷🍁 博主猫头虎(🐅🐾)带您 Go to New World✨🍁 🦄 博客首页——🐅🐾猫头虎的博客🎐 🐳 《面试题大全专栏》 🦕 文章图文…...
PMOS阵列(PMOS阵列代替)
pmos阵列没有找到,不过高压侧驱动芯片倒是可以使用VN340SP Datasheet - VN340SP-E & VN340SP-33-E - Quad high-side smart power solid-state relayhttps://www.st.com/resource/en/datasheet/vn340sp-33-e.pdf VN340SP-E - 四通道高侧智能功率固态继电器 - 意…...
Linux常见指令
1、ls指令 语法: ls [选项][目录或文件] 功能:对于目录,该命令列出该目录下的所有子目录与文件。对于文件,将列出文件名以及其他信息。 常用选项: -a 列出目录下的所有文件,包括以 . 开头的隐含文件-l 列出…...
让开发回归简单模式-组件封装
对于工作年限不长的程序员来说,知识储备是非常关键的。在开发中各种技术的应用已经非常普遍了,例如常见的各种ORM,各种中间件如Redis,MQ等等,又如WebApi路由配置等等,对于常常做开发的程序员来说,都是小事&…...
SkyWalking 10.2.0 SWCK 配置过程
SkyWalking 10.2.0 & SWCK 配置过程 skywalking oap-server & ui 使用Docker安装在K8S集群以外,K8S集群中的微服务使用initContainer按命名空间将skywalking-java-agent注入到业务容器中。 SWCK有整套的解决方案,全安装在K8S群集中。 具体可参…...
反向工程与模型迁移:打造未来商品详情API的可持续创新体系
在电商行业蓬勃发展的当下,商品详情API作为连接电商平台与开发者、商家及用户的关键纽带,其重要性日益凸显。传统商品详情API主要聚焦于商品基本信息(如名称、价格、库存等)的获取与展示,已难以满足市场对个性化、智能…...
PPT|230页| 制造集团企业供应链端到端的数字化解决方案:从需求到结算的全链路业务闭环构建
制造业采购供应链管理是企业运营的核心环节,供应链协同管理在供应链上下游企业之间建立紧密的合作关系,通过信息共享、资源整合、业务协同等方式,实现供应链的全面管理和优化,提高供应链的效率和透明度,降低供应链的成…...
基于Uniapp开发HarmonyOS 5.0旅游应用技术实践
一、技术选型背景 1.跨平台优势 Uniapp采用Vue.js框架,支持"一次开发,多端部署",可同步生成HarmonyOS、iOS、Android等多平台应用。 2.鸿蒙特性融合 HarmonyOS 5.0的分布式能力与原子化服务,为旅游应用带来…...
屋顶变身“发电站” ,中天合创屋面分布式光伏发电项目顺利并网!
5月28日,中天合创屋面分布式光伏发电项目顺利并网发电,该项目位于内蒙古自治区鄂尔多斯市乌审旗,项目利用中天合创聚乙烯、聚丙烯仓库屋面作为场地建设光伏电站,总装机容量为9.96MWp。 项目投运后,每年可节约标煤3670…...
在Ubuntu中设置开机自动运行(sudo)指令的指南
在Ubuntu系统中,有时需要在系统启动时自动执行某些命令,特别是需要 sudo权限的指令。为了实现这一功能,可以使用多种方法,包括编写Systemd服务、配置 rc.local文件或使用 cron任务计划。本文将详细介绍这些方法,并提供…...
3403. 从盒子中找出字典序最大的字符串 I
3403. 从盒子中找出字典序最大的字符串 I 题目链接:3403. 从盒子中找出字典序最大的字符串 I 代码如下: class Solution { public:string answerString(string word, int numFriends) {if (numFriends 1) {return word;}string res;for (int i 0;i &…...
06 Deep learning神经网络编程基础 激活函数 --吴恩达
深度学习激活函数详解 一、核心作用 引入非线性:使神经网络可学习复杂模式控制输出范围:如Sigmoid将输出限制在(0,1)梯度传递:影响反向传播的稳定性二、常见类型及数学表达 Sigmoid σ ( x ) = 1 1 +...
QT: `long long` 类型转换为 `QString` 2025.6.5
在 Qt 中,将 long long 类型转换为 QString 可以通过以下两种常用方法实现: 方法 1:使用 QString::number() 直接调用 QString 的静态方法 number(),将数值转换为字符串: long long value 1234567890123456789LL; …...
Android第十三次面试总结(四大 组件基础)
Activity生命周期和四大启动模式详解 一、Activity 生命周期 Activity 的生命周期由一系列回调方法组成,用于管理其创建、可见性、焦点和销毁过程。以下是核心方法及其调用时机: onCreate() 调用时机:Activity 首次创建时调用。…...
