使用 Coding 持续集成自动化部署 Hexo
Coding 在卖给腾讯之后又表面上独立了,不再集成在腾讯云里面,改版之后开始使用 e.coding.net 域名,从单纯的 git 服务变成了项目管理,默认是以团队形式做项目管理,一个人也是创建团队之后再用,5 人一下团队免费。团队下面可以创建多个项目,每个项目可以有多个 git 仓库。新增功能包括:持续集成、文档管理、项目管理(待办等)、测试管理(用例、评审等)、项目统计等。
Coding Pages 服务免费了,需要实名认证(身份证号码和手机号即可),不过因为某些原因,服务器在国外,速度还可以,支持自定义域名、https 和 h2,折腾一天之后成功实现 push 之后自动编译 hexo 并部署到 Coding Pages,不用腾讯的小鸡部署了。
主要说一下 Jenkins 配置和自动部署:
Jenkins
以前也没用过 Jenkins ,coding 自带了图像化编辑功能,自动把 Jenkinsfile 图形化,互相编辑都可以
Jenkinsfile 如下:
1 | pipeline { |
检出部分
增加了 git submodule init
git submodule update
是因为我的主题使用了来自 github 的 submodule
,最开始 hexo generate
虽然编译成功,但是 html 文件都是空的,因为没有下载主题。
构建部分没什么可说的,略过。
测试部分是因为前面没有下载主题才加上的,就是判断一下生成的文件是否为空。
部署部分
这里有个大坑,搞了一晚上,一般情况下我们是使用 hexo-deployer-git
这个插件来把编译好的文件上传到 git 指定的 branch,既然涉及到 push,就有权限的问题,这个插件支持通过用户名密码、ssh 私钥、github token 的方式认证。
首先我们不能在 Jenkins 中输入用户名密码,也不能把私钥上传,只能通过 token,github token 很简单,直接用就可以了,但是 Coding 的 token 是带有用户名的,间接相当于使用用户名密码上传,所以直接使用这个插件是不行的。
所以我就把代码改了一下,参数增加 token_name
,详见这个 commit ,也向原项目提交 pr 了, 还没 merge 。
所以最后是用了 npm install https://github.com/zhangnew/hexo-deployer-git.git --save
来安装我修改过的插件。使用方式如下:
1 | deploy: |
获取 Token:项目设置 -> 开发者选项 -> 项目令牌, 权限勾选 pull 和 push 就够了。
hexo-deployer-git
文档写的不够详细,本身支持直接在 repo:
后面写 git url 的,但是这样写的话,插件就不会处理 Token 参数,所以建议都用我上面写的这种格式。
其他
不用缓存的话编译非常慢,上面说我的主题依赖 github 的代码库,在 coding 的 Jenkins 里面下载极慢,所以我建议设置缓存功能,勾选缓存项目目录
和 npm
;如果编译有问题可以重置缓存。
触发规则就是 push 到 master 就触发。
然后在 静态网站
(也就是 Pages 服务)里面选 push 到 coding-pages 触发。
如果在老版 coding 里面关联过自定义域名,在新版里面需要给域名添加一个 txt 记录来重新授权。