Jenkins整合Docker实现CICD自动化部署(若依项目)

embedded/2024/10/17 19:57:49/

前期准备

提前准备好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 anytools {// 刚刚配置的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 || truedocker rm $APP_NAME || truedocker rmi $APP_NAME || truedocker 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.htmltry_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 anyenvironment {// 项目名称APP_NAME = 'ruiyi-ui'// 端口APP_PORT = 9801}stages {stage('build') {steps {script {// 进行打包sh """npm installnpm run build:prod"""}}}stage('deploy') {steps {script {sh """docker stop $APP_NAME || truedocker rm $APP_NAME || truedocker rmi $APP_NAME || truedocker 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构建

构建成功

我们到浏览器看一下吧


http://www.ppmy.cn/embedded/128252.html

相关文章

javaWeb项目-ssm+jsp股票交易管理系统功能介绍

本项目源码(点击下方链接下载):java-ssmjsp股票交易管理系统实现源码(项目源码-说明文档)资源-CSDN文库 项目关键技术 开发工具:IDEA 、Eclipse 编程语言: Java 数据库: MySQL5.7 框架:ssm、Springboot 前端&#xff…

IBM AIX服务器监控易监测指标解读

监控易是一款功能全面的IT基础设施监控软件,它能够通过多种方式(如SSH、SNMP等)对服务器、网络设备等IT资源进行全面监控。针对IBM AIX服务器,监控易提供了一系列特定的监测指标,以确保服务器的稳定运行并及时发现潜在…

YOLOv11改进策略【Neck】| ECCV-2024 RCM 自校准模块 二次创新C3k2 改进颈部网络

一、本文介绍 本文记录的是利用自校准模块RCM优化YOLOv11的目标检测方法研究。RCM通过形状自校准函数可以将注意力区域校准得更接近前景对象,有效提高对前景对象的定位能力。本文对C3k2模块进行二次创新,并应用在颈部网络上,使模型能够捕获轴向全局上下文信息,并应用于金字…

【SQL】分数排名

目录 语法 需求 示例 分析 代码 语法 dense_rank() over (order by score desc) as rank SQL 中的一个窗口函数(Window Function),用于对查询结果集中的行进行排名。这个函数特别适用于需要对某个字段(如分数、销售额等&…

视频去水印软件3款推荐:好用的去水印软件分享!

在处理视频素材时,水印往往是一个令人头疼的问题。幸运的是,市面上有许多优秀的视频编辑软件能够帮助我们快速、有效地去除水印。今天,我将为大家推荐三款功能强大的视频去水印软件:影忆、Final Cut Pro X以及Adobe Premiere Pro&…

可以在桌面上用的倒计时提醒app下载

在忙碌的工作日常中,我们常常需要记住各种截止日期和重要事件。为了确保这些任务按时完成,一款桌面倒计时提醒应用变得尤为重要。想象一下,当你在电脑桌面上就能清晰地看到剩余时间,这无疑会增加你的工作效率和紧迫感。 敬业签就…

React入门(1)——我的第一个React.js项目

创建日期: 2020年2月22日 官网 中文官方文档 React入门系列 目录导引 一.使用create-react-app命令创建 React 官方提供了一个脚手架用于初始化React项目,使用 create-react-app 可以简化手动设置流程。 官方网站的 Tutorial 也是以此为例。 注意:项目命…

#### failed to build some targets (12 seconds) ####

[TOC](#### failed to build some targets (12 seconds) ####) 问题分析解决 这个要注意看log信息,是代码出错了 Error: xx/rk3568-evb.dtsi:188.27-28 syntax error FATAL ERROR: Unable to parse input tree需要根据报错的提示去找问题