docker与微服务的课程-CICD

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。 ![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/ecda33dea37049bda98bb265fbde4617.png)

相关推荐
眠りたいです1 小时前
Docker核心技术和实现原理第一部分-Docker镜像制作
运维·docker·容器·集群·镜像·dockerfile
面对疾风叭!哈撒给1 小时前
Liunx之Docker 安装启动 influxdb2
java·spring cloud·docker
liuc03171 小时前
docker下安装mysql
mysql·docker·容器
嚣张丶小麦兜1 小时前
docker的简单应用
前端·docker
IT老胡1 小时前
Docker入门与实操(1):Docker简介
运维·docker·容器
小股虫1 小时前
缓存攻防战:在增长中台设计一套高效且安全的缓存体系
java·分布式·安全·缓存·微服务·架构
仅此,1 小时前
docker 方式,postgreSQL18 安装 jieba 分词器扩展
运维·docker·postgresql·容器·中文分词·jieba
oMcLin2 小时前
如何在Ubuntu 20.04系统的香港服务器上使用Docker搭建高效的CI/CD流水线并集成Kubernetes?
服务器·ubuntu·docker
VicdorLin2 小时前
docker报错: client version 1.24 is too old. Minimum supported API version is 1.44
运维·docker·容器
我是koten2 小时前
K8s启动pod失败,日志报非法的Jar包排查思路(Invalid or corrupt jarfile /app/xxxx,jar)
java·docker·容器·kubernetes·bash·jar·shell