准备工作
- 服务器(云服务器或者虚拟机装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