前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >喝杯咖啡,一键部署前端项目

喝杯咖啡,一键部署前端项目

作者头像
悟空聊架构
发布2024-03-22 12:18:29
900
发布2024-03-22 12:18:29
举报

你好,我是悟空。

本文目录如下:

目录

上次我们已经聊过关于部署的两个话题:

  • 1、本地打包 docker 镜像部署到服务器

丝滑的打包部署,一套带走

  • 2、通过 Jenkins 工具 一键部署 Gitlab 上的 Java 代码到服务器。

喝杯咖啡,一键部署完成!(建议收藏)

这次我们要接着上面的话题聊下如何通过 Jenkins 工具一键部署 Gitlab 上前端代码到服务器。

前提条件:该演示案例所用到的前端代码基于 Angular 框架,如果你用的是 Vue 框架,同样适用。

一、前端部署和后端部署差异:

  • 前端只需要把前端工程生成静态文件丢到服务器上即可,而后端不只需要将 jar 包丢到服务器,还需要重启服务。
  • 前端打包需要依赖 nodejs。而且 nodejs 的版本也需要高度适配前端所用的技术框架的版本(如 Angular JS 的版本)。
  • 后端打包需要依赖 Maven。Maven 版本不需要和 JDK 的版本高度适配。

二、前端部署依赖

在编译打包的时候,我们需要安装指定的 NodeJS 版本和 NPM 版本。

2.1 NodeJS

Node.js是一个基于Chrome V8引擎的JavaScript运行环境,它使得JavaScript能够在服务端运行。Node.js是对Google V8引擎进行的封装,是服务器端的JavaScript解释器,极大地扩展了JavaScript的使用范围。如今,JavaScript不仅用于创建Web应用程序,还用于桌面应用程序、移动应用程序等各个领域。

我部署的 Jenkins 的在本机部署的,Windows 版本。因用 Jenkins 的 NodeJS 插件打包失败,所以在本地安装了 NodeJS,对应的版本为 18.10。NodeJS 的安装包可以到 NodeJS 的官网上获取。安装包地址如下:

代码语言:javascript
复制
https://nodejs.org/dist/

可以通过 node -v 命令查看 node 版本。

查看 node 版本

如果你想使用 Jenkins 的 NodeJS 插件,可以在这下载安装。

NodeJS 插件

2.2 NPM

npm 则是Node.js的包管理器,全称为Node Package Manager。npm则提供了管理JavaScript代码库和依赖的工具。

在打包前端项目时,需要通过 npm run build 打包。

npm run build 是一个npm命令,用于在项目中运行预定义的构建脚本。当在项目的根目录中执行这个命令时,npm会查找package.json文件中的"scripts"字段,并执行对应的构建命令。

安装 nodejs 时会自动安装 NPM。通过命令 npm -v 可以查看 npm 安装的版本。

查看 npm 安装的版本

三、Jenkins 前端部署思路

  • 通过 Jenkins 从 Git 仓库获取代码
  • 通过命令删除 Jenkins 工作空间的前端编译文件
  • 通过 npm 安装依赖
  • 通过 npm run build 编译打包前端项目
  • 通过压缩命令将编译好的目录压缩成一个文件 tar.gz
  • 通过 Jenkins ssh 插件将压缩包文件 tar.gz 拷贝到 linux 服务器
  • 通过文件操作命令将之前的前端项目备份
  • 通过解压命令将编译的压缩包解压到指定目录

四、配置任务

4.1 配置拉取的代码仓库

  • 仓库 URL
  • 用户名和密码

Jenkins 会从 Git 仓库拉取代码到本地工作空间,如下图所示:

Jenkins 会从 Git 仓库拉取代码到本地工作空间

4.2 删除 Jenkins 工作空间的编译文件

通过添加 Execute Windows batch command 配置来删除 Jenkins 工作空间的编译文件以及压缩包文件

删除 Jenkins 工作空间的编译文件

代码语言:javascript
复制
del /q/a/f "%workspace%\dist\*.*"
del /q/a/f "%workspace%\dist.tar.gz"

4.3 编译项目

通过添加 Execute Windows batch command 配置来执行打包命令。因多个 npm 命令放在同一个 command 里面执行会报错,所以拆分成了多个命令。如下所示,拆分成了 3 个命令。

执行上面的 npm 命令后,会在 Jenkins 工作空间生成对应的 node_modules 目录和编译文件,如下图所示:

4.4 压缩前端编译文件

将前端编译的 dist 目录压缩成 dist.tar.gz 包

4.5 拷贝和解压编译文件

4.5.1 安装插件

拷贝安装包需要用到一个插件:Publish Over SSH。

Dashboard>Manage Jenkins->插件管理->Avaliable plugins。

下图是已经安装好了这款 SSH 插件的截图。

安装好了这款 SSH 插件的截图

配置这个插件的全局配置:

  • SSH Server Name:远程服务器的名字,后面在配置拷贝包的时候可以根据名字选择拷贝到哪台服务器。
  • Hostname:SSH Server 的 Hostname。
  • Username:SSH Server 登录名和密码或密钥。
  • Remote Directory:指定将文件拷贝到哪个目录。

示例配置如下所示:

远程服务器地址

4.5.2 拷贝编译文件的压缩包

通过 ssh 插件拷贝文件的配置如下图所示:

通过 ssh 插件拷贝文件的配置

  • SSH Server:指定要将文件拷贝到哪个服务器,格式为 <用户名>@<ip 地址>。
  • Transfer Set Source files:jenkins 编译后的 前端项目 地址。通过之前的编译信息我们知道,dist 包地址在如下路径:
代码语言:javascript
复制
C:\ProgramData\Jenkins\.jenkins\workspace\<Jenkins 任务名>\dist.tar.gz
  • Remove prefix:要移除的文件路径前缀。
  • Remte directory:拷贝到哪个路径下,如果之前已经配置过全局的文件夹,则拷贝的文件会放到 <全局文件夹>/之下,如果全局文件夹之下没有这个 Remote directory 目录,则创建一个。这里我们不需要配置,全局配置已经可以满足条件了。
4.5.3 备份和解压服务器上的前端文件

在上传打包好的前端包之前,需要将应用服务器上的前端文件备份。

备份的步骤如下:

  • 在远程服务器创建一个备份目录 bak
  • 在备份目录bak上创建一个以当前时间作为目录名的目录。
  • 将远程服务器的上 前端目录 重命名为原文件名+时间戳的名字。

备份和解压

代码语言:javascript
复制
#备份文件
cd /nfs-data/wukongliaojiagou/web-bak
timestamp=$(date +%Y%m%d%H%M%S)
mkdir ${timestamp}
cd /nfs-data/wukongliaojiagou

mv admin ./web-bak/${timestamp}/admin-${timestamp}
mv front ./web-bak/${timestamp}/front-${timestamp}
mv control ./web-bak/${timestamp}/control-${timestamp}

cd /nfs-data/wukongliaojiagou

# 解压文件
tar -zxvf dist.tar.gz

# 拷贝文件到前端目录
cp -r ./dist/admin admin
cp -r ./dist/front front
cp -r ./dist/control control

exit

4.6 测试执行结果

通过点击 Build Now 按钮执行这个任务,可以看到执行成功,如下所示。

五、总结

本文主要讲解前端项目如何通过 Jenkins 来进行编译,并将编译后的文件拷贝到服务器。

后续会讲解如何通过 Jenkins 流水线以及传参的配置方式来部署项目。

本文参与?腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2024-03-18,如有侵权请联系?cloudcommunity@tencent.com 删除

本文分享自 悟空聊架构 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与?腾讯云自媒体分享计划? ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、前端部署和后端部署差异:
  • 二、前端部署依赖
    • 2.1 NodeJS
      • 2.2 NPM
      • 三、Jenkins 前端部署思路
      • 四、配置任务
        • 4.1 配置拉取的代码仓库
          • 4.2 删除 Jenkins 工作空间的编译文件
            • 4.3 编译项目
              • 4.4 压缩前端编译文件
                • 4.5 拷贝和解压编译文件
                  • 4.5.1 安装插件
                  • 4.5.2 拷贝编译文件的压缩包
                  • 4.5.3 备份和解压服务器上的前端文件
                • 4.6 测试执行结果
                • 五、总结
                相关产品与服务
                容器服务
                腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
                领券
                问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
                http://www.vxiaotou.com