1.环境准备
| 主机名 | IP | 配置 |
|---|---|---|
| dev | 192.168.233.146 | 2G C1 |
| project_master | 192.168.233.154 | 3G,2C1 |
| project_slave | 192.168.233.155 | 3G,2C1 |
| auto_deployment | 192.168.233.156 | 5G,2C1 |
2.初始化环境
四台都做
#1.修改主机名
hostnamectl set-hostname 主机名
#2.修改host文件
192.168.233.146 dev
192.168.233.154 project_master
192.168.233.155 project_slave
192.168.233.156 auto_deployment
#3.关闭firewalld
systemctl disable firewalld --now
#4.关闭selinux
sed -i "s/SELINUX=enforcing/SELINUX=disabled/" /etc/selinux/config
setenforce 0
#5.配置yum源
rm -rf /etc/yum.repos.d/*
curl -o /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo
yum makecache
#6.配置扩展源并开启所有扩展源
rpm -e epel-release
yum install epel-release –y
yum install yum-utils –y
yum-config-manager --enable epel*
#7.安装vim
yum install vim -y
3.安装CICD所需软件
[!NOTE]
软件版本:
jdk17
redis-6.2.6
mysql5.7
maven3.9.11
3.1 dev主机
yum install git -y
git config --global user.name "jesion-wang"
git config --global user.email "**@qq.com"
3.2 project_master&project_slave
-
jdk
tar -xf jdk-17.0.12_linux-x64_bin.tar.gz -C /usr/local vim /etc/profile#配置环境变量 export JAVA_HOME=/usr/local/jdk-17.0.12 export PATH=$PATH:$JAVA_HOME/bin source /etc/profile#测试 java -version -
redis
wget http://download.redis.io/releases/redis-6.2.6.tar.gz tar -zxvf redis-6.2.6.tar.gz -C /usr/local/ cd /usr/local/redis-6.2.6 yum -y install gcc make && make install#修改配置文件 vim redis.conf bind 0.0.0.0 protected-mode no daemonize yes#启动redis cd /usr/local/bin ./redis-server /usr/local/redis-6.2.6/redis.conf & #停止redis ps aux | grep redis / kill 进程PID -
mysql
#1.安装 wget下载工具 yum -y install wget #2.下载 mysql 官方 yum 源安装包 wget https://repo.mysql.com/mysql57-community-release-el7-11.noarch.rpm #3.安装 mysql 官方 yum 源 yum -y localinstall mysql57-community-release-el7-11.noarch.rpm #4.配置yum源秘钥 rpm --import https://repo.mysql.com/RPM-GPG-KEY-mysql-2022 #5.检查启动版本 yum repolist enabled | grep mysql #6.安装服务端,客户端 yum -y install mysql-community-server mysql #7.设置开机启动机启动mysql服务端 systemctl enable mysqld --now #8.检查mysql的安装 ls /var/lib/mysql #9.获取首次登录密码 grep 'password' /var/log/mysqld.log #10.登录mysql数据库 mysql -uroot -p #11.修改 mysql 数据库密码(密码必须符合复杂性要求,包含字母大小写,数字,特殊符号,长度不少于8位) alter user 'root'@'localhost' identified by 'Aa123456=';
3.3 auto_deployment
-
jdk
tar -xf jdk-17.0.12_linux-x64_bin.tar.gz -C /usr/local vim /etc/profile#配置环境变量 export JAVA_HOME=/usr/local/jdk-17.0.12 export PATH=$PATH:$JAVA_HOME/bin source /etc/profile#测试 java -version -
Jenkins
# 1.安装wget yum install wget -y# 2.下载Jenkins的镜像源文件 wget https://pkg.jenkins.io/redhat-stable/jenkins.repo -O /etc/yum.repos.d/jenkins.repo# 3.安装Jenkins rpm --import https://pkg.jenkins.io/redhat-stable/jenkins.io-2023.key yum -y install jenkins # 4.修改配置文件,对jdk的引用vim /usr/lib/systemd/system/jenkins.service# 注意这里配置实际的jdk路径 Environment="JAVA_HOME=/usr/local/jdk-17.0.12"# 注意这里配置实际的java可执行路径 Environment="JENKINS_JAVA_CMD=/usr/local/jdk-17.0.12/bin/java"# 需要安装一个字体,不然会启动失败 yum install fontconfig -y# 5.启动Jenkins并设置为开机自启动 systemctl daemon-reload systemctl enable jenkins --now# 第六步:访问验证 http://192.168.233.156:8080 -
maven
tar -xf apache-maven-3.9.11-bin.tar.gz -C /usr/local/ vim /etc/profile export MAVEN_HOME=/usr/local/apache-maven-3.9.11 export PATH=$PATH:$JAVA_HOME/bin:$MAVEN_HOME/bin source /etc/profile mvn -v#配置镜像仓库 vim /usr/local/apache-maven-3.9.11/conf/settings.xml <mirrors><mirror><id>alimaven</id><name>aliyun maven</name><url>http://maven.aliyun.com/nexus/content/groups/public/</url><mirrorOf>central</mirrorOf></mirror> </mirrors> -
git
4.初始化Jenkins
访问安装了jenkins的机器ip:http://192.168.233.156:8080
cat /var/lib/jenkins/secrets/initialAdminPassword 复制密码并粘贴到下图中

选择安装推荐插件,可直接刷新页面跳过


继续,点保存并完成

5.构建自动化部署
5.1 dev主机密钥至gitee
开发人员提交代码到Git仓库有以下两种方式:
- 账号密码:在上传代码或者拉取代码需要账号密码认证
- ssh密钥:需要提前配置好公钥私钥
此处,我们选择的是ssh密钥的方式,这样,配置好密钥之后,开发人员提交,拉取代码都不需要进行认证了。
-
在dev主机生成密钥对
ssh-keygen -t rsa -f /root/.ssh/id_rsa -C "dev@vp21.cn" -N ""#-t:指定要创建的密钥类型。可能的值为“dsa”、“ecdsa”、“ecdsa-sk”、“ed25519”、“ed25519-sk”或“rsa” #-C:添加注释 #-f:指定用来保存密钥的文件名#查看密钥,并复制 cat /root/.ssh/id_rsa.pub -
将公钥配置到gitee仓库
-
登录gitee,如下进入个人主页后,点击个人设置

-
在左边安全设置中选择ssh公钥
-
粘贴第一步复制的公钥至gitee,点击确定即可添加,标题会自动输入
-
5.2 从若依官网下载项目至dev
https://gitee.com/y_project/RuoYi-Vue
在dev主机执行:
git clone git@gitee.com:y_project/RuoYi-Vue.git
5.3 Jenkins密钥至gitee
ssh-keygen -t rsa -f /root/.ssh/id_rsa -C "jenkins@vp21.cn" -N ""
如上步骤一样,在auto_deployment主机内操作

5.4 jenkins主机的私钥到凭据列表
凭据是jenkins给自己的构建项目授权用的。本项目案例里jenkins是通过ssh免密去找gitee的项目仓库clone或pull项目代码。在前面的配置里已经把jenkins服务器的公钥添加到了gitee仓库上,在jenkins服务器上root用户使用git clone 项目地址都可以成功。但是jenkins服务本身并不允许使用自己的私钥去访问gitee的公钥,给个凭据,让它能做就解决问题了。
总结: 凭据是一种和第三方程序(如gitee,gitlab等)通讯的权限授权。本案例的凭据就是允许使用ssh免密
-
登录Jenkins,打开凭据管理页面





-
添加凭据
cat /root/.ssh/id_rsa #begin到end全部复制


5.5 jenkins添加插件
[!NOTE]
安装的插件有:
- ssh 用于jenkins-project对web-project进行操作
- git parameter 用于git版本提交进行参数构建
- gitee
- maven integration 用于编译



在此分别搜索,ssh、git parameter、maven integration、gitee勾选点安装。等待安装,失败就重新下,实在不行换个网络或者用魔法

5.6 jenkins配置

-
工具配置
-
jdk配置

-
git配置
git默认
-
Maven配置

-
-
系统配置
主要配置ssh插件,用于jenkins操作project_master&project_slave,让project_master&project_slave执行命令
-
连接至sever服务器的凭据(使用账号密码)
如配置jenkins私钥凭据的位置,类型选择Username with password
-
配置ssh插件
回到system设置,滑到最下方。master和slave都要添加进去

-
5.7 创建gitee仓库
在gitee主页


5.8 project导入数据库脚本
-
将dev机器的若依数据库分发到project_master&project_slave服务器。
scp /root/RuoYi-Vue/sql/ry_20250522.sql root@project_master:~ scp /root/RuoYi-Vue/sql/ry_20250522.sql root@project_slave:~ -
分别project_master&project_slave服务器内导入数据库
# 登录数据库 mysql -uroot -pAa123456= # 创建woniu_car数据库 CREATE DATABASE ruoyi CHARACTER SET utf8 COLLATE utf8_bin; # 导入数据库文件 use ruoyi; source /root/ry_20250522.sql # 退出数据库 exit
5.9 project安装后端所需字体
yum install fontconfig -y
5.10 修改dev若依后端yml配置信息
vim /root/RuoYi-Vue/ruoyi-admin/src/main/resources/application-druid.yml
#==修改主数据库源==
#1.将master中url的ry-vue修改为刚导入的数据库名ruoyi
#2.修改master账号密码vim /root/RuoYi-Vue/ruoyi-admin/src/main/resources/application.yml
#==修改redis==
#找到redis的password,注释掉
5.11 推送项目到gitee仓库
#进入若依项目主文件内
cd /root/RuoYi-Vue
# 删除原来的git信息
git remote rm origin
# 关联到gitee的仓库,这个链接在我们刚创建完仓库后,有个快速配置选ssh复制即可
git remote add origin git@gitee.com:wangyexiong/ruoyi-jenkins.git
#commit说明
git commit -m "修改了数据库与redis配置信息"
git commit -a -m "修改了数据库与redis配置信息"
# 提交代码
git push origin master
# 查看标签
git tag
# 创建标签
git tag v4.0
# 将标签推送到远程仓库
git push origin v4.0
6.Jenkins构建任务
[!NOTE]
后端操作:
- jenkins获取项目代码
- jenkins对项目代码编译,由maven完成
- 将编译后的jar包发送到project服务器家目录中
- jenkins通过ssh命令启动后端服务
前端操作:
6.1 后端构建
6.1.1 创建任务


6.1.2 配置信息

上面这边这个git出现错误,是因为我们jenkins服务器链接到git仓库需要指纹验证,而此时我们没有指纹验证。而jenkins账户无法登陆,所以我们再autoDe服务器用root账户git clone git@gitee.com:wangyexiong/ruoyi-jenkins.git拉取一下代码,即可生成一个指纹验证文件,此时我们把这个文件复制到jenkins中即可。

#在autoDe服务器操作
cd
git clone git@gitee.com:wangyexiong/ruoyi-jenkins.git
#删除刚拉下来的项目
rm -rf ruoyi-jenkins/
#进入.ssh文件查看会多一个known_hosts文件
cd .ssh
#将这个文件复制到jenkins的.ssh中
cp known_hosts /var/lib/jenkins/.ssh/
将Credentials切换成none再切换回来即可


6.1.3 创建编译打包后的shell命令

先在jenkins服务器中安装sshpass yum install sshpass -y
再分别用jenkins服务器登录到master和slave服务器形成指纹验证,并把指纹验证文件再次复制覆盖到jenkins目录中
ssh project_master
exit
ssh project_slave
exit
cp /root/.ssh/known_hosts /var/lib/jenkins/.ssh/
这边一定要填这个y,不然会覆盖失败

再在图中框内输入shell命令
sshpass -p 'root' scp /var/lib/jenkins/workspace/ruoyi/ruoyi-admin/target/ruoyi-admin.jar root@192.168.233.154:/root/
sshpass -p 'root' scp /var/lib/jenkins/workspace/ruoyi/ruoyi-admin/target/ruoyi-admin.jar root@192.168.233.155:/root/

在上方选项选择后的框内输入远程执行命令来启动项目,如下
cd
ps -ef | grep 'ruoyi-admin.jar' | grep -v grep | awk '{print $2}' | xargs kill -9
source /etc/profile
nohup java -jar /root/ruoyi-admin.jar > output.log 2>&1 &
sleep 8

6.1.4 构建项目

6.2 前端构建
6.2.1 安装所需软件
-
jenkins服务器安装nodejs、npm
yum install nodejs -yyum install npm -y -
project服务器安装nginx和sshpass
#采用配置yum源方式安装 vim /etc/yum.repos.d/nginx.repo#写入下面内容: [nginx-stable] name=nginx stable repo baseurl=http://nginx.org/packages/centos/$releasever/$basearch/ gpgcheck=1 enabled=1 gpgkey=https://nginx.org/keys/nginx_signing.key module_hotfixes=true[nginx-mainline] name=nginx mainline repo baseurl=http://nginx.org/packages/mainline/centos/$releasever/$basearch/ gpgcheck=1 enabled=0 gpgkey=https://nginx.org/keys/nginx_signing.key module_hotfixes=trueyum install nginx -y yum install sshpass -y -
配置nginx代理
vim /etc/nginx/conf.d/default.conf#找到,加入下面中间那行,root这行路径结尾加上dist location / {root /usr/share/nginx/html/dist;#这边结尾要加上disttry_files $uri $uri/ /index.html; # 加这行index index.html index.htm;}#在下方添加nginx代理 location /prod-api/ {proxy_set_header Host $http_host;proxy_set_header X-Real-IP $remote_addr;proxy_set_header REMOTE-HOST $remote_addr;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;proxy_pass http://192.168.233.154:8080/;#该后端服务器地址 }
6.2.2 补充构建前端任务shell
先分别在project的两台机器上登录到jenkins服务器生成指纹验证。
在Post Steps最下面加一个执行shell操作
cd /var/lib/jenkins/workspace/ruoyi/ruoyi-ui
npm cache clean --force
npm config set registry https://registry.npmmirror.com
npm install --save-dev @vue/cli
npm install
npm run build:prod
tar -zcf dist.tar.gz dist
cd

再在Post Steps最下面加上两个Execute shell script on remote host using ssh操作
cd
systemctl stop nginx
rm -rf /usr/share/nginx/html/*
sshpass -p 'root' scp root@192.168.233.156:/var/lib/jenkins/workspace/ruoyi/ruoyi-ui/dist.tar.gz /usr/share/nginx/html/
cd /usr/share/nginx/html/
tar -xf dist.tar.gz
sleep 3
rm -rf dist.tar.gz
cd
systemctl start nginx


上构建项目操作步骤测试构建,可以访问前端页面即成功
6.3 配置webhook自动部署
配置webhook需要内网穿透,所以要在jenkins服务器中下载ngrok,并在ngrok官网注册登录。
6.3.1 下载ngrok并注册登录
-
在jenkins服务器下载ngrok
wget https://bin.equinox.io/c/bNyj1mQVY4c/ngrok-v3-stable-linux-amd64.tgz tar -xzf ngrok-v3-stable-linux-amd64.tgz -C /usr/local -
到ngrok官网注册登录

cd /usr/local./ngrok config add-authtoken $YOUR_AUTHTOKEN
$YOUR_AUTHTOKEN就是上面copy的那一串 -
测试执行
# 将本地8080端口暴露到公网 ./ngrok http 8080看到下面这个就成功了,Forwarding这一行,http一直到dev这一段都复制
https://pure-superelegantly-callum.ngrok-free.dev,然后按ctrl+c退出
6.3.2 在构建任务中配置webhook
-
配置webhook
勾选下面两项

第二项勾选就行,第一项需要配置点东西,勾选的东西都默认,滑到下方
Gitee WebHook 密码下面点生成,全选复制,待会有用在构建任务中点save保存设置
注意:前面复制的那段http链接,后面要加上第一项这一行后面URL的/gitee-project/ruoyi才行,组成
https://pure-superelegantly-callum.ngrok-free.dev/gitee-project/ruoyi -
到gitee配置webhook
点进项目,点管理,左边点webhook,点右上角
橙色的添加webhook。url填上面组成的那段http链接;密码填上面生成的密码

-
测试执行
上方点添加后,右边会有个测试按钮,我们再jenkins服务器再次启动ngrok
./ngrok http 8080,然后点测试,回到jenkins服务器可以看到下面内容。
可以看到自动构建了。

-
添加shell自动启动ngrok

在编译打包的执行shell块中添加下面内容
pkill -f 'ngrok http 8080' || true sleep 2export BUILD_ID=dontKillMe # 启动 ngrok 前先配置认证 echo "正在配置 ngrok authtoken..." /usr/local/ngrok authtoken 34oXHfz5nsVNOIyyl7OoihYoUFD_772r29bvCYx821WxMTfhtecho "正在启动 ngrok..." nohup /usr/local/ngrok http 8080 > /var/lib/jenkins/ngrok.log 2>&1 & NGROK_PID=$! echo "Ngrok 进程 ID: $NGROK_PID" sleep 8# 判断 ngrok 是否启动成功 if ps -p $NGROK_PID > /dev/null 2>&1 && \(curl -s --max-time 5 http://localhost:4040/api/tunnels > /dev/null 2>&1 || \grep -q "started tunnel" /var/lib/jenkins/ngrok.log 2>/dev/null); thenecho "✓ Ngrok 启动成功!进程 ID: $NGROK_PID" elseecho "✗ Ngrok 启动失败!"echo "错误日志:"tail -20 /var/lib/jenkins/ngrok.logexit 1 fi cd如上构建项目操作步骤,点构建测试,在jenkins服务器看看有没有ngrok进程
ps -ef | grep ngrok,如果有两行以上即成功运行。可以访问
https://pure-superelegantly-callum.ngrok-free.dev前面手动运行ngrok生成的这段链接(未组合的),如果可以访问进jenkins页面就行了。可以测试访问登录到项目前端页面看看
192.168.233.154(你自己的项目ip)