Docker與Jenkins實(shí)現(xiàn)RuoYi-Vue前后端分離項(xiàng)目的CICD全流程自動(dòng)化
在現(xiàn)代軟件開發(fā)流程中,持續(xù)集成/持續(xù)部署(CICD)已經(jīng)成為提升開發(fā)效率、保障代碼質(zhì)量的關(guān)鍵實(shí)踐。本文將詳細(xì)介紹如何利用Docker容器化技術(shù)結(jié)合Jenkins,搭建一套完整的CICD流程,實(shí)現(xiàn)RuoYi-Vue前后端分離項(xiàng)目的自動(dòng)化構(gòu)建、測(cè)試和部署,從代碼提交到自動(dòng)部署的全流程自動(dòng)化。
一、環(huán)境準(zhǔn)備與架構(gòu)設(shè)計(jì)
1. 主機(jī)環(huán)境規(guī)劃
本次部署采用兩臺(tái)服務(wù)器(虛擬機(jī))搭建CICD環(huán)境,具體配置如下:
| 主機(jī)IP | 部署服務(wù)清單 | 配置要求 |
|---|---|---|
| 192.168.10.13 | Jenkins、Redis、MySQL、Spring Boot服務(wù)、Nginx | 至少2核8G內(nèi)存 |
| 192.168.10.80 | Docker、GitLab | 1核4G內(nèi)存 |
2. 核心技術(shù)棧
- 版本控制:GitLab - 用于代碼倉庫管理
- 持續(xù)集成:Jenkins - 實(shí)現(xiàn)自動(dòng)化構(gòu)建與部署
- 容器化:Docker - 統(tǒng)一應(yīng)用運(yùn)行環(huán)境
- 數(shù)據(jù)庫:MySQL 8.0 - 存儲(chǔ)應(yīng)用數(shù)據(jù)
- 緩存:Redis 7.4 - 提升應(yīng)用性能
- Web服務(wù)器:Nginx - 部署前端應(yīng)用并反向代理
3. Docker環(huán)境安裝
所有服務(wù)器需先安裝Docker環(huán)境,步驟如下:
# 安裝依賴包
yum install -y yum-utils device-mapper-persistent-data lvm2
# 設(shè)置阿里云鏡像源
yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
# 安裝指定版本Docker并設(shè)置開機(jī)自啟
yum install -y docker-ce-20.10.18 docker-ce-cli-20.10.18 containerd.io
systemctl start docker.service
systemctl enable docker.service
# 配置華為鏡像加速器
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容器部署
# 拉取GitLab鏡像 docker pull beginor/gitlab-ce # 創(chuàng)建數(shù)據(jù)卷目錄并授權(quán) mkdir -p /data/gitlab/etc/ /data/gitlab/log/ /data/gitlab/data chmod 777 /data/gitlab/etc/ /data/gitlab/log/ /data/gitlab/data/ # 啟動(dòng)GitLab容器 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
2. GitLab配置修改
# 修改修改外部訪問地址 sed -i "/external_url 'GENERATED_EXTERNAL_URL'/a external_url\t'http://192.168.10.80' " /data/gitlab/etc/gitlab.rb # 修改SSH主機(jī)地址 sed -i "/gitlab_ssh_host/a gitlab_rails['gitlab_ssh_host']= '192.168.10.80' " /data/gitlab/etc/gitlab.rb # 修改SSH端口 sed -i "/gitlab_shell_ssh_port/a gitlab_rails['gitlab_shell_ssh_port'] = 222" /data/gitlab/etc/gitlab.rb # 重啟GitLab docker restart gitlab
3. 代碼上傳至GitLab
- 從Gitee克隆RuoYi-Vue項(xiàng)目:
git clone https://gitee.com/y_project/RuoYi-Vue.git - 在GitLab創(chuàng)建創(chuàng)建兩個(gè)項(xiàng)目:
ruoyi-server(后端)和ruoyi-ui(前端) - 將代碼分別推送至對(duì)應(yīng)倉庫:
# 初始化本地倉庫 git init # 關(guān)聯(lián)遠(yuǎn)程倉庫 git remote add origin http://192.168.10.80/root/ruoyi-server.git # 提交并推送代碼 git add . git commit -m "Initial commit" git push -u origin master
三、Jenkins部署與配置
1. 定制Jenkins鏡像
為滿足RuoYi項(xiàng)目構(gòu)建需求,我們需要定制包含JDK、Maven和Node.js的Jenkins鏡像:
FROM jenkins/jenkins:2.480-jdk21 EXPOSE 8080 # 添加依賴工具 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 # 覆蓋maven配置 ADD settings.xml /usr/local/apache-maven-3.9.9/conf/ # 配置環(huán)境變量 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 ENV PATH=$M2_HOME/bin:$NODE_HOME/bin:$PATH
構(gòu)建鏡像:docker build -t jenkins .
2. 啟動(dòng)Jenkins容器
# 創(chuàng)建數(shù)據(jù)目錄 mkdir -p /data/jenkins/jenkins_home chmod +777 /data/jenkins/jenkins_home # 啟動(dòng)容器 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
3. 初始化Jenkins
- 獲取初始密碼:
docker exec jenkins cat /var/jenkins_home/secrets/initialAdminPassword - 訪問
http://192.168.10.13:8080,輸入密碼并安裝推薦插件 - 配置JDK環(huán)境:進(jìn)入"全局工具配置",設(shè)置JDK安裝目錄
四、基礎(chǔ)服務(wù)部署
1. MySQL部署
docker run -d \ --name mysql \ -p 0.0.0.0:3306:3306 \ -e MYSQL_ROOT_PASSWORD=123456 \ --restart=always \ mysql:8.0.39 # 導(dǎo)入初始化數(shù)據(jù) docker exec -it mysql bash mysql -uroot -p123456 create database ry-vue; use ry-vue; source /opt/ry_20250522.sql; source /opt/quartz.sql;
2. Redis部署
docker run -d \ --name redis \ -p 0.0.0.0:6379:6379 \ --restart=always \ redis:7.4.1
五、CICD流水線配置
1. 后端服務(wù)流水線
① 項(xiàng)目配置修改
修改ruoyi-admin/src/main/resources/application-druid.yml中的數(shù)據(jù)庫連接信息和Redis配置,確保指向正確的服務(wù)地址。
② 創(chuàng)建Dockerfile
FROM openjdk:8u342 ENV TZ=Asia/Shanghai ADD ruoyi-admin/target/ruoyi-admin.jar app.jar ENTRYPOINT ["java", "-jar", "app.jar"]
③ 創(chuàng)建Jenkinsfile
pipeline {
agent any
tools {
jdk 'jdk8'
}
environment {
APP_NAME = 'ruoyi-server'
APP_PORT = 9800
}
stages {
stage('build') {
steps {
script {
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
"""
}
}
}
}
}
2. 前端服務(wù)流水線
① 創(chuàng)建Nginx配置文件
server {
listen 9801;
charset utf-8;
location / {
root /usr/share/nginx/html;
try_files $uri $uri/ /index.html;
}
location /prod-api {
rewrite ^/prod-api/(.*)$ /$1 break;
proxy_pass http://192.168.10.13:9800;
}
}
② 創(chuàng)建Dockerfile
FROM nginx:1.26.2 ENV LC_ALL=C.UTF-8 RUN rm -rf /etc/nginx/conf.d/default.conf ADD nginx.conf /etc/nginx/conf.d COPY dist/ /usr/share/nginx/html/
③ 創(chuàng)建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
"""
}
}
}
}
}
3. 配置自動(dòng)觸發(fā)
- 在Jenkins項(xiàng)目中啟用"Build when a change is pushed to GitLab"
- 生成Secret token并在GitLab項(xiàng)目的Webhooks中配置
- 配置觸發(fā)URL:
http://192.168.10.13:8080/project/項(xiàng)目名稱
六、驗(yàn)證部署結(jié)果
完成上述配置后,每次向GitLab推送代碼時(shí),Jenkins將自動(dòng)觸發(fā)構(gòu)建流程:
- 后端服務(wù)構(gòu)建完成后,可訪問
http://192.168.10.13:9800驗(yàn)證API是否可用 - 前端服務(wù)構(gòu)建完成后,通過
http://192.168.10.13:9801訪問前端頁面 - 使用默認(rèn)賬號(hào)密碼(admin/123456)登錄系統(tǒng),驗(yàn)證整體功能
總結(jié)
通過這套CICD流程,我們實(shí)現(xiàn)了RuoYi-Vue項(xiàng)目從代碼提交到自動(dòng)部署的全流程自動(dòng)化,極大地提高了開發(fā)效率和部署一致性,為團(tuán)隊(duì)協(xié)作和持續(xù)交付奠定了堅(jiān)實(shí)基礎(chǔ)。
到此這篇關(guān)于Docker與Jenkins實(shí)現(xiàn)RuoYi-Vue前后端分離項(xiàng)目的CICD全流程自動(dòng)化的文章就介紹到這了,更多相關(guān)RuoYi-Vue代碼提交到自動(dòng)部署的CICD內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
docker容器添加對(duì)外映射端口的實(shí)現(xiàn)
本文主要介紹了docker容器添加對(duì)外映射端口的實(shí)現(xiàn) ,從而實(shí)現(xiàn)容器與外部網(wǎng)絡(luò)的通信,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2023-09-09
docker實(shí)現(xiàn)將本地文件復(fù)制到docker容器內(nèi)
這篇文章主要介紹了docker實(shí)現(xiàn)將本地文件復(fù)制到docker容器內(nèi)方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-01-01
Docker 容器通信與數(shù)據(jù)持久化問題及注意事項(xiàng)
本文將深入探討Docker高級(jí)管理中的容器通信技術(shù)與數(shù)據(jù)持久化方案,幫助讀者構(gòu)建高效、可靠的容器化應(yīng)用架構(gòu),對(duì)docker 數(shù)據(jù)持久化相關(guān)知識(shí)感興趣的朋友一起看看吧2025-06-06
dockerfile中CMD和ENTRYPOINT指令使用及說明
介紹了Dockerfile中的CMD和ENTRYPOINT指令以及它們的執(zhí)行方式,包括exec形式和shell形式,CMD提供默認(rèn)命令,支持覆蓋;ENTRYPOINT定義固定命令,不支持覆蓋,但可以通過--entrypoint參數(shù)實(shí)現(xiàn)覆蓋2025-11-11
Docker 運(yùn)行時(shí)的用戶與組管理的方法
這篇文章主要介紹了Docker 運(yùn)行時(shí)的用戶與組管理的方法,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2018-10-10
創(chuàng)建的docker容器時(shí)間顯示錯(cuò)誤/date錯(cuò)誤/時(shí)區(qū)錯(cuò)誤
這篇文章主要介紹了創(chuàng)建的docker容器時(shí)間顯示錯(cuò)誤/date錯(cuò)誤/時(shí)區(qū)錯(cuò)誤的處理方法,一起看看吧2017-06-06
docker network 自定義網(wǎng)絡(luò)配置與管理指南詳細(xì)過程
Docker網(wǎng)絡(luò)是容器間通信和與外部世界交互的基礎(chǔ),通過自定義網(wǎng)絡(luò),可以實(shí)現(xiàn)容器間的隔離、靜態(tài) IP 分配和服務(wù)發(fā)現(xiàn),這篇文章主要介紹了docker network 自定義網(wǎng)絡(luò)配置與管理指南,需要的朋友可以參考下2025-05-05
Windows環(huán)境GeoServer打包Docker的方法實(shí)現(xiàn)
本文介紹了在Windows環(huán)境下將GeoServer打包為Docker鏡像,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2024-12-12

