Github+Jenkins实现自动化编译

2019年09月23日应用

基于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 版本,由于起初安装没有截图,图片均来自于参考地址,其实安装配置的界面相差不大。

此部分参考了:https://www.jianshu.com/p/845f267aec52

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

  1. 在构建项目的过程中,突然访问不了8080端口了,后通过重启解决。

    service jenkins restart
  2. 构建失败,提示 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比的, 毕竟人家的生态那么好。不过对于我这种,用后台闲麻烦,又喜欢折腾前端的人来说,这是很不错的选择。