CICD持续集成Ruo-Yi项目
原理
环境(docker)部署思路以及实践
一、环境准备
二、部署与配置gitlab
三、Jenkins部署与配置
四、Mysql部署与数据迁移
五、redis部署
六、Jenkins实现CICD持续集成(前后端)
一、环境准备
1、主机环境
前提每台机器必须安装docker
| 主机 | 服务 | 配置 |
|---|---|---|
| 192.168.10.162 | jenkins:2.480、redis-7.4.1、mysql-8.0.39、spring boot、nginx-1.2.6.2 | 虚拟机最少2C 8G |
| 192.168.10.160 | docker-20.10.18、gitlab-10.7.5 | 1C 4G |
2、docker安装
bash
#安装依赖包
yum install -y yum-utils device-mapper-persistent-data lvm2
#设置阿里云镜像源
yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
#安装 Docker-CE 并设置为开机自动启动
yum install -y docker-ce-20.10.18 docker-ce-cli-20.10.18 containerd.io
systemctl start docker.service
systemctl enable docker.service
#配置 Docker 使用华为镜像加速器来提高镜像下载速度。
mkdir -p /etc/docker
tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": [ "https://0a40cefd360026b40f39c00627fa6f20.mirror.swr.myhuaweicloud.com" ]
}
EOF
systemctl daemon-reload
systemctl restart docker
二、部署与配置gitlab
1、下载gitlab镜像 80机器
bash
docker pull beginor/gitlab-ce
2、创建数据卷,把gitlab配置文件、数据与log日志挂载出来
bash
[root@gitlab opt]# mkdir -p /data/gitlab/etc/ /data/gitlab/log/ /data/gitlab/data
[root@gitlab opt]# chmod 777 /data/gitlab/etc/ /data/gitlab/log/ /data/gitlab/data/
3、创建临时gitlab容器,保存修改配置文件
bash
docker run -itd --name=gitlab \
--restart=always \
--privileged=true \
-p 8443:443 \
-p 80:80 \
-p 222:22 \
-v /data/gitlab/etc:/etc/gitlab \
-v /data/gitlab/log:/var/log/gitlab \
-v /data/gitlab/data:/var/opt/gitlab \
beginor/gitlab-ce
4、查看gittlab
bash
docker ps -a
#利用-v挂载的原理,把临时gitlab 容器的配置共享出来,如下:
[root@gitlab opt]# cd /data/gitlab/
[root@gitlab gitlab]# ls *
data:
backups git-data gitlab-ci gitlab-rails gitlab-shell postgresql redis trusted-certs-directory-hash
etc:
gitlab.rb ssh_host_ecdsa_key ssh_host_ed25519_key ssh_host_rsa_key trusted-certs
gitlab-secrets.json ssh_host_ecdsa_key.pub ssh_host_ed25519_key.pub ssh_host_rsa_key.pub
log:
gitlab-rails gitlab-shell postgresql reconfigure redis sshd

5、修改配置文件
bash
docker stop docker
#先关闭gitlab
1) #修改监听地址external_url 'http://192.168.10.80'
[root@gitlab gitlab]# sed -i "/external_url 'GENERATED_EXTERNAL_URL'/a external_url\t'http://192.168.10.80' " /data/gitlab/etc/gitlab.rb
#查看是否修改成功 也可以vim /data/gitlab/etc/gitlab.rb进行修改
[root@gitlab gitlab]# cat /data/gitlab/etc/gitlab.rb | grep external_url
##! For more details on configuring external_url see:
# external_url 'GENERATED_EXTERNAL_URL'
external_url 'http://192.168.10.80'
# registry_external_url 'https://registry.gitlab.example.com'
# pages_external_url "http://pages.example.com/"
# gitlab_pages['artifacts_server_url'] = nil # Defaults to external_url +
'/api/v4'
# mattermost_external_url 'http://mattermost.example.com'
2)#修改gitlab远程登录的主机
[root@gitlab gitlab]# sed -i "/gitlab_ssh_host/a gitlab_rails['gitlab_ssh_host']= '192.168.10.80' " /data/gitlab/etc/gitlab.rb
#验证
[root@master gitlab]# cat /data/gitlab/etc/gitlab.rb |grep gitlab_ssh_host
# gitlab_rails['gitlab_ssh_host'] = 'ssh.host_example.com'
gitlab_rails['gitlab_ssh_host'] = '192.168.10.80'
3) #修改gitlab 远程登录的端口 :
[root@gitlab gitlab]# sed -i "/gitlab_shell_ssh_port/a gitlab_rails['gitlab_shell_ssh_port'] = 222" /data/gitlab/etc/gitlab.rb
验证
[root@gitlab gitlab]# cat /data/gitlab/etc/gitlab.rb | grep gitlab_shell_ssh
# gitlab_rails['gitlab_shell_ssh_port'] = 22
gitlab_rails['gitlab_shell_ssh_port'] = 222
以上配置重启gitlab容器并访问192.168.10.80主机
[root@gitlab gitlab]# docker start gitlab
gitlab
[root@gitlab gitlab]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
ee0bf611d38c beginor/gitlab-ce "/assets/wrapper" 12 minutes ago Up 1 second (health: starting) 0.0.0.0:80->80/tcp, :::80->80/tcp, 0.0.0.0:222->22/tcp, :::222->22/tcp, 0.0.0.0:8443->443/tcp, :::8443->443/tcp gitlab
5、初始化gitlab 的账户密码
用IP160机器去浏览器进行登录

6、使用root 账号 + 新设密码登录*
密码:(1qaz@WSX)

7、配置SSH密钥
我们的gitlab运行在容器中,我们需要在gitlab的ui界面中配置ssh密钥文件才可以正常使用
bash
cd /opt
[root@gitlab gitlab]# docker exec -it gitlab /bin/sh #登录容器
进去后执行:# ssh-keygen #创建ssh密钥
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa):
Created directory '/root/.ssh'.
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /root/.ssh/id_rsa.
Your public key has been saved in /root/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:WyaELYh97NlwAAcEWP9FG+xFYle6NBpXxYmgnCIGsKM root@796eb806da13
The key's randomart image is:
+---[RSA 2048]----+
|.++o+oo.=.+oo+.. |
|.. = + B.B.o. o |
|o . * B.@.= |
|.. . = X.= o |
|E + S + |
| = |
| . |
| |
| |
+----[SHA256]-----+
#cat ~/.ssh/id_rsa.pub #查看公钥文件的密钥内容。复制以下内容
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDTk9Wt74P+aAFqm1UGFgwirt6bKfXOSOTFF6fOZNga0SRXVn6gdHEy7ygmsXwOCADmA9jE6HKwg/d3IQHc8jJHh1znVo2yjrcORzrZs+TI9Jg3XuTpRITxKmqBezCFeFhadOxU7fhgGJE8eRz7TF3PEnKytCCVx7lxUaXhYlWUQdY+kUsYMksU+HXoqFcAg3+gTXQMzoWTEkRgKXdpT2ulHf6yZCsAF9Et8jSVVnt+Vm8j6yD2v6i4i/tr2du+eZD/TKfK6fBRPEyGas4Xv79ifERIBeYM5ZKuF2XPPubZq4uqzXMU64EF6H/TlobTs3YuKJ17UnRtpuB3YOnP/Bqb root@796eb806da13
exit
在gitlab -ui界面中配置ssh密钥

查看新增秘钥

以上的gitlab基本配置以完成,后续进行代码管力时,继续在gitlab 配置
8、前后端代码下载上传
8.1、下载若依项目
bash
https://gitee.com/y_project/RuoYi-Vue
下载 命令 我在xshell执行此命令 那么就不用去window查看
bash
git clone https://gitee.com/y_project/RuoYi-Vue.git
8.2 查看若依项目

8.3 上传 若依项目 到 gitlab
① 创建项目

项目名称ruoyi-server**

② 上传项目
bash
humajun@DESKTOP-GRLMR7J MINGW64 /e/java-项目/docker-cicd-若依/全部合成项目
cd RuoYi-Vue/
#在当前目录初始化一个 Git 本地仓库。
先全局配置:
git config --global user.name ""
git config --global user.email ""
git init
#为本地仓库添加一个远程仓库地址,名称为 origin。
git remote add origin http://192.168.10.80/root/ruoyi-server.git
#将当前目录下的所有文件加入暂存区。
git add .
#将暂存区的文件提交到本地仓库,并添加提交说明"Initial commit"。
git commit -m "Initial commit"
#将本地 master 分支推送到远程仓库 origin,并建立默认的上游分支关联。
git push -u origin master
顺序 初始化本地 Git 仓库 → 关联远程仓库 → 提交代码 → 推送到远程仓库
此时密钥没配好:
cd /RuoYI-Vue
ssh-keygen
cat ~/.ssh/id_rsa.pub
把生成的密钥放这里
注意 :
如果中途添加本地仓库地址有报错原因是 当前 Git 仓库中已经存在名为 origin 的远程仓库,所以不能重复添加
bash
git remote -v #查看已有的远程仓库
解决方式
bash
方式一
#只是修改 origin 的地址(最常见)
git remote set-url origin http://192.168.10.80/root/ruoyi.git
方式二
#先删除再重新添加
git remote remove origin
git remote add origin http://192.168.10.80/root/ruoyi-server.git
最后改完直接上传
git push -u origin master
③ 在gitlab上查看项目


三、Jenkins部署与配置
在23机器
环境准备内下载
bash
下载地址 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 在23机器
1.1 拉取jenkins 镜像
bash
docker pull jenkins/jenkins:2.480-jdk21
1.2 创建一个文件夹准备 jenkins二次打包
主要打包 jdk node maven
创建一个文件夹 用于二次打包 然后切换进去
bash
mkdir -p /data/jenkins
cd /data/jenkins
1.3 准备jdk、maven、node包
提前准备好jdk、maven、node,并放到/data/jenkins下
在添加一个mavan settings.xml 放在 /data/jenkins
(由于3.8.x以上版本的maven只支持https协议,我们需要覆盖原有的settings.xml,让它支持http)
准备vim settings.xml,文件内容如下
bash
<?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
bash
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,并授予最高权限
bash
mkdir jenkins_home
chmod +777 jenkins_home
现在/data/jenkins下就会有这么几个文件

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

这里注意下 由于后期需要jenkins 调用docker 所以 授予docker.sock权限,因为一会儿进入jenkins容器的时候要用docker命令
bash
chmod +777 /var/run/docker.sock
2 、Jeskins 运行 与 安装
2.1 Jenkins 运行启动
bash
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的首页
192.168.10.162:8080
等待一两分钟,访问访问你的ip地址:8080即可看到jenkins的首页
bash
[root@benet13 home]# docker exec jenkins cat /var/jenkins_home/secrets/initialAdminPassword
a07829a8375a47f7b6e516ca2f0bad1f

安装推荐插件

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

修改成你想要的密码

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

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

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

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

测试脚本如下:
bash
这是一段 **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 测试 点击立即构建

这里会显示构建状态
我们点进去,然后点击Console Output,可以看到构建时,控制台的输出



四、Mysql部署与数据迁移
4.1 mysql安装
注意:在192.168.10.13上部署
bash
cd jenkins
docker run -d \
--name mysql \
-p 0.0.0.0:3306:3306 \
-e MYSQL_ROOT_PASSWORD=123456 \
--restart=always \
mysql:8.0.39
cd /opt
docker cp ry_20250522.sql mysql:/opt
4.2 创建若依数据库
如果不知道创建什么库可以在配置文件中查看

创建数据库 ry-vue

4.3 若依数据库导入
bash
docker ps
进入mysql的里边:docker exec -it
mysql> create database `ry-vue`;
mysql> use ry-vue
Database changed
mysql> source /opt/ry_20250522.sql
mysql> source /opt/quartz.sql
show tables;
导入后验证
show tables;
五、redis部署
bash
docker run -d \
--name redis \
-p 0.0.0.0:6379:6379 \
--restart=always \
redis:7.4.1
验证测试
docker ps
六、Jenkins实现CICD持续集成(前后端)
6.1 安装gitlab插件
如果想实现代码提交自动部署,需要安装gitlab插件进入系统管理,插件管理

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

② 修改redis的连接信息
到ruoyi-admin/src/main/resources/application.yml中修改redis的连接信息
redis在这个配置文件修改:vim application.yml

③ 这边可以使用推送方式修改
bash
humajun@DESKTOP-GRLMR7J MINGW64 /e/java-项目/docker-cicd-若依/全部合成项目/RuoYi-Vue (master)
$ 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")
humajun@DESKTOP-GRLMR7J MINGW64 /e/java-项目/docker-cicd-若依/全部合成项目/RuoYi-Vue (master)
$ git add . #添加缓存
humajun@DESKTOP-GRLMR7J MINGW64 /e/java-项目/docker-cicd-若依/全部合成项目/RuoYi-Vue (master)
$ git commit -m "xiu gai pei zhi" #提交
[master 9838c2d2] xiu gai pei zhi
2 files changed, 3 insertions(+), 3 deletions(-)
humajun@DESKTOP-GRLMR7J MINGW64 /e/java-项目/docker-cicd-若依/全部合成项目/RuoYi-Vue (master)
$ git push -u 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 创建若依后端镜像
把三个文件放在ruoyi-server下
根目录新建Dockerfile
cd RuoYi-Vue
vim Dockerfile
bash
# 若依需要用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 若依
vim Jenlkinsfile
bash
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 构建速度
vim .dockerignore
bash
根目录新建.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
bash
humajun@DESKTOP-GRLMR7J MINGW64 /e/java-项目/docker-cicd-若依/全部合成项目/RuoYi-Vue (master)
$ git add .
humajun@DESKTOP-GRLMR7J MINGW64 /e/java-项目/docker-cicd-若依/全部合成项目/RuoYi-Vue (master)
$ 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
humajun@DESKTOP-GRLMR7J MINGW64 /e/java-项目/docker-cicd-若依/全部合成项目/RuoYi-Vue (master)
$ 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容器中
bash
#我们到Jenkins容器中
docker exec -it jenkins bash
#生成ssh秘钥
jenkins@2197c6b2d60f:/$ ssh-keygen
Generating public/private rsa key pair.
Enter file in which to save the key (/var/jenkins_home/.ssh/id_rsa): /var/jenkins_home/.ssh/id_rsa already exists.
Overwrite (y/n)? yes
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:5tDw/ziZSPN5O2Yc5ygqkwtCIQ8hA5JydpBIzn1Zoa4 jenkins@2197c6b2d60f
The key's randomart image is:
+---[RSA 3072]----+
|O+.o o. |
|Oo= . + |
|+=.o +. |
| + .o + |
| o .. S |
| . . +o. . . |
| .E. o.+.= = |
| . .+ . BoB . |
| .+...*oo |
+----[SHA256]-----+
jenkins@2197c6b2d60f:/$ cat ~/.ssh/id_rsa.pub
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQCcShQDj9FRoJW7zlN9KqwhC0LYO6DHHJZR+9fycA9uXc9NBjsw+zSU5PHVs3/jXmrLzrA2YyTKejwDzAD7FBcpL4qzuVpv5MFTkxr/o8Wb8PRKkJo6A1j1u1BAvaWlJs8kPFm66E5B0brlclGkY1C+jdGm5qe7HZqKMAfPwNKYE3PxFze3r7DuBQzg20Wl47myvMa0o0CdpS+qnS54aIhHc0ha+W0wDUzEUl9/Z0GAcup+GO1ZE8Bp4awHqJl78SqIEjEiFQHeSamWR0R3Uuexrvn4nsn3KRQGNKaOqwR8gjx8LE+PITI7euTwwIVjk7SC18CClWcgSaQrRS2fzvBMDfpUqbBfcTcfXV60SdQ0JQMCejAY99nd/MgKv3dZeqSdcRDpobG89Z6WOyGifjNk+B4ahF7zm6wNmwj+AA5ayRm1Vm1oHm7lBymbnhdSlbNZlfhyIBOq+yGNR5R7m9xqjQ6xZ04CBP5ruGpyPJzeKocpfyk3nKBX6KXHh0D+x2c= jenkins@2197c6b2d60f
将公钥配置到gitlab中

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

回到Jenkins看下,就会发现错误消失了

下一步,找到这个,把它勾上

展示高级

找到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

bash
humajun@DESKTOP-GRLMR7J MINGW64 /e/java-项目/docker-cicd-若依/全部合成项目/RuoYi-Vue/ruoyi-ui (master)
$ git remote add origin http://192.168.10.80/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/
humajun@DESKTOP-GRLMR7J MINGW64 /e/java-项目/docker-cicd-若依/全部合成项目/RuoYi-Vue/ruoyi-ui (master)
$ git remote add origin http://192.168.10.80/root/ruoyi-ui.git
humajun@DESKTOP-GRLMR7J MINGW64 /e/java-项目/docker-cicd-若依/全部合成项目/RuoYi-Vue/ruoyi-ui (master)
$ git add .
humajun@DESKTOP-GRLMR7J MINGW64 /e/java-项目/docker-cicd-若依/全部合成项目/RuoYi-Vue/ruoyi-ui (master)
$ 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
humajun@DESKTOP-GRLMR7J MINGW64 /e/java-项目/docker-cicd-若依/全部合成项目/RuoYi-Vue/ruoyi-ui (master)
$ 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@benet23 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@benet23 ruoyi-ui]# git config --global user.name "Administrator"
[root@benet23 ruoyi-ui]# git config --global user.email "admin@example.com"
[root@benet23 ruoyi-ui]# git init
初始化空的 Git 版本库于 /home/ruoyi/ruoyi-ui/.git/
[root@benet23 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@benet23 ruoyi-ui]# git remote add origin ssh://git@192.168.10.80:222/root/ruoyi-ui.git
[root@benet23 ruoyi-ui]# git add .
[root@benet23 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@benet23 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@benet23 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@benet23 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@benet23 ruoyi-ui]# git remote set-url origin http://192.168.10.80/root/ruoyi-ui.git
[root@benet23 ruoyi-ui]# git remote -v
origin http://192.168.10.80/root/ruoyi-ui.git (fetch)
origin http://192.168.10.80/root/ruoyi-ui.git (push)
[root@benet23 ruoyi-ui]# git push -u origin master
Username for 'http://192.168.10.80': root
Password for 'http://root@192.168.10.80':
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

结果

6.4 ruoyi 项目自动化完成
http://192.168.10.80/root/ruoyi-ui.git (push)
root@benet23 ruoyi-ui\]# git push -u origin master Username for 'http://192.168.10.80': root Password for 'http://root@192.168.10.80': 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。 