前端自动化部署Jenkins + WebHooks

1,031 阅读3分钟

准备工作

  • 服务器(云服务器或者虚拟机装Linux当做服务器也行,我用的是虚拟机。别问,问就是穷)
  • Docker(通过宝塔安装)
  • Gitlab(通过Docker镜像生成,我这里用的是Gitlab仓库,公司里面基本上用的都是这个)
  • 宝塔面板
  • Jenkins(通过Docker镜像生成)
  • Nginx(通过Docker镜像生成)

以上准备工具自己准备,网上都有说怎么安装,这里不过多讲述。

详细步骤

1.配置Jenkins环境

Jenkins环境包括插件安装、添加凭据、系统配置、全局工具配置,这个步骤还是比较繁琐的。

插件安装

所需插件:

  • SSH(用于连接服务器)
  • Publish Over SSH(用于将打包内容通过SSH部署到服务器)
  • Gitlab(将Jenkins和Gitlab进行关联)
  • NodeJS(前端环境需要,后端Java可能需要Maven和jdk等)
  • Localization: Chinese (Simplified)(用于将Jenkins设置为中文页面)

添加凭证

添加凭证是为了在Jenkins中方便使用各种安全验证。这里比较坑,详细的坑点见下面说明。

这里我配置了两个凭证,一个是机器的SSH访问凭证(用户名和密码方式),另外一个是Gitlab仓库的访问凭证(SSH密钥访问方式)。

系统配置

这里的配置我也是根据网友推荐的进行配置,如有其他配置需要,可以自己去网上查找看看。

Jenkins Location

SSH remote hosts

Publish over SSH

全局工具配置

主要用于配置代码编译运行相关的依赖,比如nodejs、Maven、jdk、git等等。

Git installations

NodeJS 安装

2.新建构建任务

源码管理

构建触发器

构建环境

Build Steps

Execute NodeJS script

提供nodejs的依赖安装和打包环境。

执行Shell

这里执行的Shell,就是通过命令告诉Jenkins该怎么装依赖,怎么打包等等。

# 版本信息
# node -v
# npm -v
# pwd

# npm镜像源
npm config get registry
# npm config set registry https://registry.npmmirror.com
# pwd

# 打包
rm -rf node_modules
rm -rf dist
npm install
NODE_OPTIONS=--max-old-space-size=4096 npm run build:prod
Send files or execute commands over SSH

这里告诉Jenkins打包完成以后,通过SSH服务与服务器连接完成后,应该把打包的文件部署到哪里。

最终,前端会部署到以下目录。

3.GItlab创建项目WebHooks

GItlab进入项目,在项目中创建WebHooks。这里有个小坑(看下文),如果是内网需要在GItlab中的项目进行对应的设置,所以你需要相关的权限。

4.构建任务

至此,所有的工作都做完了,我们可以尝试在Jenkins构建任务。

踩坑记录

1.Gitlab新建webHooks的时候网络请求有问题

# gitlab 10.6 版本以后为了安全,默认不允许向本地网络发送webhook请求
Url is blocked: Requests to the local network are not allowed

2.Jenkins无法与Gitlab仓库关联

关联方式

  • Gitlab账号密码
  • Gitlab API Token令牌
  • Gitlab SSH密钥
  • ……

尝试过用 Gitlab账号密码 和 Gitlab API Token令牌 方式都不行,最后用Gitlab SSH密钥方式(将机器生成的公钥提交与Gitlab生成密钥,然后将机器生成的私钥作为Jenkins访问Gitlab方式)。反正,多尝试几种方法,有的方法就是不行很神经。

3.前端打包过程中遇见内存容量不足的问题

构建过程中,访问其他的应用程序比如Gitlab、宝塔出现卡顿现象,机器的内存不足,然后打包过程中也会产生如下截图的报错。

# 打包命令前增加以下内容
NODE_OPTIONS=--max-old-space-size=4096 npm run build:stage