【服务器部署】Jenkins配置前端工程自动化部署

作者介绍:本人笔名姑苏老陈,从事JAVA开发工作十多年了,带过刚毕业的实习生,也带过技术团队。最近有个朋友的表弟,马上要大学毕业了,想从事JAVA开发工作,但不知道从何处入手。于是,产生了写一个博客专栏想法,介绍当前互联网企业JAVA项目开发如何快速入门。

本文收录于《30天企业JAVA项目开发实战入门》专栏,该专栏内容以当前互联网软件企业中的项目实战为线索,介绍企业JAVA项目开发中涉及到的开发流程、技术、工具、规范要求等等。帮助想从事JAVA开发的大学生或新人,更快、更好的入门JAVA后端开发工作。

文章目录

    • 一、前言
    • 二、准备资源
    • 三、Nginx配置
    • 四、代码配置文件修改
    • 五、Jenkins全局工具配置
    • 六、配置项目的Jenkins任务
    • 七、执行项目的Jenkins任务,实现自动化部署
    • 八、总结

一、前言

本文介绍如何通过Jenkins配置前端工程进行自动化部署。这里以若依Spring-cloud项目中ruoyi-ui前端工程为示例,介绍如何通过Jenkins配置若依ruoyi-ui前端工程,实现自动化发布部署到服务器上。

首先,梳理一下,我们要实现的自动化发布部署的流程如下:

1)首先,使用git从远程代码仓库中拉取最新的代码;

2)之后,使用node.js环境、npm包管理工具对代码进行编译打包;

3)最后,把编译后的代码使用ansible运维工具同步到nginx服务器上。至此,自动化发布部署完成。

二、准备资源

1)环境要求

CentOS7.9 64位、Git1.8、Jenkins2.260、node-v16.20.2、npm8.19.4、nginx-1.24.0、ansible2.9.27

2)服务器资源

阿里云ECS服务器172.22.187.36(安装Jenkins等第三方应用)

阿里云ECS服务器172.22.187.40(部署nginx和ruoyi-ui项目)

3)服务器上应用安装清单

Jenkins发布工具,安装参考见本专栏链接:https://blog.csdn.net/u012171005/article/details/138182743

nodejs和npm,安装参考见本专栏链接:https://blog.csdn.net/u012171005/article/details/139301480

nginx服务器,安装参考见本专栏链接:https://blog.csdn.net/u012171005/article/details/137740079

Ansible运维工具,安装参考见本专栏链接:https://blog.csdn.net/u012171005/article/details/138136832

4)其他资源

代码仓库使用码云gitee,RuoYi-Cloud代码下载地址:https://gitee.com/y_project/RuoYi-Cloud(PS:前端工程指RuoYi-Cloud工程中的ruoyi-ui子工程)

三、Nginx配置

首先,找到Nginx配置文件nginx.conf;

之后,配置前端页面和后端API接口访问代理。其中,前端页面访问路径统一配置使用“/ui”,后端API接口访问路径统一配置使用“/cms-api”。

在这里插入图片描述

修改后的完整的配置文件nginx.conf内容如下:

#user  nobody;
worker_processes  1;#error_log  logs/error.log;
#error_log  logs/error.log  notice;
#error_log  logs/error.log  info;#pid     logs/nginx.pid;events {worker_connections  1024;
}http {include       mime.types;default_type  application/octet-stream;#log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '#                  '$status $body_bytes_sent "$http_referer" '#                  '"$http_user_agent" "$http_x_forwarded_for"';#access_log  logs/access.log  main;sendfile        on;#tcp_nopush     on;#keepalive_timeout  0;keepalive_timeout  65;#gzip  on;#负载均衡upstream cmsGateway {server localhost:8080;}server {listen       80;server_name  监听的服务器域名或IP;#charset koi8-r;#access_log  logs/host.access.log  main;location / {root   html;index  index.html index.htm;}#error_page  404              /404.html;# redirect server error pages to the static page /50x.html#error_page   500 502 503 504  /50x.html;location = /50x.html {root   html;}#后端API接口访问路径统一配置使用/cms-apilocation /cms-api/ {proxy_pass http://cmsGateway/;proxy_connect_timeout 600;proxy_read_timeout 600;proxy_send_timeout 600;proxy_set_header X-Real-IP $remote_addr;proxy_set_header   X-Forwarded-For $proxy_add_x_forwarded_for;}#前端页面访问路径统一配置使用/uilocation /ui {alias  /usr/local/web/ruoyi/kenny;index  index.html index.htm;}}}

修改完成后,重载配置,使配置生效。

./nginx -s reload

四、代码配置文件修改

之后,对前端工程ruoyi-ui中部分代码配置文件进行修改;
首先,修改路由器模式,这里使用hash模式,即页面访问路径带#的方式。
在router>index.js文件中,路由模式由history修改为hash模式;
在这里插入图片描述
之后,修改路由懒加载方式。
开发环境、测试环境、生产环境中路由懒加载实现方式,统一使用require方式实现,而不是使用import方式;
在modules>permisson.js中修改懒加载实现方式。
在这里插入图片描述
之后,修改开发环境、测试环境、生产环境配置文件,后端API接口访问根路径统一为“/cms-api”,跟nginx中配置保持一致;
在这里插入图片描述
之后,修改响应拦截器中跳转路径为“/ui”,跟nginx中配置保持一致;
在这里插入图片描述
之后,修改登录后首页右上角注销后跳转路径为“/ui”,跟nginx中配置保持一致;
在这里插入图片描述
至此,代码配置文件修改完成。

五、Jenkins全局工具配置

下面进行Jenkins全局工具配置。

首先配置nodejs信息;
在这里插入图片描述
之后,配置git信息;
在这里插入图片描述
至此,Jenkins全局工具配置完成。

六、配置项目的Jenkins任务

下面开始新建和配置Jenkins任务。

首先,新增一个Jenkins任务,填写任务名称,选择自由风格的软件项目,点击确定。
在这里插入图片描述
之后,填写任务描述;
在这里插入图片描述
之后,填写保持构建信息;
在这里插入图片描述

之后,填写git源码管理信息;
在这里插入图片描述

之后,填写构建环境信息;(PS:nodejs16指前面Jenkins全局工具配置中的信息)
在这里插入图片描述
之后,填写执行的shell脚步内容。
在这里插入图片描述
完整的shell脚本内容如下:

#npm config set设置仓库地址脚本,执行一次即可
#npm config set registry http://registry.npm.taobao.org#npm install安装依赖包脚本,执行一次即可
#npm install#编译打包
npm run build:stage#同步到nginx服务器上
ansible 172.22.187.40 -m copy -a "src=/root/.jenkins/workspace/ruoyi-ui/dist/  dest=/usr/local/web/ruoyi/kenny"

最后,点击应用和保存,完成任务创建。
在这里插入图片描述

七、执行项目的Jenkins任务,实现自动化部署

Jenkins任务创建完成后,下面开始执行Jenkins任务构建,进行自动化部署。
首先在任务列表中,选择要构建的任务,之后,点击构建。
在这里插入图片描述
开始构建后,控制台输出构建信息。
在这里插入图片描述
在这里插入图片描述
如果控制台最后输出SUCCES字样,说明部署成功了。之后,打开浏览器,输入地址:http://外网IP/ui/#/login 访问页面。
(PS:默认账号为admin/admin123)
在这里插入图片描述
至此,Jenkins配置前端工程自动化部署完成。

八、总结

以上通过部署若依开源ruoyi-ui项目,对Jenkins配置前端工程自动化部署进行了介绍,希望对大家有帮助,谢谢。
另外,在部署过程了,也遇到了一些问题。其中值得注意的一点是关于前端页面路由相关的问题。最终,通过修改前端代码中路由模式和路由实现方式,解决了问题。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/39925.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

BIOS中的设置虽然不少,但其实大部分时候只需进行一些简单的调整

序言 浏览BIOS可能会让人感到不知所措,因为要考虑的设置太多了。但是,你应该在BIOS中进行一些简单的调整,以提高系统的性能和稳定性。我们将向你展示其中的一些调整,并解释你可能想要使用它们的时间和原因。 用密码保护你的BIOS 虽然我们很小心地对用户帐户进行密码保护…

[译]Reactjs性能篇

英文有限,技术一般,海涵海涵,由于不是翻译出身,所以存在大量的瞎胡乱翻译的情况,信不过我的,请看原文~~ 原文地址:https://facebook.github.io/react/docs/advanced-per…

JavaSE阶段面试题(一)

目录 1.int a 1, int b 1, Integer c 1, Integer d 1;四个区别和联系,以及c和d是同一个吗? 2.为什么重写HashCode必须重写euqals,两者之间的关系? 3.创建对象的方式有哪些 4.重写和重载的区别 5.抽象类和接口…

day02-广播机制

广播机制 广播是numpy对不同形状的数组进行数值计算的方式,对数组的算术运算通常在相应的元素上进行 1.如果两个数组a和b形状相同,即满足a.shape b.shape,那么a*b的结果就是a与b数组对应位相乘。这要求维数相同且各维度的长度相同 a np.a…

七大排序算法的深入浅出(java篇)

🍁 个人主页:爱编程的Tom💫 本篇博文收录专栏:Java专栏👉 目前其它专栏:c系列小游戏 c语言系列--万物的开始_ 等等 🎉 欢迎 👍点赞✍评论⭐收藏💖三连支…

【高级篇】第9章 Elasticsearch 监控与故障排查

9.1 引言 在现代数据驱动的应用架构中,Elasticsearch不仅是海量数据索引和搜索的核心,其稳定性和性能直接影响到整个业务链路的健康度。因此,建立有效的监控体系和掌握故障排查技能是每一位Elasticsearch高级专家的必备能力。 9.2 监控工具:洞察与优化的利器 在Elastics…

乘用车副水箱浮球式液位计传感器

浮球式液位计概述 浮球式液位计是一种利用浮球在液体中浮动的原理来测量液位的设备,广泛应用于各种工业自动化控制系统中,如石油化工、水处理、食品饮料等行业。它通过浮球的上下运动来测量液位的高低,具有结构简单、安装方便、测量范围广、…

如何选择适合自己的虚拟化技术?

虚拟化技术已成为现代数据中心和云计算环境的核心组成部分。本文将帮助您了解如何选择适合自己需求的虚拟化技术,以实现更高的效率、资源利用率和灵活性。 理解虚拟化技术 首先,让我们了解虚拟化技术的基本概念。虚拟化允许将一个物理服务器划分为多个虚…

【Linux】多线程(一万六千字)

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 目录 文章目录 前言 线程的概念 线程的理解(Linux系统为例) 在Linux系统里如何保证让正文部分的代码可以并发的去跑呢? 为什么要有多进程呢? 为…

Osg中的智能指针和观察指针

目录 1 设计 内容 1 设计 osg中能够使用智能指针的对象都继承自引用计数类Referenced,观察指针(observer_ptr)与智能指针之间通过ObserverSet相互关联,其中obserserver_ptr直接依赖ObeserverSet。 Referenced不直接依赖ObserverSet类,但可…

pdf合并,pdf合并成一个pdf,pdf合并在线网页版

在处理pdf文件的过程中,有时我们需要将多个pdf文件合并成一个pdf文件。作为一名有着丰富计算机应用经验的技术博主,我将为您详细介绍如何将多个pdf文件合并成一个pdf文件。 pdf合并方法:使用, “轻云处理pdf官网” 打开 “轻云处…

【高中数学/基本不等式】已知:x,y皆大于1,且x+2y=4 求:1/(x-1)+1/(y-1)的最小值为?

【问题来源】 https://www.ixigua.com/7025123539728466469?logTag1c2fd2e305d60e6277ab 之第一题 【问题】 已知:x,y皆大于1,且x2y4 求:1/(x-1)1/(y-1)的最小值为? 【解答】 解: 若将(x2y)/41代入目标式&…

学习笔记(linux高级编程)11

进程间通信 》信号通信 应用:异步通信。 中断,, 1~64;32应用编程。 如何响应: Term Default action is to terminate the process. Ign Default action is to ignore the signal. wait Core Default action is …

番外篇 | 斯坦福提出即插即用二阶优化器Sophia :相比Adam实现2倍加速,显著节省大语言模型训练成本

前言:Hello大家好,我是小哥谈。大模型的预训练成本巨大,优化算法的改进可以加快模型的训练时间并减少训练开销。目前大模型的训练优化器基本上都采用Adam及其变体,并且Adam的应用已经有9个年头了,在模型优化方面相当于霸主的地位。但是能否够在优化器方面提高模型预训练效…

医院挂号系统:基于JSP和MySQL的现代化医疗预约平台

开头语:您好,我是专注于医疗系统开发的IT学长。如果您对医院挂号系统感兴趣,欢迎联系我。 开发语言:Java 数据库:MySQL 技术:JSP技术,B/S架构 工具:Eclipse,MyEclips…

中国企业消费管理,驶入“降本”大潮

在足够明晰的成本优化方案之上,能看到除了美团企业版的产品和需求理解能力,更本质的恰在于其最核心的原子能力——即强供应链底座。 这种兼备深度和广度的能力的最终呈现也就是如今美团为企业提供的多元、优质、满足需求的成本考校和计算方案。 作者…

【Python】成功解决TypeError: ‘float‘ object cannot be interpreted as an integer

【Python】成功解决TypeError: ‘float’ object cannot be interpreted as an integer 下滑即可查看博客内容 🌈 欢迎莅临我的个人主页 👈这里是我静心耕耘深度学习领域、真诚分享知识与智慧的小天地!🎇 🎓 博主…

客户端渗透

1.一键可执行程序 2.给程序加壳 3.宏病毒感染文档 4.Android apk 利用 1.一键可执行程序 介绍:我们要进行客户端渗透,我们生成一个可执行程序,也是简单粗暴,MSF建立监听,把它发给受害者,只要受害者点击…

VQ-VAE中如何解决梯度截断(不可导)问题?直通估计、(stop gradient,停止梯度)

(stop gradient,停止梯度)运算 它简称为sg 也就是说,前向传播时,𝑠𝑔里的值不变(sg1);反向传播时,𝑠𝑔按值为0求导(sg0),即此次计算无…

Qt Q_ASSERT详解

Q_ASSERT详解 引言一、基本用法二、深入了解三、参考链接 引言 Q_ASSERT是 Qt 框架中的一个宏,用于在调试时检查某个条件是否为真。它是程序调试中的一个重要工具,有助于开发者在开发过程中及时发现并修复潜在的错误。 一、基本用法 只在使用 Qt 的 D…