三、Jenkins部署与配置
环境准备内下载
下载地址 maven
https://dlcdn.apache.org/maven/maven-3/3.9.12/binaries/apache-maven-3.9.12-bin.tar.gz
https://maven.apache.org/download.cgi
1、jenkins镜像制作并且合并jdk、node和maven
1.1 拉取jenkins 镜像
docker pull jenkins/jenkins:2.480-jdk21
1.2 创建一个文件夹准备 jenkins二次打包
主要打包 jdk node maven
创建一个文件夹 用于二次打包 然后切换进去
mkdir -p /data/jenkins
cd /data/jenkins
1.3 准备jdk、maven、node包
提前准备好jdk、maven、node,并放到/data/jenkins下
/data/jenkinsapache-maven-3.9.9-bin.tar.gz /usr/local
jdk-8u421-linux-x64.tar.gz /usr/local
node-v11.0.0-linux-x64.tar.gz /usr/local
在添加一个mavan settings.xml 放在 /data/jenkins
(由于3.8.x以上版本的maven只支持https协议,我们需要覆盖原有的settings.xml,让它支持http)
准备settings.xml,文件内容如下
<?xml version="1.0" encoding="UTF-8"?>
<settings xmlns="http://maven.apache.org/SETTINGS/1.2.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.2.0 https://maven.apache.org/xsd/settings-1.2.0.xsd">
</settings>
1.4 新建Dockerfile 准备制作镜像
我们需要将镜像进行二次打包,把我们所需要的东西都加进去,新建Dockerfile
FROM jenkins/jenkins:2.480-jdk21
EXPOSE 8080
# 将maven和jdk添加到容器中
# tar.gz添加进去后会自动解压,无需手动解压
ADD apache-maven-3.9.9-bin.tar.gz /usr/local
ADD jdk-8u421-linux-x64.tar.gz /usr/local
ADD node-v11.0.0-linux-x64.tar.gz /usr/local
# 覆盖容器里的settings.xml
ADD settings.xml /usr/local/apache-maven-3.9.9/conf/
# 配置环境变量
ENV TZ=Asia/Shanghai
ENV M2_HOME=/usr/local/apache-maven-3.9.9
ENV NODE_HOME=/usr/local/node-v11.0.0-linux-x64
# 配置maven、node的环境变量
# jdk环境变量不可在这里配,会影响jenkins的运行
ENV PATH=$M2_HOME/bin:$NODE_HOME/bin:$PATH
在/data/jenkins 下创建好jenkins_home,并授予最高权限
mkdir jenkins_home
chmod +777 jenkins_home
现在/data/jenkins下就会有这么几个文件

进行二次打包
docker build -t jenkins .
1.5 验证

这里注意下 由于后期需要jenkins 调用docker 所以 授予docker.sock权限,因为一会儿进入jenkins容器的时候要用docker命令
chmod +777 /var/run/docker.sock=
2 、Jeskins 运行 与 安装
2.1 Jenkins 运行启动
docker run -d --name jenkins \
-p 0.0.0.0:8080:8080 \
-v /data/jenkins/jenkins_home:/var/jenkins_home \
-v /etc/localtime:/etc/localtime \
-v /run/docker.sock:/run/docker.sock \
-v /usr/bin/docker:/usr/bin/docker \
jenkins
2.2 访问 jenkins的首页
等待一两分钟,访问访问你的ip地址:8080即可看到jenkins的首页

安装推荐插件

等待
使用admin账户继续 点击保存完成
默认即可
安装完成 点击开始使用
进入Jenkins后要先修改密码,否则之后就进不去了 右上角,进入Security

修改成你想要的密码

登录用户名admin 密码 123456
还记得刚刚Dockerfile,我们并没有配置jdk的环境变量,所以这边要手动配置一下 进入工具配置
配置jdk的安装目录 bisheng-jdk1.8.0_412

2.3 开始测试
2.3.1 新建一个项目

2.3.2 创建流水线
任务名称随便填(test),选择流水线

确定之后会进入项目的配置,我们找到流水线,输入测试脚本,保存

测试脚本如下:
这是一段 **Jenkins Declarative Pipeline(声明式流水线) 脚本,用来验证构建环境是否配置正确。逐行简单说明如下:
1️⃣ pipeline { ... } #定义一个 Jenkins 流水线任务。
2️⃣ agent any #表示该流水线可以在任意可用的 Jenkins 节点(agent) 上运行。
3️⃣ tools { jdk 'jdk8' } #指定流水线使用 Jenkins 中已配置好的 JDK,名称叫 jdk8。执行时会自动把该 JDK 加入环境变量(如 JAVA_HOME)。
4️⃣ stages { ... } #流水线的阶段定义区域。
5️⃣ stage('test') #定义一个阶段,名称为test,通常用于环境测试或验证。
6️⃣ steps { ... } #该阶段中要执行的具体步骤。
7️⃣ script { ... } #使用 Groovy 脚本块,允许执行更灵活的逻辑。
8️⃣ sh """ ... """ #在 Linux / Unix 环境下执行 Shell 命令:
docker -v # 查看 Docker 是否安装及版本
java -version # 查看 Java 版本(是否为 jdk8)
mvn -v # 查看 Maven 是否安装及版本
node -v # 查看 Node.js 版本
npm -v # 查看 npm 版本
>该 Jenkins Pipeline 用于在构建节点上,测试 Docker、Java(JDK8)、Maven、Node.js 和 npm 是否已正确安装并可用,通常作为流水线环境检查阶段。
====================================================================================================
pipeline {
agent any
tools {
// 刚刚配置jdk的名称
jdk 'jdk8'
}
stages {
stage('test') {
steps {
script {
sh """
docker -v
java -version
mvn -v
node -v
npm -v
"""
}
}
}
}
}
2.3.3 测试 点击立即构建

四、Mysql部署与数据迁移
4.1 mysql安装
注意:在192.168.10.13上部署
docker run -d \
--name mysql \
-p 0.0.0.0:3306:3306 \
-e MYSQL_ROOT_PASSWORD=123456 \
--restart=always \
mysql:8.0.39

4.2 创建若依数据库
如果不知道创建什么库可以在配置文件中查看
创建数据库 ry-vue

4.3 若依数据库导入
mysql> use ry-vue
Database changed
mysql> source /opt/ry_20250522.sql
mysql> source /opt/quartz.sql
导入后验证

五、redis部署
docker run -d \
--name redis \
-p 0.0.0.0:6379:6379 \
--restart=always \
redis:7.4.1
验证测试

六、Jenkins实现CICD持续集成(前后端)
6.1 安装gitlab插件
如果想实现代码提交自动部署,需要安装gitlab插件进入系统管理,插件管理

安装成功即可,无需重启
6.2 部署后端
说明
1、拉取项目: 拉取若依项目,我们拉取的是若依项目的前后端分离(分成两个)
2、将这两个sql文件导入到数据库中(前面安装数据库的时候已做)
6.2.1 修改后端配置文件
① 修改后端连接mysql
到ruoyi-admin/src/main/resources/application-druid.yml中修改数据库的连接信息

② 修改redis的连接信息
到ruoyi-admin/src/main/resources/application-druid.yml中修改数据库的连接信息

③ 这边可以使用推送方式修改
$ git status #查看状态
On branch master
Your branch is up-to-date with 'origin/master'.
Changes not staged for commit:
(use "git add <file>..." to update what will be committed)
(use "git checkout -- <file>..." to discard changes in working directory)
modified: ruoyi-admin/src/main/resources/application-druid.yml
modified: ruoyi-admin/src/main/resources/application.yml
no changes added to commit (use "git add" and/or "git commit -a")
$ git add . #添加缓存
$ git commit -m "xiu gai pei zhi" #提交
[master 9838c2d2] xiu gai pei zhi
2 files changed, 3 insertions(+), 3 deletions(-)
$ git push origin master 上传
Counting objects: 8, done.
Delta compression using up to 12 threads.
Compressing objects: 100% (7/7), done.
Writing objects: 100% (8/8), 666 bytes | 666.00 KiB/s, done.
Total 8 (delta 4), reused 0 (delta 0)
To http://192.168.10.80/root/ruoyi-server.git
5e83011d..9838c2d2 master -> master
6.2.2 创建若依后端镜像
根目录新建Dockerfile
# 若依需要用jdk8来运行
FROM openjdk:8u342
# 解决时区问题
ENV TZ=Asia/Shanghai
# 将jar包添加到容器中
ADD ruoyi-admin/target/ruoyi-admin.jar app.jar
# 运行容器时应该执行的命令
ENTRYPOINT ["java", "-jar", "app.jar"]
6.2.3 编辑 Jenkinsfile 若依
pipeline {
// 任意节点都可以执行Jenkins流水线
agent any
tools {
// 刚刚配置的java环境
jdk 'jdk8'
}
// 环境变量
environment {
// 项目名称
APP_NAME = 'ruoyi-server'
// 端口
APP_PORT = 9800
}
// 流水线阶段
stages {
// 构建阶段
stage('build') {
// 步骤
steps {
// 可以写流水线脚本,groovy语法
script {
// 执行shell命令
sh 'mvn clean package -DskipTests=true'
}
}
}
// 部署阶段
stage('deploy') {
steps {
script {
sh """
docker stop $APP_NAME || true
docker rm $APP_NAME || true
docker rmi $APP_NAME || true
docker build -t $APP_NAME .
docker run -d --name $APP_NAME \
-p 0.0.0.0:$APP_PORT:$APP_PORT \
--restart=always \
$APP_NAME \
--server.port=$APP_PORT
"""
}
}
}
}
}
6.2.4 建立jenkins docker 构建速度
根目录新建.dockerignore。这个是为了提高docker的构建速度,把不必要的文件屏蔽起来
.git
ruoyi-admin/src
ruoyi-admin/target/classes
ruoyi-admin/target/generated-sources
ruoyi-admin/target/maven-archiver
ruoyi-admin/target/maven-status
ruoyi-common
ruoyi-framework
ruoyi-generator
ruoyi-quartz
ruoyi-system
ruoyi-ui
sql
6.2.5 将项目提交到gitlab
$ git add .
$ git commit -m "docker peizhi"
[master dcea5491] docker peizhi
3 files changed, 68 insertions(+)
create mode 100644 .dockerignore
create mode 100644 Dockerfile
create mode 100644 Jenkinsfile
$ git push origin master
Counting objects: 5, done.
Delta compression using up to 12 threads.
Compressing objects: 100% (5/5), done.
Writing objects: 100% (5/5), 1.16 KiB | 1.16 MiB/s, done.
Total 5 (delta 1), reused 0 (delta 0)
To http://192.168.10.80/root/ruoyi-server.git
9838c2d2..dcea5491 master -> master
6.2.6 Jenkins中新建后端任务
名称随便填(ruoyi-server),选
择流水线,确定
找到流水线,选择scm

点击gitlab

然后把ssh地址复制进去,不出意外的话,会出现无法连接仓库,原因是Jenkins无法拉取gitlab的代码

我们到Jenkins容器中
#我们到Jenkins容器中
[root@localhost sql]# docker exec -it jenkins bash
jenkins@2e648c7b5dff:/$ ssh-keygen
Generating public/private rsa key pair.
Enter file in which to save the key (/var/jenkins_home/.ssh/id_rsa):
Created directory '/var/jenkins_home/.ssh'.
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /var/jenkins_home/.ssh/id_rsa
Your public key has been saved in /var/jenkins_home/.ssh/id_rsa.pub
The key fingerprint is:
SHA256:wEZ7T2uxhEgoUrB28ABQzMZ6YDZTCeP21cO0K+OiX+E jenkins@2e648c7b5dff
The key's randomart image is:
+---[RSA 3072]----+
|*%=...o. |
|+*@..++o.. |
|+Oo+ .*=o + |
|+ + .. oo+ + |
| . . + .S = |
| o + . |
| . E |
| . o |
| ... |
+----[SHA256]-----+
jenkins@2e648c7b5dff:/$ cat ~/.ssh/id_rsa.pub
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQCc0degeP/hKtmZgiH/Ef3pkR4JqxB1xVtu/zGn50+nSmdadF59mxVXh3xL1S6poqZCQWUq1xYT1vD/SIgaj9fG2JJcQiw36OxUYLzZlXDKfNL2R17R9QDvC6Szl6NurEHoqCTOk5Xu+HWQuVo0YGxK//5RFcITzJNOqcM4dZOuMwwmoCseCU2j3wYdRuiCACUTEp2qYKw6jfowPn/jzsSYw18Vp1KrOdeGJ/whXceUP6+0u/gD9sAe9rhceNAQeLqwyjc+loQs5Qd+kmXOU7ymYC2+hoDJUDxuv2cF4xttL09j4aA50eJRmm/JGGpSrups0fj7dgmd4A9qHTNNaoHObHTByIgL+D0TkGxeMo5gBimNJ6L0+HJ9ZrtaqvJ6qsnWsecTfp1TbxCm6R+nNlEgDDZQEESJLqNyjhG05NxuZbpWgMFGj2lFKQ+ITXW2JSWXybbRZzQqbPeGDc6/ywqecKAUOttJBZKc1y31XuWdJFXAwJyYcyVOkFmii3b10Xc= jenkins@2e648c7b5dff
将公钥配置到gitlab中

进行一次ssh通信,然后将信息保存下来
这步仍然是在jenkins容器中操作的
# 192.168.10.182是gitlab的地址,222是gitlab的ssh端口
jenkins@b1e5abd55b5c:/$ ssh-keyscan -p 222 192.168.10.182 >> ~/.ssh/known_hosts
# 192.168.10.182:222 SSH-2.0-OpenSSH_7.2p2 Ubuntu-4ubuntu2.4
# 192.168.10.182:222 SSH-2.0-OpenSSH_7.2p2 Ubuntu-4ubuntu2.4
# 192.168.10.182:222 SSH-2.0-OpenSSH_7.2p2 Ubuntu-4ubuntu2.4
# 192.168.10.182:222 SSH-2.0-OpenSSH_7.2p2 Ubuntu-4ubuntu2.4
# 192.168.10.182:222 SSH-2.0-OpenSSH_7.2p2 Ubuntu-4ubuntu2.4
查看一下.ssh目录下的文件
ls -l ~/.ssh
如果有这3个文件,就说明Jenkins可以拉取gitlab的代码了

下一步,找到这个,把它勾上
展示高级

找到Secret token,点击Generate生成,就会生成一串token,这串token一会儿到gitlab中会用上

我们到gitlab中Settings中有一个Webhooks 填写相关信息


立即构建

6.3 部署前端
RuoYi-Vue\ruoyi-ui 下创建

6.3.1 在ruoyi-ui项目下 添加dockerfile与配置
① 添加nginx.conf,真实的后端地址根据实际情况修改
server {
# 前端访问端口
listen 9801;
charset utf-8;
# 前端
location / {
# 前端页面路径
root /usr/share/nginx/html;
# 尝试着从$uri寻找静态资源,找不到就到$uri/找,如果还是找不到就找/index.html
try_files $uri $uri/ /index.html;
}
# 后端
location /prod-api {
# 去掉/prot-api开头
rewrite ^/prod-api/(.*)$ /$1 break;
# 真实的后端地址,根据实际情况修改
proxy_pass http://192.168.10.13:9800;
}
}
② 添加Dockerfile
使用nginx镜像来部署
FROM nginx:1.26.2
解决文件名乱码问题
ENV LC_ALL=C.UTF-8
删除默认的配置文件
RUN rm -rf /etc/nginx/conf.d/default.conf
将nginx配置文件添加到容器
ADD nginx.conf /etc/nginx/conf.d
前端打包后,将dist下的文件复制到容器里
COPY dist/ /usr/share/nginx/html/
③ 添加.dockerignore
node_modules
src
④ 添加Jenkinsfile
pipeline {
agent any
environment {
// 项目名称
APP_NAME = 'ruiyi-ui'
// 端口
APP_PORT = 9801
}
stages {
stage('build') {
steps {
script {
// 进行打包
sh """
npm install
npm run build:prod
"""
}
}
}
stage('deploy') {
steps {
script {
sh """
docker stop $APP_NAME || true
docker rm $APP_NAME || true
docker rmi $APP_NAME || true
docker build -t $APP_NAME .
docker run -d --name $APP_NAME \
-p 0.0.0.0:$APP_PORT:$APP_PORT \
--restart=always \
$APP_NAME
"""
}
}
}
}
}
⑤ 重新建立ruoyi-ui前端
先建立仓库ruoyi-ui

$ git remote add origin http://192.168.10.180/root/ruoyi-ui.git
git add .
git commit -m "Initial commit"
git push -u origin mastergit init
Reinitialized existing Git repository in E:/java-项目/docker-cicd-若依/全部合成项目/RuoYi-Vue/ruoyi-ui/.git/
$ git remote add origin http://192.168.10.80/root/ruoyi-ui.git
$ git add .
$ git commit -m "Initial commit"
[master (root-commit) a0ef41d] Initial commit
298 files changed, 26540 insertions(+)
create mode 100644 .dockerignore
create mode 100644 .editorconfig
create mode 100644 .env.development
create mode 100644 .env.production
create mode 100644 .env.staging
$ git push -u origin master
Counting objects: 391, done.
Delta compression using up to 12 threads.
Compressing objects: 100% (340/340), done.
Writing objects: 100% (391/391), 1.25 MiB | 4.38 MiB/s, done.
Total 391 (delta 23), reused 0 (delta 0)
remote: Resolving deltas: 100% (23/23), done.
To http://192.168.10.80/root/ruoyi-ui.git
* [new branch] master -> master
Branch master set up to track remote branch master from origin.
linux 下操作
[root@ruoyi-ui]# ls -a
. babel.config.js build .dockerignore .env.development .env.staging Jenkinsfile package.json README.md vue.config.js
.. bin Dockerfile .editorconfig .env.production .gitignore nginx.conf public src
[root@ ruoyi-ui]# git config --global user.name "Administrator"
[root@ ruoyi-ui]# git config --global user.email "admin@example.com"
[root@ruoyi-ui]# git init
初始化空的 Git 版本库于 /home/ruoyi/ruoyi-ui/.git/
[root@ ruoyi-ui]# ls -a
. babel.config.js build .dockerignore .env.development .env.staging .gitignore nginx.conf public src
.. bin Dockerfile .editorconfig .env.production .git Jenkinsfile package.json README.md vue.config.js
[root@ ruoyi-ui]# git remote add origin ssh://git@192.168.10.80:222/root/ruoyi-ui.git
[root@ ruoyi-ui]# git add .
[root@ ruoyi-ui]# git commit -m "Initial commit"
[master(根提交) 537c85a] Initial commit
298 files changed, 26540 insertions(+)
create mode 100644 .dockerignore
create mode 100644 .editorconfig
create mode 100644 .env.development
create mode 100644 .env.production .........
[root@ ruoyi-ui]# git push -u origin master
Permission denied (publickey).
fatal: Could not read from remote repository.
Please make sure you have the correct access rights
and the repository exists.
[root@ ruoyi-ui]# git remote -v
origin ssh://git@192.168.10.80:222/root/ruoyi-ui.git (fetch)
origin ssh://git@192.168.10.80:222/root/ruoyi-ui.git (push)
修改
[root@ ruoyi-ui]# git remote -v
origin ssh://git@192.168.10.80:222/root/ruoyi-ui.git (fetch)
origin ssh://git@192.168.10.80:222/root/ruoyi-ui.git (push)
[root@ ruoyi-ui]# git remote set-url origin http://192.168.10.180/root/ruoyi-ui.git
[root@ ruoyi-ui]# git remote -v
origin http://192.168.10.180/root/ruoyi-ui.git (fetch)
origin http://192.168.10.180/root/ruoyi-ui.git (push)
[root@ ruoyi-ui]# git push -u origin master
Username for 'http://192.168.10.180': root
Password for 'http://root@192.168.10.180':
Counting objects: 391, done.
Delta compression using up to 2 threads.
Compressing objects: 100% (340/340), done.
Writing objects: 100% (391/391), 1.26 MiB | 0 bytes/s, done.
Total 391 (delta 19), reused 0 (delta 0)
remote: Resolving deltas: 100% (19/19), done.
To http://192.168.10.80/root/ruoyi-ui.git
* [new branch] master -> master
分支 master 设置为跟踪来自 origin 的远程分支 master。
检查一下有没有这几个文件

6.3.2 Jenkins再新建前端ruoyi-ui项目

和刚刚一样,勾上

生成Secret token

结果


生成Secret token
6.4 ruoyi 项目自动化完成
root@ ruoyi-ui\]# git push -u origin master Username for 'http://192.168.10.180': root Password for 'http://root@192.168.10.180': Counting objects: 391, done. Delta compression using up to 2 threads. Compressing objects: 100% (340/340), done. Writing objects: 100% (391/391), 1.26 MiB \| 0 bytes/s, done. Total 391 (delta 19), reused 0 (delta 0) remote: Resolving deltas: 100% (19/19), done. To http://192.168.10.180/root/ruoyi-ui.git * \[new branch\] master -\> master 分支 master 设置为跟踪来自 origin 的远程分支 master。 ## 6.4 ruoyi 项目自动化完成 