hexo jenkins自动部署博客

前面介绍了如何使用jenkins来部署博客,很是方便,写完博客-》提交github-》登录jenkins-》点击发布。但是我们能不能再省事一点呢?我写好后提交代码可以让博客自动发布呢?

jenkins作为一个持续集成的工具,自然是提供了丰富的功能实现我们的想法,我们采用webhook的方式,无论你在哪里,当有提交代码到github的时候,github会发送个请求到jenkins,然后jenkins接受这个请求开始构建我们的项目。我们一步步来。

github webhook配置

在配置项目的webhook之前,我们先添加一个用户访问的token(personal access token)。在github主页Settings -> Developer settings
developer setting
然后点击Personal access tokens -> Generate new token
personal access token
如图,填写title,勾选repoadmin:repo_hook权限,创建好后会出现一个token,这个token只展示一次,所以需要备份好,留着我们在jenkins里面配置用。

然后我们去github项目里面配置webhook,[项目仓库地址] -> Settings -> Webhooks -> Add webhook
github webhook
如图,填写对应的jenkins的访问路径+github-webhook/,注意这里的斜杠/不可少。保存后,webhook添加成功。

ok,我们github这边的配置就完了,再去看jenkins那边的配置。

jenkins 配置

首先我们需要使用前面在github上添加的personal access token来给jenkins添加github server
点击左侧系统管理,然后点击中间系统设置
系统设置
找到github:
github server
点击jenkins后,复制我们的personal access token填写到表单里面:
git hub server
保存后,在系统设置里面的github选择我们添加好的令牌:
github server
然后进入项目的配置页面,配置项目的自动构建:
auto build
保存,我们的配置就完毕了。

验证是否自动构建

接下来我们去编辑器里面编辑项目的文件,然后提交,push到github,再回到jenkins的项目页面:
webhook log
如图,可以看到webhook的log日志,确实是自动发布了的。

那么接着问题来了,我写博客并不是一下子写完的,有时候没写完,放在草稿里面,这时候也要提交的,但这种提交并不需要发布hexo,但目前来看每次提交jenkins都在进行发布,那我们怎么避免呢?

多分支管理

目前我们是只有一个默认的master分支,我们的jenkins项目设置的也是从这个分支上拉取。那么我们需要创建开发分支。日常开发的时候在开发分支上进行,然后需要发布的时候,从开发分支上合并到master分支,合并之后会自动触发webhook然后通知jenkins自动构建。

创建开发分支:

1
2
$ git checkout -b dev
$ git push origin dev:dev

上面第一步创建了本地的开发分支dev,第二步将开发分支推送到github。这样我们去github上看,目前是有两个分支:主分支master,开发分支dev

然后我们提交一个记录:

1
2
$ git cm 'test auto deploy'
$ git push origin dev:dev

然后可以在github项目的仓库里面pull request里面点击new pull request:
pull request
然后选择 master < dev:
pull request
最后选择合并:
pull request
这样,合并好之后可以看到jenkins检测到了webhook,会开始自动构建。合并过程也可以不在github里面进行,也可以在命令行里面直接合并分支。完美~


通过上面的这些配置,现在就可以本地提交,然后合并,jenkins自动构建,不用再进服务器手动构建了,省时省力~