当前位置: 首页 > news >正文

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

前期准备

提前准备好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构建

构建成功

我们到浏览器看一下吧

相关文章:

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

前期准备 提前准备好jenkins环境 并且jenkins能使用docker命令,并且已经配置好了jdk、node、maven环境,我之前写了安装jenkins的博客,里面讲得比较详细,推荐用我这种方式安装 docker安装jenkins,并配置jdk、node和m…...

kali chrome 安装 hackbar

HackBar 是一个用于在 Kali Linux 中快速测试 SQL 注入和 XSS 漏洞的 Chrome 扩展程序。以下是如何在 Kali Linux 上安装 HackBar 的步骤: 首先,你需要确保你的系统已经安装了 Google Chrome 或 Chromium。如果没有安装,你可以使用以下命令安…...

一文了解 Linux 系统的文件权限管理

文章目录 引入Linux文件权限模型查看文件权限权限信息解析修改文件权限符号模式八进制数字模式 引入 在Linux操作系统中,我们想查看我们对文件拥有哪些权限时,可以在终端键入ls -l或ll命令,终端会输出当前路径下的文件信息,如文件…...

Spark:DataFrame介绍及使用

1. DataFrame详解 DataFrame是基于RDD进行封装的结构化数据类型,增加了schema元数据,最终DataFrame类型在计算时,还是转为rdd计算。DataFrame的结构化数据有Row(行数据)和schema元数据构成。 Row 类型 表示一行数据 …...

Linux系统:本机(物理主机)访问不了虚拟机中的apache服务问题的解决方案

学习目标: 提示:本文主要讲述-本机(物理主机)访问不了虚拟机中的apache服务情况下的解决方案 Linux系统:Ubuntu 23.04; 文中提到的“本机”:代表,宿主机,物理主机; 首先&#xff0c…...

望繁信科技成功签约国显科技 流程挖掘助力制造业智造未来

近日,上海望繁信科技有限公司(简称“望繁信科技”)成功与深圳市国显科技有限公司(简称“国显科技”)达成合作。国显科技作为全球领先的TFT-LCD液晶显示及Mini/Micro LED显示产品供应商,致力于为笔记本、手机…...

枚举在Java体系中的作用

1. 枚举 枚举是在JDK1.5以后引入的。主要用途是:将一组常量组织起来,在这之前表示一组常量通常使用定义常量的方式: //用public static final修饰常量 public static final int RED 1; public static final int GREEN 2; public static f…...

『气泡水』Web官网 案例赏析

前言 Schweppes,作为一家享誉全球的气泡水品牌,致力于与年轻消费者建立更紧密的联系,并提升品牌影响力。为此,其打造了一个充满创意和高度互动性的官网,利用前端技术和动画效果,将产品特性与用户浏览体验完…...

【前端】制作一个简单的网页(2)

单标签组成的元素 这类标签不需要内容产生效果&#xff0c;通常表示对网页的某种行为&#xff0c;它们不用标记任何内容&#xff0c;开始即是结束。 比如&#xff0c;<hr>标签的作用是在网页中添加一条分割线&#xff0c;它仅包含开始标签&#xff0c;是一个单标签元素。…...

OpenAI Canvas:提升编程与写作效率的全新工作界面

随着人工智能技术的飞速发展&#xff0c;大语言模型&#xff08;LLM&#xff09;不仅限于生成文本&#xff0c;还能逐步扩展至编程、设计等任务的支持。近期&#xff0c;OpenAI 推出了一个名为 Canvas 的全新功能&#xff0c;专门用于协助用户进行编程和写作。这一功能与 Claud…...

将SpringBoot的Maven项目打成jar包和war包

先需要明确的是&#xff0c;该项目打包的形态是可执行的jar包&#xff0c;还是在tomcat下运行的war包。 springboot自带的maven打包 1.创建一个springboot web项目 1.api控制层HelloWorld.java RestController RequestMapping("/hello") public class HelloWorld …...

【Iceberg分析】Spark与Iceberg集成之常用存储过程

文章目录 Spark与Iceberg集成之常用存储过程调用语法调用样例表快照管理快照回滚根据snapshotid进行回滚根据timestamp进行回滚 设置表当前生效的快照 表元数据管理设置快照过期时间清除孤岛文件重写数据文件运用参数示例optionsGeneral OptionsOptions for sort strategyOptio…...

[旧日谈]关于Qt的刷新事件频率,以及我们在Qt的框架上做实时的绘制操作时我们该关心什么。

[旧日谈]关于Qt的刷新事件频率&#xff0c;以及我们在Qt的框架上做实时的绘制操作时我们该关心什么。 最近在开发的时候&#xff0c;发现一个依赖事件来刷新渲染的控件会导致程序很容易异常和崩溃。 当程序在运行的时候&#xff0c;其实软件本身的负载并不高&#xff0c;所以…...

云上考场小程序+ssm论文源码调试讲解

2 关键技术简介 2.1 微信小程序 微信小程序&#xff0c;简称小程序&#xff0c;英文名Mini Program&#xff0c;是一种全新的连接用户与服务的方式&#xff0c;可以快速访问、快速传播&#xff0c;并具有良好的使用体验。 小程序的主要开发语言是JavaScript&#xff0c;它与…...

城域网——IP城域网、城域以太网、光城域网

一、城域网 1、城域网&#xff08;Metropolitan Area Network&#xff0c;MAN&#xff09;&#xff1a;一个城市范围内所建立的计算机通信网。 2、分布式队列双总线&#xff08;Distributed Queue Dual Bus&#xff0c;DQDB&#xff09;&#xff1a;即IEEE802.6&#xff0c;由…...

华为Eth-trunk链路聚合加入到E-trunk实现跨设备的链路聚合

一、适用场景&#xff08;注&#xff1a;e-trunk与eth-trunk是2个不同的概念&#xff09; 1、企业中有重要的server服务器业务不能中断的情况下&#xff0c;可将上行链路中的汇聚交换机&#xff0c;通过eth-trunk链路聚合技术&#xff0c;实现链路故障后&#xff0c;仍有可用的…...

【网络安全】JSONP劫持原理及攻击实战

未经许可,不得转载。 文章目录 JSONP简介JSONP工作原理JSONP劫持Callback可定义问题JSONP简介 JSONP(JavaScript Object Notation Padding)是一种用于绕过浏览器同源策略限制的技术,使得网页可以从不同域名的服务器请求数据。由于浏览器的同源策略限制,网页通常只能向与其…...

VR全景摄影的拍摄和编辑软件推荐

随着虚拟现实技术的不断进步&#xff0c;VR全景摄影逐渐成为商业、娱乐和教育等多个领域中的重要工具。通过专业的设备与软件&#xff0c;摄影师能够创作出沉浸式的360度全景作品&#xff0c;为观众提供身临其境的视觉体验。在这篇文章中&#xff0c;我们将介绍VR全景摄影的相关…...

linux:使用sar诊断问题

使用sar诊断问题 1. CPU 使用情况2. 内存与交换3. 磁盘 I/O 活动4. 网络 I/O 活动5. 进程与上下文切换6. 系统调用与文件活动7. 电源管理8. 延迟分析9. 系统全局统计10. 查看历史记录11. 特定时间段12. 自动定时采样其他参数&#xff1a;使用实例&#xff1a; sar&#xff08;S…...

CUDA编程技巧(不断搜集更新)

1 使用位运算替换部分乘法或除法 位移操作主要适用于无符号整数&#xff0c;对于带符号数的位移&#xff0c;特别是负数&#xff0c;可能会导致问题&#xff0c;如果你需要对负数执行除法或者乘法&#xff0c;最好谨慎使用位移运算。 1.1 替换除法 当需要将一个数除以 2、4、…...

嵌入式软件开发规范与最佳实践指南

嵌入式软件开发最佳实践指南1. 项目概述1.1 嵌入式开发核心挑战现代嵌入式系统开发面临代码复杂度增加、团队协作需求提升以及产品迭代周期缩短等多重挑战。高效的开发流程和规范的编码实践成为保证项目成功的关键因素。1.2 开发环境配置建议推荐采用以下硬件配置方案&#xff…...

Python离线环境搭建全攻略:从虚拟机到生产服务器的完整迁移方案

Python离线环境搭建全攻略&#xff1a;从虚拟机到生产服务器的完整迁移方案 在金融、军工等对网络安全要求极高的行业&#xff0c;服务器通常运行在完全隔离的离线环境中。这种环境下&#xff0c;如何部署Python运行环境并确保所有依赖库正常工作&#xff0c;成为许多运维工程师…...

前端打印PDF避坑指南:用printJS搞定Base64流和批量打印(附完整代码)

前端PDF打印实战&#xff1a;Base64流处理与批量打印的工程化解决方案 每次遇到PDF打印需求&#xff0c;前端开发者总会面临各种意想不到的坑。从Base64流解码到跨浏览器兼容性处理&#xff0c;再到批量打印的性能优化&#xff0c;每个环节都可能成为项目进度中的"拦路虎&…...

告别特征点!FAST-LIVO2的‘直接法’融合:如何用原始点云和图像块实现更快的SLAM?

FAST-LIVO2&#xff1a;直接法SLAM的革命性突破与工程实践指南 1. 直接法SLAM的技术演进与核心价值 当波士顿动力的Atlas机器人完成后空翻动作时&#xff0c;其核心定位系统正面临着与人类体操运动员相似的挑战——如何在高速运动中维持对环境的精确感知。这正是FAST-LIVO2这类…...

Qwen3-4B-Thinking-2507-GPT-5-Codex-Distill-GGUF小白友好测评:vLLM部署是否真的简单?生成效果如何?

Qwen3-4B-Thinking-2507-GPT-5-Codex-Distill-GGUF小白友好测评&#xff1a;vLLM部署是否真的简单&#xff1f;生成效果如何&#xff1f; 1. 引言&#xff1a;从零开始的模型部署体验 作为一个刚接触大模型部署的新手&#xff0c;我最近尝试用vLLM部署了Qwen3-4B-Thinking-25…...

Qwen3-0.6B-FP8企业级部署教程:基于Dify打造AI应用平台

Qwen3-0.6B-FP8企业级部署教程&#xff1a;基于Dify打造AI应用平台 想快速搭建一个属于自己或团队的AI应用&#xff0c;但又觉得从零开发太复杂&#xff1f;今天&#xff0c;我们就来聊聊如何用Qwen3-0.6B-FP8这个轻量高效的模型&#xff0c;结合Dify这个强大的AI应用开发平台…...

Wireshark 实战|HTTP 协议:浏览器和服务器是怎么聊天的?

Wireshark 实战&#xff5c;HTTP 协议&#xff1a;浏览器和服务器是怎么聊天的&#xff1f; 大家好&#xff0c;我是网域小星球&#xff0c;一名网络工程大三学生。上一篇我们拆解了 DNS 域名解析&#xff0c;今天我们继续往下走&#xff0c;看看拿到 IP 地址后&#xff0c;浏…...

从零开始学计算机视觉|CV 基础算法与项目实战

大家好&#xff0c;我是唐宇迪&#xff0c;资深AI讲师与学习规划师。专注计算机视觉教学与算法研发&#xff0c;过去三年我帮超过2500名有Python基础的入门者&#xff0c;从“像素是什么”到“独立跑通CV项目”。今天这篇长文&#xff0c;完全按零基础实战体系撰写&#xff0c;…...

5分钟搞定OpenClaw飞书接入:Qwen3.5-9B对话机器人配置

5分钟搞定OpenClaw飞书接入&#xff1a;Qwen3.5-9B对话机器人配置 1. 为什么选择OpenClaw飞书Qwen3.5-9B组合 上周我在整理团队周报时&#xff0c;突然意识到一个痛点&#xff1a;每次都要反复切换浏览器、文档和聊天工具&#xff0c;手动复制粘贴信息。这种机械操作不仅浪费…...

小白必看:Ollama部署translategemma-12b-it图文翻译模型完整流程

小白必看&#xff1a;Ollama部署translategemma-12b-it图文翻译模型完整流程 1. 准备工作与环境搭建 1.1 系统要求与安装Ollama 在开始部署translategemma-12b-it模型前&#xff0c;请确保您的系统满足以下基本要求&#xff1a; 操作系统&#xff1a;支持Windows 10/11&…...