CICD持续集成持续交付部署

一、CICD概念

1、什么是CI/CD?

通俗来说就是启动一个服务,能够监听代码变化,然后自动执行构建、测试、打包、发布等流程;

2、CI  持续集成

指在开发人员频繁地提交新代码,都会自动执行构建、测试。根据测试结果,我们可以确定新代码能否合并到主分支。假设现在有个应用的代码存储在仓库上,每天开发人员都会提交很多次新代码,针对每次提交,我们可以创建一系列脚本进行自动测试,降低往应用里引入错误的概率。持续集成过程中很重视自动化测试验证结果,以保障所有的提交在合并主线之后的质量问题,如果构建或测试的失败,可以快速地反馈到相关负责人,以尽快解决达到一个更稳定的版本。

3、CD  持续交付

指将完成CI的最新代码部署到类生产环境进行功能验证,以确保新增的代码在生产环境中是可用的。

4、CD  持续部署

指在持续交付的基础上,通过自动化部署的手段将软件功能频繁的部署到生产环境中。

二、CICD部署流程

1、首先部署gitlab代码仓库服务器,用于接收开发人员提交的代码

2、部署Jenkins服务器作为CICD服务器,Jenkins可以通过手动或自动的方式拉取代码。在本地对大妈进行编译、审查、打包。然后Jenkins把打包好的应用部署到tomcat服务器中(通过CD持续部署部署到生产环境或预生产环境)

192.168.170.100gitlab代码仓库服务器
192.168.170.200CICD持续集成持续部署服务器
192.168.170.4模拟生产环境的服务器

1、初始化

关闭防火墙、关闭seliux、修改主机名

2、部署gitlab服务器

修改配置文件/etc/gitlab/gitlab.rb

修改访问地址为当前服务器地址,默认80端口,可以换成别的端口,我换成82

vim /etc/gitlab/gitlab.rb
---------------------------------------------------
external_url 'http://192.168.170.100:82'
1112 nginx['listen_port'] = 82
---------------------------------------------------
gitlab-ctl reconfigure    #重新生成配置
gitlab-ctl restart        #重启

浏览器访问,先自定义密码,然后登录仓库

创建组、创建项目、创建用户

把用户加到群组中,选择角色

上传代码包,解压

unzip web_demo.zip
cd web_demo/           进入代码目录#Git 全局设置
git config --global user.name "wr"
git config --global user.email "wr@xy101.com"#推送现有文件夹(先执行init初始化,把gitlab仓库远程添加进来并且把代码添加并提交,推送代码)
cd existing_folder
git init
git remote add origin http://192.168.170.100:82/xy101/web_demo.git
git add .
git commit -m "Initial commit"
git push -u origin master#推送现有的 Git 仓库
cd existing_repo
git remote rename origin old-origin
git remote add origin http://192.168.170.100:82/xy101/web_demo.git
git push -u origin --all
git push -u origin --tags

至此gitlab代码仓库服务器部署成功

3、部署Jenkins服务器

先准备jdk环境(11版本以上),修改jdk配置文件。部署Jenkins

//准备jdk环境
cd /opt/
rz -Etar xf jdk-8u391-linux-x64.tar.gz 
tar xf jdk1.8.0_391
mv jdk-17.0.9/ /usr/local/
mv jdk1.8.0_391/ /usr/local/
cd /usr/local/vim /etc/profile
-----------------------------------------------
export JAVA_HOME=/usr/local/jdk1.8.0_391
export CLASSPATH=.:${JAVA_HOME}/lib
export PATH=${JAVA_HOME}/bin:$PATH
-----------------------------------------------
source /etc/profile
java -version


//部署Jenkins,加载Jenkins的yum源
wget -O /etc/yum.repos.d/jenkins.repo https://pkg.jenkins.io/redhat-stable/jenkins.repo --no-check-certificate
rpm --import https://pkg.jenkins.io/redhat-stable/jenkins.io-2023.keyyum install epel-release -y
yum install jenkins -y

修改Jenkins的服务管理文件,修改启动参数,指定java环境为17

cd /usr/lib/systemd/system
vim jenkins.service
-----------------------------------------34 User=root35 Group=root51 Environment="JAVA_HOME=/usr/local/jdk-17.0.9"70 Environment="JENKINS_PORT=8080"
--------------------------------------------------
systemctl start jenkins.service
netstat -lntp | grep

访问之前先进入Jenkins的工作目录做些修改,更新下Jenkins的插件源地址

#替换插件更新源
sed -i 's#https://updates.jenkins.io/update-center.json#https://mirrors.tuna.tsinghua.edu.cn/jenkins/updates/update-center.json#g' /var/lib/jenkins/hudson.model.UpdateCenter.xmlsed -i 's#https://updates.jenkins.io/download#https://mirrors.tuna.tsinghua.edu.cn/jenkins#g' /var/lib/jenkins/updates/default.json
sed -i 's#https://www.google.com#https://www.baidu.com#g' /var/lib/jenkins/updates/default.jsonsystemctl restart jenkins

首次访问时会需要访问服务器文件获取密码,浏览器访问http://192.168.170.200:8080

如果安装出现卡顿可以重启再试

想要Jenkins能够从代码仓库中拉取代码,首先安装git插件支持账号密码认证,

到git的访问页面复制URL

然后第二步对代码进行编译打包。上传apache-maven-3.6.2-bin.tar.gz,Maven工具主要用于对java项目自动化构建,把java代码打包成jar包或者war包。修改环境变量

cd /opt/
rz -E
tar xf apache-maven-3.6.2-bin.tar.gz 
mv apache-maven-3.6.2 /usr/local/maven
cd /usr/local/maven
vim /etc/profile
--------------------------------------------------------------
export MAVEN_HOME=/usr/local/maven
export JAVA_HOME=/usr/local/jdk1.8.0_391
export CLASSPATH=.:${JAVA_HOME}/lib
export PATH=${MAVEN_HOME}/bin:${JAVA_HOME}/bin:$PATH
--------------------------------------------------------------
source /etc/profile//查看mvn版本和环境
mvn -v//在Maven目录中创建repo文件,用于存放Maven下载的依赖包文件,修改设置
mkdir repo
cd conf/
vim settings.xml  添加一行配置
--------------------------------------------------------------55   <localRepository>/usr/local/maven/repo</localRepository>
160     <mirror>
161       <id>alimaven</id>
162       <mirrorOf>central</mirrorOf>
163       <name>aliyun maven</name>
164       <url>http://maven.aliyun.com/nexus/content/groups/public/</url>
165     </mirror>
-----------------------------------------------------------------

设置Jenkins,将其与Maven关联起来

设置系统配置

现在可以使用Jenkins调用Maven,对拉取的代码进行打包

4、远程部署代码到tomcat服务器

安装tomcat,修改配置文件

cd /opt/
rz -e
tar xf apache-tomcat-9.0.16.tar.gz 
mv apache-tomcat-9.0.16 /usr/local/tomcat
cd /usr/local/tomcat/conf/
vim tomcat-users.xml
--------------------------------------------------------------<role rolename="tomcat"/><role rolename="role1"/><role rolename="manager-script"/><role rolename="manager-gui"/><role rolename="manager-status"/><role rolename="admin-gui"/><role rolename="admin-script"/><user username="tomcat" password="tomcat" roles="manager-gui,manager-script,tomcat,admin-gui,admin-script"/>
-----------------------------------------------------------------

修改配置文件,启动tomcat

cd /usr/local/tomcat/webapps/manager/META-INF/
vim context.xml
------------------------------------------------------
<!--<Valve className="org.apache.catalina.valves.RemoteAddrValve"allow="127\.\d+\.\d+\.\d+|::1|0:0:0:0:0:0:0:1" />
-->
----------------------------------------------------------

回到Jenkins服务端,安装插件

插件安装好了之后,快速配置一下

5、代码更新

cd /opt/web_demo/src/main/webapp/
vim index.jspcd /opt/web_demo
git push -u origin master

更新代码后我们没有手动打包、部署到远程服务器,这就是CICD自动完成相关的流程。

在本章实验中我们是通过手动在Jenkins表单填入相关操作的参数进行操作的,实际上这不利于我们维护,生产环境中是通过代码维护的。通过写一些流水线的代码,自动化实现代码拉取、代码编译打包和远程部署工作,我们称这个为编写teplem流水线脚本。

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

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

相关文章

6.登录功能的开发——获取当前用户、用户退出

登录功能的开发——获取当前用户、用户退出 一、获取当前用户1.1后端处理1.2前端处理 二、用户的退出2.1后端2.2前端 一、获取当前用户 在上一篇文章&#xff0c;我们实现了用户的的登录&#xff0c;但是后续并没有处理完整&#xff0c;比如登录成功后你要跳转回原来的的页面吧…

酷家乐 同盾滑块分析

声明: 本文章中所有内容仅供学习交流使用&#xff0c;不用于其他任何目的&#xff0c;抓包内容、敏感网址、数据接口等均已做脱敏处理&#xff0c;严禁用于商业用途和非法用途&#xff0c;否则由此产生的一切后果均与作者无关&#xff01; 有相关问题请第一时间头像私信联系我…

Linux 软件编程 数据库与网页

sqlite3数据库操作效率&#xff1a; 1.增加事务机制 2.关闭数据库磁盘同步写入 3.使用预处理SQL语句机制实现提升数据库效率 事务机制&#xff1a; 1.可以提高sqlite处理数据的效率 2.确保数据的一致性 关闭数据库中写同步机制&#xff1a; 在…

【GH】【EXCEL】P3: Set Conditional Formatting To Excel Data By Gh

文章目录 conditional formattingdata sourceConditional ScaleConditional Scale Conditional PercentConditional Top Percent Conditional AverageConditional Average Multiple ConditionsConditional BarConditional Bar Conditional UniqueConditional Unique Conditiona…

推荐一个完全自由的目录设计网站

引言 如果我们能通过网站出一本书&#xff0c;这将是一件很酷的事。 事实上&#xff0c;我们通过网站发布知识&#xff0c;最常见的是写博客。 这二者有什么区别呢&#xff1f; 书本的知识内容有很强的逻辑性、系统性。而博客是随心所欲的&#xff0c;一时灵感来了就写一篇…

鸿蒙(API 12 Beta3版)【使用ImagePacker完成图片编码】图片开发指导

图片编码指将PixelMap编码成不同格式的存档图片&#xff08;当前仅支持打包为JPEG、WebP 和 png 格式&#xff09;&#xff0c;用于后续处理&#xff0c;如保存、传输等。 开发步骤 图片编码进文件流 创建图像编码ImagePacker对象。 // 导入相关模块包 import { image } fr…

《计算机操作系统》(第4版)第6章 输入输出系统 复习笔记

第6章 输入输出系统 一、I/O 系统的功能、模型和接口 1.I/O 系统的基本功能 (1)隐藏物理设备的细节。 (2)与设备的无关性。 (3)提高处理机和I/O 设备的利用率。 ( 4 ) 对I/O 设备进行控制。 (5)确保对设备的正确共享。 (6)错误处理。 2.I/O 系统的层次结构和模型 (…

Stability AI发布了单目视频转4D模型的新AI模型:Stable Video 4D

开放生成式人工智能初创公司Stability AI在3月发布了Stable Video 3D&#xff0c;是一款可以根据图像中的物体生成出可旋转的3D模型视频工具。Stability AI在7月24日发布了新一代的Stable Video 4D&#xff0c;增添了赋予3D模移动作的功能。 Stable Video 4D能在约40秒内生成8…

[数据集][目标检测]手钳检测数据集VOC+YOLO格式141张1类别

数据集格式&#xff1a;Pascal VOC格式YOLO格式(不包含分割路径的txt文件&#xff0c;仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件) 图片数量(jpg文件个数)&#xff1a;141 标注数量(xml文件个数)&#xff1a;141 标注数量(txt文件个数)&#xff1a;141 标注类别…

5G+工业互联网产教融合创新实训室解决方案

一、建设背景 随着第五代移动通信技术&#xff08;5G&#xff09;的快速普及和工业互联网的迅猛发展&#xff0c;全球制造业正面临着前所未有的深刻变革。5G技术凭借其超高的传输速率、极低的延迟以及大规模的连接能力&#xff0c;为工业自动化、智能制造等领域带来了革命性的…

访客管理系统 对接微信公众号,发送通知消息

微信公众号模板消息 - 要实现的效果图 1 公众号设置对接的域名 打开【公众号设置】 公众号设置域名&#xff0c;需要先用http server做安全验证。 安全验证成功后&#xff0c;域名配置完毕。 2 获取公众号APPID 和 Secret 3 开通模板消息 官方审核需要2-3日 4 设置IP白名单&…

芯片后端之 PT 使用 report_timing 产生报告 之 -nets 选项

今天,我们再学习一点点 后仿真相关技能。 那就是,了解 report_timing 中的 -nets 选项 。 如果我们仅仅使用如下命令,执行后会发现: pt_shell> report_timing -from FF1/CK -to FF2/d -delay_type max 我们使用命令 report_timing 报出的如上路径延时信息,仅仅显示…

docker yapi安装

概述 YApi 是高效、易用、功能强大的 api 管理平台&#xff0c;旨在为开发、产品、测试人员提供更优雅的接口管理服务。可以帮助开发者轻松创建、发布、维护 API&#xff0c;YApi 还为用户提供了优秀的交互体验&#xff0c;开发人员只需利用平台提供的接口数据写入工具以及简单…

学习记录——day35 数据库 sqlite3

目录 一、安装sqlite3数据库以及sqlite3函数库 二、数据库的结构 三、常用数据库类型 1、sqlite3 2、mysql 四、sqlite3数据库的使用 1、打开数据库 2、sqlite3数据库中指令的使用 1&#xff09;界面指令 2&#xff09;操作指令 3&#xff09;大小写敏感性 3、创建表…

外排序之文件归并排序实现

外排序介绍 外排序是指能够处理极大量数据的排序算法。通常来说&#xff0c;外排序处理的数据不能一次装入内存&#xff0c;只能放在读写较慢的外存储器(通常是硬盘)上。外排序通常采用的是⼀种“排序-归并”的策略。在排序阶段&#xff0c;先读入能放在内存中的数据量&#x…

贪吃蛇(Qt版)

目录 一、项目介绍 界面一&#xff1a;游戏大厅界面 界面二&#xff1a;关卡选择界面 界面三&#xff1a;游戏界面 最终游戏效果&#xff1a; 二、项目创建与资源配置 1. 创建项目 2. 添加项目资源文件 三、项目实现 1. 游戏大厅界面 2. 关卡选择界面 3. 游戏房间界…

TCP 粘包问题

TCP是一个面向字节流的传输层协议。“流” 意味着 TCP 所传输的数据是没有边界的。这不同于 UDP 协议提供的是面向消息的传输服务&#xff0c;其传输的数据是有边界的。TCP 的发送方无法保证对方每次收到的都是一个完整的数据包。于是就有了粘包、拆包问题的出现。粘包、拆包问…

进程的创建、终止

目录 前言1. 进程创建2. 进程终止3. exit && _exit 的异同3.1 相同点3.2 不同点 前言 紧接着进程地址空间之后&#xff0c;我们这篇文章开始谈论进程控制相关的内容&#xff0c;其中包括进程是如何创建的&#xff0c;进程终止的几种情况&#xff0c;以及进程异常终止的…

Android低内存设备系统优化

切记,所有的优化都遵循一条准则: 空间换时间,时间换空间。 一、前言 我们为什么会觉得卡顿、不流畅? 卡顿等性能问题的最主要根源都是因为渲染性能,Android系统很有可能无法及时完成那些复杂的界面渲染操作。Android系统每隔16ms发出信号,触发对UI进行渲染,如果每次渲染…

Thinkphp6 反序列化漏洞分析

本文来自无问社区&#xff0c;更多实战内容可前往查看http://wwlib.cn/index.php/artread/artid/10431.html 版本&#xff1a;Thinkphp6&PHP7.3.4 TP 环境搭建利用 composer 命令进行&#xff0c;同时本次分析在 windows 环境下进行 composer create-project topthink/t…