当前位置: 首页 > 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、…...

Prompt Tuning、P-Tuning、Prefix Tuning的区别

一、Prompt Tuning、P-Tuning、Prefix Tuning的区别 1. Prompt Tuning(提示调优) 核心思想:固定预训练模型参数,仅学习额外的连续提示向量(通常是嵌入层的一部分)。实现方式:在输入文本前添加可训练的连续向量(软提示),模型只更新这些提示参数。优势:参数量少(仅提…...

边缘计算医疗风险自查APP开发方案

核心目标:在便携设备(智能手表/家用检测仪)部署轻量化疾病预测模型,实现低延迟、隐私安全的实时健康风险评估。 一、技术架构设计 #mermaid-svg-iuNaeeLK2YoFKfao {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg…...

ESP32 I2S音频总线学习笔记(四): INMP441采集音频并实时播放

简介 前面两期文章我们介绍了I2S的读取和写入&#xff0c;一个是通过INMP441麦克风模块采集音频&#xff0c;一个是通过PCM5102A模块播放音频&#xff0c;那如果我们将两者结合起来&#xff0c;将麦克风采集到的音频通过PCM5102A播放&#xff0c;是不是就可以做一个扩音器了呢…...

华为OD机试-食堂供餐-二分法

import java.util.Arrays; import java.util.Scanner;public class DemoTest3 {public static void main(String[] args) {Scanner in new Scanner(System.in);// 注意 hasNext 和 hasNextLine 的区别while (in.hasNextLine()) { // 注意 while 处理多个 caseint a in.nextIn…...

什么?连接服务器也能可视化显示界面?:基于X11 Forwarding + CentOS + MobaXterm实战指南

文章目录 什么是X11?环境准备实战步骤1️⃣ 服务器端配置(CentOS)2️⃣ 客户端配置(MobaXterm)3️⃣ 验证X11 Forwarding4️⃣ 运行自定义GUI程序(Python示例)5️⃣ 成功效果![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/55aefaea8a9f477e86d065227851fe3d.pn…...

图表类系列各种样式PPT模版分享

图标图表系列PPT模版&#xff0c;柱状图PPT模版&#xff0c;线状图PPT模版&#xff0c;折线图PPT模版&#xff0c;饼状图PPT模版&#xff0c;雷达图PPT模版&#xff0c;树状图PPT模版 图表类系列各种样式PPT模版分享&#xff1a;图表系列PPT模板https://pan.quark.cn/s/20d40aa…...

项目部署到Linux上时遇到的错误(Redis,MySQL,无法正确连接,地址占用问题)

Redis无法正确连接 在运行jar包时出现了这样的错误 查询得知问题核心在于Redis连接失败&#xff0c;具体原因是客户端发送了密码认证请求&#xff0c;但Redis服务器未设置密码 1.为Redis设置密码&#xff08;匹配客户端配置&#xff09; 步骤&#xff1a; 1&#xff09;.修…...

使用 Streamlit 构建支持主流大模型与 Ollama 的轻量级统一平台

🎯 使用 Streamlit 构建支持主流大模型与 Ollama 的轻量级统一平台 📌 项目背景 随着大语言模型(LLM)的广泛应用,开发者常面临多个挑战: 各大模型(OpenAI、Claude、Gemini、Ollama)接口风格不统一;缺乏一个统一平台进行模型调用与测试;本地模型 Ollama 的集成与前…...

Go 语言并发编程基础:无缓冲与有缓冲通道

在上一章节中&#xff0c;我们了解了 Channel 的基本用法。本章将重点分析 Go 中通道的两种类型 —— 无缓冲通道与有缓冲通道&#xff0c;它们在并发编程中各具特点和应用场景。 一、通道的基本分类 类型定义形式特点无缓冲通道make(chan T)发送和接收都必须准备好&#xff0…...

手机平板能效生态设计指令EU 2023/1670标准解读

手机平板能效生态设计指令EU 2023/1670标准解读 以下是针对欧盟《手机和平板电脑生态设计法规》(EU) 2023/1670 的核心解读&#xff0c;综合法规核心要求、最新修正及企业合规要点&#xff1a; 一、法规背景与目标 生效与强制时间 发布于2023年8月31日&#xff08;OJ公报&…...