Github+Jenkins实现自动化编译
基于Gatsby的个人博客总算要完成基本功能了,想想就有点小激动,毕竟这是个人自己搭建的博客系统(虽然基本没后端啥事)。不过,剩下一个大问题就出现了。我每次写完md后,需要手动run build下,而且我是挂在自己的vps上的,可能需要重新打包上传,即使在服务器上build的话,我仍得建立次ssh连接。
Jenkins
一想到自动化编译的平台,首先就想到了Jenkins,在简单百度了下Jenkins的使用功能上,就觉得他已经是符合的了。
下面我们看下如何在ubuntu下安装Jenkins,我的是ubuntu 16.04,
安装JDK
sudo apt-get install openjdk-8-jdk
安装Jenkins
wget -q -O - https://pkg.jenkins.io/debian/jenkins-ci.org.key | sudo apt-key add -
echo deb http://pkg.jenkins.io/debian-stable binary/ | sudo tee /etc/apt/sources.list.d/jenkins.list
sudo apt-get update
sudo apt-get install jenkins
这些步骤仅为了获取最新的Jenkins。
启动Jenkins
sudo systemctl start jenkins
我们可以通过这个命令来看下Jenkins的状态,
sudo systemctl status jenkins
防火墙/安全组
不同的产品vps此处的操作不同,比如阿里云的ECS可能需要配置8080开发,像我用的vultr直接就可以访问了。当然,如果安装了防火墙的话,是需要对应打开8080端口的。
配置Jenkins
在浏览器中访问 http://vps的ip:8080 ,出现以下图片,
sudo vi /var/lib/jenkins/secrets/initialAdminPassword
输入正确的pass就可以进行下一步了,
选择第一个默认安装就行了,
当然,主机在国外的话,安装会快很多。等安装后,会让你输入用户名和密码,并配置url(可以跳过后期配置),这儿就不贴图了。
我安装的是 2.176.3 版本,由于起初安装没有截图,图片均来自于参考地址,其实安装配置的界面相差不大。
Github
配置好了Jenkins,下面就需要配置github了。
首先,登录github,右上角进入 setting,
在左下角找到 Developer setting,
再选中 Personal access tokens,
点击 Generate new token 按钮,
点击后应该会让你输入github的密码,照常输入后即可,
输入Note,用来区分这个tokens即可,选中repo和admin:repo_hook,创建即可。
这样,tokens就生成了。
Jenkins与GitHub关联
点击左上角的Manage Jenkins,
点击 Configure System ,找到 Github 这一项,点击添加Github服务器-Github Server,
在新显示的页面上,选择添加Jenkins,
在弹出框中,类型是 Username with password 的,用户名是github账号的用户名,密码是github账号的密码,ID和描述就随便给个啦,(此是用来登录GitHub的)
点击添加,此时账号是添加OK了,虽然此处见不到,一会就会有用的,再次点击添加-Jenkins,类型选择Secret text,
此处secret输入的是刚才在GitHub上生成的token,ID和描述也没有特殊的要求。(此secret是用来获取github push动作的)
确定添加之后,选择刚才添加的那个ID,勾中管理hooks,点击连接测试,出现如图试样,即为成功(limit后的数字不一定是4996)
git配置
点击左上角的Manage Jenkins,
再点击 Global Tool Configuration ,找到Git这栏,
回到SSH工具上,由于Linux上都默认安装了Git,输入 which git,查找git的安装路径,并在前面的 Path to Git executable 中输入,
点击保存即可。
配置构建项目
登录刚才搭建好的Jenkins,点击左上角的新建Item,
在新页面中,输入任务名称,选中第一个 Freestyle project,最后点击确定,
接下来就是该item的配置了,首先选中Github项目,输入对应项目的url(branch的也是输入master分支的url)。
此处可以先配置下丢弃旧的构建,以防硬盘不够的问题。
在源码配置里选择Git, URL配的是clone的git地址,credentials选择刚才你输入的用户名和密码,如果无法连接Github,此处会提示你,
Branches to build 选择你需要构建的分支,
源码库浏览器选择githubweb,URL输入的是项目(master分支)的url地址。
构建触发器选择GitHub hook tigger for GITScm polling,构建环境选择 Use secret text(s) or file(s)。
最后输入实行shell就行了,我这是前端项目仅仅是ci和run build,最后还可以增加移动文件到nginx的路径下,后面能干啥就发挥你的小脑筋吧。
到此基本就OK了,我们可以手动点击工程里的立即构建或这首页table行最后的按钮。
注:搜索时看到说要在github上配置其他信息才能获取到github的push操作,实际操作这样就OK了。当在GitHub上对应的分支项目push代码后,Jenkins会自动进行构建。
其他问题
Jenkins崩溃问题/error spawn ENOMEM
- 在构建项目的过程中,突然访问不了8080端口了,后通过重启解决。
service jenkins restart
- 构建失败,提示 error spawn ENOMEM
处理方法
内存不足的原因,可以增加内存,如果是vps加配置太贵,可以考虑使用虚拟内存缓解下。
Jenkins日志爆满问题
几天跑了十几二十次左右的博客编译,登录Jenkins告诉我空间不足了,ssh上去看了下,df -h,果真没有空间了,最后定位到在 /var/log/jenkins 居然占了19个G....
处理方式
在 系统管理 - 系统日志 - 左侧日志级别下输入 javax.jmdns ,选择off。
多次构建后,到 /var/log 下,并没有找到Jenkins的log文件夹,所以OK。
总结
有了jenkins自动化的编译,加上github的版本控制,可以愉快的玩耍了。我的基于Wordpress的博客也可以迁移了,当然这玩意还是不能与WP比的, 毕竟人家的生态那么好。不过对于我这种,用后台闲麻烦,又喜欢折腾前端的人来说,这是很不错的选择。