给Hexo博客配置Azure CI持续集成实现自动部署
封面来源: 10th Magnitude
这是篇瞎球折腾笔记。
CI是个好东西,前段时间看了一本关于DevOps的书,对持续集成有了一定了解。
Hexo博客本身拥有很简洁的编译、部署过程:
1 | hexo g |
但是简单的基础是前戏太多:
配置SSH,拉项目,拉子模块,安装NodeJS,安装脚手架,安装依赖……
虽然命令多,但是比较单一,便首先想到了给Hexo写CI脚本。
使用的第一个平台是腾讯云开发者平台(dev.tencent.com),它提供基于Jenkinsfile的持续集成beta版本
优点:免费,全中文界面,配置简单易于上手,支持Jenkins,国内服务速度快
缺点:目前功能较少,不支持上传secret files,无法配置SSH,npm依赖下载缓慢
hexo d
命令是需要调用git push
的,不支持SSH就凉了,过程就不讲了,在经过一番折腾后,我选择放弃了这个平台。
第二选择是自己搭建Jenkins,一番折腾后,发现自己的VPS性能太差,而且Windows版一些配置难以用配置文件完成,要手动配置,考虑到未来迁移起来会困难,逐放弃……
优点:完全免费,网上资料丰富
缺点:配置复杂,需要自行搭建,性能依赖于VPS性能
最后成功地在巨硬(Microsoft)Azure DevOps上配置好了,跟大家分享步骤!
优点:免费(一个月1800分钟、1个并行job),runner质量高,配置方便
缺点:Web hook不稳定,2次遇到GitHub调不通而没有自动触发Trigger的情况,与其他CI配置不兼容,参考资料较少
- 用微软账户登录 https://dev.azure.com/
- 根据向导,新建一个组织(organization),在组织中新建一个项目(project)
- 根据向导,授权GitHub(或其他源代码管理平台)访问自己的Hexo项目
- 在项目设置(Project settings - Azure DevOps services)中,启用Pipelines
- 进入Pipelines,新建Build
- 有一些模板,但是没有关于Hexo的,自己根据过程写一个:
azure-pipelines.yml 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38trigger:
- master # Hexo 原项目分支名
pool:
vmImage: 'Ubuntu-16.04' # 运行环境
steps:
- task: NodeTool@0 # 安装NodeJS
inputs:
versionSpec: '10.x'
displayName: 'Installing Node.js...'
- task: InstallSSHKey@0 # 导入SSH
inputs:
hostName: github.com,52.74.223.119 ssh-rsa AAAAB3... # 对应known_hosts
sshPublicKey: ssh-rsa AAAAB3... # 对应id_rsa.pub
sshKeySecureFile: id_rsa # 对应私钥文件名
displayName: 'Installing SSH...'
# 安装Hexo脚手架,Hexo依赖
- script: |
npm install -g hexo-cli
npm install
displayName: 'Installing dependencies...'
# 清理(可选),生成public静态目录(可选)
- script: |
hexo clean
hexo g
displayName: 'Building...'
# 这里由于我有两个page托管仓库需要部署,所以需要添加 git.dev.tencent.com 的 fingerprint 到 known_hosts
- script: |
ssh-keyscan -t rsa git.dev.tencent.com >> ~/.ssh/known_hosts
git config --global user.name "imaegoo-az"
git config --global user.email "mail1st@qq.com"
hexo d
displayName: 'Deploying...' - 保存到新分支并选择创建PR以便测试
- 右上角菜单中点击Triggers,如果有黄色提示GitHub web hook配置不正确,可以在这里选择自动修复
- 由于我的Hexo带有Icarus主题子模块,所以还需要进入YAML - Get sources下勾选“Checkout submodules”
- 然后点击左侧Pipelines - Library - Secure files上传私钥文件“id_rsa”
- 点击进入刚上传的私钥,选中“Authorize for use in all pipelines”以允许Build任务读取
- 尝试运行build
- 尝试push代码触发build
国外CI runner依赖下载速度甩了腾讯几条街,1分钟一次build,免费时间一个月是用不完的。
如果你遇到了部署失败,可以访问 Azure DevOps的帮助文档 中寻找答案,也欢迎粘贴log讨论!
封面来源, Cover source: https://www.10thmagnitude.com/azure-devops-whats-in-a-rename/
给Hexo博客配置Azure CI持续集成实现自动部署