思量。能几许,忧愁风雨,一半相妨。又何须抵死,说短论长。
幸对清风皓月,苔茵展、云幕高张。江南好,千钟美酒,一曲满庭芳。
——《满庭芳》宋/苏轼
GitHub Pages服务对与每一个用户开放username.github.io
的域名解析和托管,如果你是普通用户,gh-page服务将仅对公有仓库开放,将仓库转为私有后gh-page停止解析和更新;对于学生Pro和付费Pro及以上等级用户,gh-page服务将同时对公有和私有仓库提供服务,然而Travis CI仅对公有仓库免费使用。
综上,本文面向于想使用GitHub Pages服务应用于私有仓库的大家伙。
P.S. 把托管gh-page的仓库私有化可以减少隐私泄露。但,所有(部署分支的)文件仍然可以被爬取/扫描。
前言
之前一直用最简洁直白的GitHub Pages
+Jekyll
进行部落格的书写(反正没有关注度不是嘛)。
近期因为疾控问题在家思思发抖,但学习和工作不能停,就干些一直以来没时间做/没接触的事情。
- 把gh-pages仓库私有
- 使用Hexo替代Jekyll
- 使用Github Action实现自动部署
使用ssh-keygen生成秘钥对实现部署
1 | set up private key for deploy |
使用github personal access token实现部署
类似于 Google 两步验证中的备用验证码,不过google token是单次生成(可见/查询)使用后销毁,github personal token是单次生成销毁(不可见)多次使用。
依次进入 Settings
>> Developer settings
>> Personal access tokens
,点击 Generate new token
。
部署部落格仅需要对repo的读写权限。此页面关闭之后 token 将不可见(快记下来!!)。
设置仓库
因为gh-pages服务默认部署的分支是master,所以有如下两种常见的仓库设置方法:
- 双仓库:仓库A用于存储hexo源文件,仓库B(xxx.github.io)用于hexo生成文件的部署,push A触发GitHub Action更新部署仓库B
- 单仓库:source分支用于存储hexo源文件,master分支用于hexo生成文件的部署,push source触发GitHub Action更新master并部署gh-pages
这里我采用的是单仓库双分支的设置,注意不要手贱merge了就好,不然还要花时间(action刷新master之后history会消失)。
上一步生成的 token 我们不能以明文形式存放,所以要设置为仓库的 Secrets,这样就可用 Secrets 隐式引用 token。依次进入(仓库的)setting
>> Secrets
>> Add a new secret
,名称填 GITHUB_ACCESS_TOKEN
,内容填刚刚的token。
配置 GitHub Action
修改 Hexo 的 _config.yml,将下面 id 和 仓库名修改为自己的。
1 | deploy: |
在 Hexo 根目录下新建 .github/workflows/blogci.yml
,内容如下,将 git 的信息修改为自己的:
1 | name: BlogCI |
最后也可以采用另一种写法(使用局部安装避免npm安装依赖出错):
1 | - name: Hexo |
保存后推送到 GitHub,再进入 Actions 会发现 BlogCI 已经在工作。
价格
目前GitHub Action采用免费时长的营销策略:
- 对于普通用户每个月可以免费使用2000分钟
- 对于Pro用户每个月免费使用3000分钟
据我统计一般成功的推送action执行时间在40~60s之间,执行时间较长的(3~5min)一般都是出错了 :(
按这个时间进行估算,用户在action上无需额外消费 :)
Reference
- gh-pages服务 https://pages.github.com/
- Jekyll部落格框架 https://jekyllrb.com/
- Google备用验证码 https://support.google.com/accounts/answer/1187538
- 参考的Blog 有改进和勘误 https://rook1e.com/p/6.html
- Hexo中文文档 https://hexo.io/zh-cn/docs/