CICD持续集成持续交付部署

news2024/11/25 2:27:44

一、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 -E

tar 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.key

yum install epel-release -y
yum install jenkins -y

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

cd /usr/lib/systemd/system
vim jenkins.service
-----------------------------------------
 34 User=root
 35 Group=root
 51 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.xml

sed -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.json

systemctl 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.jsp

cd /opt/web_demo
git push -u origin master

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

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

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

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

相关文章

WPS回应“崩了”:提供15天会员补偿,另有新羊毛,你还不来薅?

近期&#xff0c;“WPS崩了”这一话题在时隔两个月后&#xff0c;再次因多名用户反馈软件使用问题而登上微博热搜。 WPS官方微博随后发布消息称&#xff0c;经过工程师的紧急修复&#xff0c;WPS服务已经恢复正常。 为了补偿用户&#xff0c;在8月22日0点至24点期间&#xff…

视频插帧—— RIFE 和 IFNet 的机制和应用

介绍 最近&#xff0c;数字和模拟技术开始加速融合。我们生活在一个人工智能技术能够显著提高质量的时代&#xff0c;只要模拟材料能够数字化。 例如&#xff0c;讨论中涉及到的纸艺软件&#xff0c;纸龙的移动模型被时间锁定&#xff0c;以大约 3 fps&#xff08;每秒帧数&a…

vm 虚拟机无法调用摄像头(亲测有效)

-- 前言1 报错说明1.1 opencv调用摄像头失败&#xff0c;画面窗口无法显示1.2 选择连接摄像头出现失败&#xff1a;桌面右下角出现【USB 设备“Acer Integrated RGB Camera"的连接失败】连接摄像头方法 2 解决方法步骤一步骤二步骤三 补充 前言 网上找的很多方法都是无效…

2024年游泳耳机哪个牌子好?四大热门游泳耳机多维测评盘点!

游泳不仅是夏日里最受欢迎的消暑方式&#xff0c;也是全年无休的一项全身性运动。在水中畅游时&#xff0c;若能伴随着喜爱的音乐&#xff0c;无疑能让体验更上一层楼。近年来&#xff0c;随着骨传导技术和防水材料的进步&#xff0c;游泳耳机已经成为许多游泳爱好者的必备装备…

网络编程,网络协议,UDP编程

网络&#xff1a; 1.协议&#xff1a;通信双方约定的一套标准 2.国际网络通信协议标准&#xff1a; 1.OSI协议&#xff1a; 应用层 发送的数据内容 表示层 数据是否加密 会话层 是否建立会话连接 传输层 …

electron仿微信,新建贴合窗口

说明 在写electron项目时&#xff0c;只有一个主窗口不足以满足需求&#xff0c;我们通常还会打开很多个窗口。 怎么打开一个子窗口像微信的聊天界面一样&#xff0c;全贴合在一起&#xff0c;看起来像一个整体呢&#xff1a; 分析 这个窗口有点像element ui中的抽屉(drawe…

回归预测|基于北方苍鹰优化NGO-Transformer-BiLSTM组合模型的数据预测Matlab程序多特征输入单输出

回归预测|基于北方苍鹰优化NGO-Transformer-BiLSTM组合模型的数据预测Matlab程序多特征输入单输出 文章目录 前言回归预测|基于北方苍鹰优化NGO-Transformer-BiLSTM组合模型的数据预测Matlab程序多特征输入单输出 一、NGO-Transformer-BiLSTM模型回归预测&#xff1a;NGO-Trans…

VUE学习笔记 2

条件渲染 v-if : 若不频繁切换&#xff0c;会删除DOM节点&#xff0c;再重复添加&#xff1b; template只能配合v-if v-show: 适用于频繁切换&#xff0c;动态变换但不删除DOM节点 列表渲染 方式&#xff1a; v-for"p in person" :key"yyy" 遍历数组…

详讲C#中如何存储当前项目的设置-超级简单省事

我们在编写软件的时候总有一些配置数据需要保存&#xff0c;比如用户选择的偏好设置&#xff0c;又如软件所用到的数据库文件等。我们有很多中方式都可以保存&#xff0c;比如直接保存在某个文本文件&#xff0c;或者ini文件中&#xff0c;其实最简单的办法是保存在项目的资源文…

File的常见成员方法(创建,删除)

一.File的常见成员方法&#xff08;创建&#xff0c;删除&#xff09;&#xff1a; 二.方法的代码实现&#xff1a; 1.createNewFile方法->创建一个新的空的文件&#xff1a; 如上图直接调用createNewFile方法会报错&#xff0c;处理方案如下&#xff1a; 本例选择第一个&a…

Kotlin OpenCV 图像图像51图片轮廓获取

Kotlin OpenCV 图像图像51图片轮廓获取 在OpenCV库中&#xff0c;Imgproc.adaptiveThreshold、Imgproc.findContours 和 Imgproc.boundingRect 这三个方法在图像处理和分析中非常有用。以下是它们的详细作用&#xff1a; Imgproc.adaptiveThreshold解释作用该方法用于将灰度图…

工业排污检测算法的算法样本及工业排污检测的源码展示

工业排污检测算法是一种结合了先进人工智能、图像识别、声音识别、数据分析等技术的解决方案&#xff0c;专门用于实时监测和评估工业排放的污染物。这种算法在环境保护、合规管理、数据支持等方面具有显著的优势&#xff0c;并且可以广泛应用于各种工业场景。 主要作用 1、实…

宝塔面板本地搭建Typecho博客结合内网穿透实现远程访问本地站点

文章目录 前言1. 安装环境2. 下载Typecho3. 创建站点4. 访问Typecho5. 安装cpolar6. 远程访问Typecho7. 固定远程访问地址8. 配置typecho 前言 本文主要介绍如何通过Linux centOS8宝塔面板工具&#xff0c;本地搭建一个Typecho个人博客网站。并结合cpolar内网穿透工具配置公网…

关于Arrays.asList返回List无法新增和删除?

这个是在写项目的时候发现的&#xff0c;然后就分析了一下源码&#xff0c;得其内部原理 复现代码示例&#xff1a; public class ArraysAsList {public static void main(String[] args) {Integer[] array {1, 2, 3, 4, 5};List<Integer> list Arrays.asList(array);…

html+css+js网页制作 电商小米商城7个页面

htmlcssjs网页制作 电商小米商城7个页面 ui还原度百分之99 网页作品代码简单&#xff0c;可使用任意HTML编辑软件&#xff08;如&#xff1a;Dreamweaver、HBuilder、Vscode 、Sublime 、Webstorm、Text 、Notepad 等任意html编辑软件进行运行及修改编辑等操作&#xff09;。 …

uniapp/uniapp x总结

uni-app组成和跨端原理 上图所诉 App的渲染引擎&#xff1a;同时提供了2套渲染引擎&#xff0c;.vue页面文件由webview渲染&#xff0c;原理与小程序相同&#xff1b;.nvue页面文件由原生渲染&#xff0c;原理与react native相同。开发者可以根据需要自主选择渲染引擎。 uniapp…

STM32f407 网络接收 fpga 的 bin 文件并更新到 fpga series7(2)

STM32f407 网络接收 fpga 的 bin 文件并更新到 fpga series7(2) 简介 实验 2&#xff1a;在单片机搭建好 tcp 服务器后&#xff0c;编写传送文件的上位机。 整体实现 - 利用qt的tcpsocket简单封装 - 每次发送512字节&#xff0c;这样小的tcp包就不会自动分包。保证每一个51…

多商户商品下单限购问题修复

问题: 当商品设置限购为 1 时,够买数量未超过限购,但是还是提示超出限购数量 修复方法: 修改代码路径: app\common\repositories\store\order\StoreOrderCreateRepository.php 修改代码一: i s p a y s a r r a y u n i q u e ( a r r a y c o l u m n ( is_pays array_un…

阿里一款非常不错的多级缓存框架如何使用?

目录 前言 1. jetcache简介 2. jetcache使用 2. jetcache使用 3. 测试 3.1 方式一测试 3.2 方式二测试 3.3 方式三测试 4.缺点优点 5. 常见报错 前言 大家好&#xff0c;我是月夜枫~~ 在很多大数据、高并发的业务中&#xff0c;像MySql等传统的关系型数据库已经不能适用…

C++ 设计模式(3. 抽象工厂模式)

抽象工厂模式也是一种创建型设计模式&#xff0c;提供了一个创建一系列相关或相互依赖对象的接口&#xff0c;而无需指定它们具体的类【引用自大话设计模式第15章】基本结构 抽象工厂模式包含多个抽象产品接口&#xff0c;多个具体产品类&#xff0c;一个抽象工厂接口和多个具体…