前期准备
提前准备好jenkins环境
并且jenkins能使用docker命令,并且已经配置好了jdk、node、maven环境,我之前写了安装jenkins的博客,里面讲得比较详细,推荐用我这种方式安装
docker安装jenkins,并配置jdk、node和maven_jenkins 配置node镜像-CSDN博客
需要提前准备好gitlab环境
github、gitee其实也可以,但是需要和jenkins互相能访问到,这边推荐gitlab
docker搭建gitlab_docker 搭建gitlab-CSDN博客
需要准备好mysql
如果没安装的,docker一句话就可以了
docker run -d \
--name mysql \
-p 0.0.0.0:3306:3306 \
-e MYSQL_ROOT_PASSWORD=123456 \
--restart=always \
mysql:8.0.39
准备好redis环境
docker run -d \
--name redis \
-p 0.0.0.0:6379:6379 \
--restart=always \
redis:7.4.1
安装gitlab插件
如果想实现代码提交自动部署,需要安装gitlab插件
进入系统管理,插件管理
搜索gitlab插件进行安装
安装成功即可,无需重启
开始部署
拉取项目
拉取若依项目,我们拉取的是若依项目的前后端分离版
若依项目下载地址
根目录有个ruoyi-ui,这是前端项目,我们把它移动到外层,我们分成2个项目部署
部署后端项目
将这两个sql文件导入到数据库中
到application-druid.yml中修改数据库的连接信息
修改redis的连接信息
根目录新建Dockerfile
# 若依需要用jdk8来运行
FROM openjdk:8u342
# 解决时区问题
ENV TZ=Asia/Shanghai
# 将jar包添加到容器中
ADD ruoyi-admin/target/ruoyi-admin.jar app.jar
# 运行容器时应该执行的命令
ENTRYPOINT ["java", "-jar", "app.jar"]
根目录新建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
"""
}
}
}
}
}
根目录新建.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
检查项目中是否已经有了这几个文件
将项目提交到gitlab
Jenkins中新建任务
名称随便填,选择流水线,确定
找到流水线,选择scm
然后选择git
然后把ssh地址复制进去
不出意外的话,会出现无法连接仓库,原因是Jenkins无法拉取gitlab的代码
我们到Jenkins容器中
docker exec -it jenkins bash
生成ssh秘钥
ssh-keygen
# 然后3个回车
查看公钥
cat ~/.ssh/id_rsa.pub
将公钥配置到gitlab中
进行一次ssh通信,然后将信息保存下来
这步仍然是在jenkins容器中操作的
# 192.168.200.120是gitlab的地址,8091是gitlab的ssh端口
ssh-keyscan -p 8091 192.168.200.120 >> ~/.ssh/known_hosts
查看一下.ssh目录下的文件
ls -l ~/.ssh
如果有这3个文件,就说明Jenkins可以拉取gitlab的代码了
回到Jenkins看下,就会发现错误消失了
下一步,找到这个,把它勾上
展开高级
找到Secret token,点击Generate生成,就会生成一串token,这串token一会儿到gitlab中会用上
我们到gitlab中Settings中有一个Webhooks
我们来添加一个webhook
填写相关信息
如果出现了这个错误,说明github没有开启webhook
我们到管理员设置中,找到Network
找到Allow requests to the local network from webhooks and integrations,勾上
这时候再来添加webhooks就能添加了
我们模拟一次push事件,看看Jenkins有什么反应
回来看Jenkins,你就会发现Jenkins在构建了
这时候代码push的时候,Jenkins也会自动构建
如果没有报错就说明构建成功了
部署前端项目
打开前端项目
添加nginx.conf,真实的后端地址根据实际情况修改
server {
# 前端访问端口
listen 9801;
# 前端
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.200.120:9800;
}
}
添加Dockerfile
# 使用nginx镜像来部署
FROM nginx:1.26.2
# 解决文件名乱码问题
ENV LC_ALL=C.UTF-8
# 将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
"""
}
}
}
}
}
检查一下有没有这几个文件
提交代码
Jenkins再新建一个项目
和刚刚一样,勾上
生成Secret token
设置gitlab仓库地址
gitlab中webhooks配置
添加一个webhook
然后push代码
等待Jenkins构建
构建成功
我们到浏览器看一下吧