前期准备
提前准备好jenkins环境
并且jenkins能使用docker命令,并且已经配置好了jdk、node、maven环境,我之前写了安装jenkins的博客,里面讲得比较详细,推荐用我这种方式安装
需要提前准备好gitlab环境
github、gitee其实也可以,但是需要和jenkins互相能访问到,这边推荐gitlab
需要准备好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
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
"""
}
}
}
}
}根目录新建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_modulessrc
添加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构建

构建成功

我们到浏览器看一下吧

到此这篇关于jenkins整合docker实现cicd自动化部署的文章就介绍到这了,更多相关jenkins整合docker cicd自动化部署内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!
发表评论