给Hexo博客配置Azure CI持续集成实现自动部署

给Hexo博客配置Azure CI持续集成实现自动部署

封面来源: 10th Magnitude

这是篇瞎球折腾笔记。
CI是个好东西,前段时间看了一本关于DevOps的书,对持续集成有了一定了解。
Hexo博客本身拥有很简洁的编译、部署过程:

1
2
hexo g
hexo d

但是简单的基础是前戏太多:
配置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配置不兼容,参考资料较少

  1. 用微软账户登录 https://dev.azure.com/

  2. 根据向导,新建一个组织(organization),在组织中新建一个项目(project)

  3. 根据向导,授权GitHub(或其他源代码管理平台)访问自己的Hexo项目

  4. 在项目设置(Project settings - Azure DevOps services)中,启用Pipelines

  5. 进入Pipelines,新建Build

  6. 有一些模板,但是没有关于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
    38
    trigger:
    - 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...'
  7. 保存到新分支并选择创建PR以便测试

  8. 右上角菜单中点击Triggers,如果有黄色提示GitHub web hook配置不正确,可以在这里选择自动修复

  9. 由于我的Hexo带有Icarus主题子模块,所以还需要进入YAML - Get sources下勾选“Checkout submodules”

  10. 然后点击左侧Pipelines - Library - Secure files上传私钥文件“id_rsa”

  11. 点击进入刚上传的私钥,选中“Authorize for use in all pipelines”以允许Build任务读取

  12. 尝试运行build

  13. 尝试push代码触发build

国外CI runner依赖下载速度甩了腾讯几条街,1分钟一次build,免费时间一个月是用不完的。

如果你遇到了部署失败,可以访问 Azure DevOps的帮助文档 中寻找答案,也欢迎粘贴log讨论!


封面来源, Cover source: https://www.10thmagnitude.com/azure-devops-whats-in-a-rename/

Comments

Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×