公司的前端构建及部署工做都是人工去作,随着业务扩大,项目迭代速度变快,人员增多,各类问题都暴露出来,本文是对前端自动化工做流进行探索后的一篇经验分享,将经过一个简单案例分享一下基于Jenkins的前端自动化工做流搭建的过程,搭建完这套工做流,咱们只须要在本地发起一个git提交,剩下的单元测试,打包构建,代码部署,邮件提醒等功能所有自动化完成,让持续集成、持续交付、持续部署变得简单易操做,真正解决人工构建部署的诸多问题。html
Jenkins 是一款业界流行的开源持续集成工具,普遍用于项目开发,具备自动化构建、测试和部署等功能。前端
本地项目发起一个git提交,剩下的单元测试,打包构建,代码部署,邮件提醒等所有自动化完成。vue
linux下:ubuntu 14.04中安装Jenkins
windows下:
java
java -jar jenkins.war
便可。至此,基础准备工做已经完成,咱们在服务器上安装了Jenkins并启动,而后进行了初始化配置,创建了一个新任务。接下来咱们开始配置咱们须要的功能。node
首先咱们要实现一个git钩子功能,就是咱们向github/码云等远程仓库push咱们的代码时,jenkins能知道咱们提交了代码,这是自动构建自动部署的前提,钩子的实现原理是在远端仓库上配置一个Jenkins服务器的接口地址,当本地向远端仓库发起push时,远端仓库会向配置的Jenkins服务器的接口地址发起一个带参数的请求,jenkins收到后开始工做。
linux
http://mirror.xmission.com/jenkins/updates/update-center.json
而且点击提交和当即获取。http://<User ID>:<API Token>@<Jenkins IP地址>:端口/generic-webhook-trigger/invoke
userid和api token在jenkins的系统管理-管理用户-admin-设置里,这是个人
gif效果图: webpack
git push触发钩子后,jenkins就要开始工做了,自动化的构建任务能够有不少种,好比说安装升级依赖包,单元测试,e2e测试,压缩静态资源,批量重命名等等,不管是npm script仍是webpack,gulp之类的工做流,你以前在本地能作的,在这里一样能够作。
做为演示,这里只演示三个基本经常使用的工做流程,安装依赖包->单元测试->打包,也就是下面这三个命令。git
npm install
npm run test
npm run build
复制代码
至此,咱们已经搭建了一个简易的构建工做流程,构建完成了,咱们须要自动化部署。github
自动化部署多是咱们最须要的功能了,公司就一台服务器,咱们可使用人工部署的方式,可是若是公司有100台服务器呢,人工部署就有些吃力了,并且一旦线上出了问题,回滚也很麻烦。因此这一节实现一下自动部署的功能。web
Passphrase:密码(key的密码,没设置就是空)
Path to key:key文件(私钥)的路径
Key:将私钥复制到这个框中(path to key和key写一个便可)
SSH Servers的配置:
SSH Server Name:标识的名字(随便你取什么)
Hostname:须要链接ssh的主机名或ip地址(建议ip)
Username:用户名
Remote Directory:远程目录(上面第二步建的testjenkins文件夹的路径)
高级配置:
Use password authentication, or use a different key:勾选这个可使用密码登陆,不想配ssh的能够用这个先试试
Passphrase / Password:密码登陆模式的密码
Port:端口(默认22)
Timeout (ms):超时时间(毫秒)默认300000
复制代码
配置完成后,点击Test Configuration测试一下是否能够链接上,若是成功会返回success,失败会返回报错信息,根据报错信息改正便可。
cd dist&&
tar -zcvf dist.tar.gz *
复制代码
Name:选择一个你配好的ssh服务器
Source files :写你要传输的文件路径
Remove prefix :要去掉的前缀,不写远程服务器的目录结构将和Source files写的一致
Remote directory :写你要部署在远程服务器的那个目录地址下,不写就是SSH Servers配置里默认远程目录
Exec command :传输完了要执行的命令,我这里执行了解压缩和解压缩完成后删除压缩包2个命令
复制代码
Welcome to Your Vue.js App
修改成
Jenkins
后发出一个git push,过一会就会发现咱们的服务器上已经部署好了最新的代码,是否是很6。
至此,咱们的自动化部署也完成了,可是若是过程当中有异常怎么办,或是咱们想知道每次Jenkins运行的日志及运行结果,咱们能够经过配置邮件服务来让Jenkins每次完成任务后通知相关人员。
这里咱们不用E-mail Notification,由于它的邮件服务功能太少,没法自定义邮件内容及自定义触发钩子,并且只能在异常状况下才能发邮件。咱们使用Editable Email Notification这个。
至此,咱们的邮件提醒功能也配置完了。
经过上面这个案例,咱们搭建了一套简单的自动化工做流,只须要在本地发起一个git提交,就能够在云端自动化构建,自动化部署,部署完成或出现异常后自动邮件通知,让持续集成、持续交付、持续部署变得简单易操做,解放了人力构建部署的生产力,也统一了构建环境,真实线上的CI服务配置比这个要复杂,大致流程能够参考下阮一峰老师的这篇文章:
Jenkins还有不少强大的特性,如Pipeline,slave等,插件也很丰富,社区生态也很好,若是公司暂时没有自行搭建CI服务的能力,使用免费开源的Jenkins是很好的选择。另外,若是你的项目是开源项目,也可使用Travis CI作持续集成,这个配置起来比Jenkins简单,能够参考百度EFE的这篇文章:
(文章原创整理,转载请注明出处,若是以为文章对你有帮助,就点个赞吧,谢~)