IT教程 ·

运用 GitHub Actions 完成 Hexo 博客自动布置

一、Hexo 相干学问点

静态博客简朴,然则宣布博文时稍显贫苦,平常须要下面两步:

hexo clean
hexo g -d // 相当于 hexo g + hexo d

假如考虑到同步源文件,还须要每次变动后,将源文件 push 到指定堆栈:

git push origin master

我们可以将 Hexo 文件分为两类,一类是源文件,即下面这些文件:

.
├── _config.yml
├── package.json
├── scaffolds
├── source
|   ├── _drafts
|   └── _posts
└── themes

一类是 public 文件,即网站文件:

public
├── 2020
├── categories
├── tags
....

宣布博文的这三个操纵代表:

  • hexo clean:删除网站(public)文件
  • hexo g:生成网站(public)文件
  • hexo d:将当地网站(public)文件同步到指定堆栈(如:yourname.github.io)中

我运用一个私有堆栈寄存 Hexo 源文件,在 deppwang/deppwang.github.io 中寄存网站文件。所以每次宣布或许更新博文时,须要运用 push 操纵更新源文件,再实行 hexo cleanhexo g -d 更新博客,比较贫苦。

所以我们愿望能在 push 源文件后,由 CI/CD(延续集成/延续布置)东西为我们实行 hexo cleanhexo g -d 这两个操纵。

运用 GitHub Actions 完成 Hexo 博客自动布置 IT教程 第1张

二、GitHub Actions

CI/CD 东西前有 Travis CI,现有 GitHub Actions,这里运用 GitHub Actions。

GitHub Actions 的事情道理:我们提早设置好须要自动化实行的使命,GitHub Actions 监控当前堆栈的某一个操纵(如:push),一旦有此操纵,就自动化实行这些使命。

所以我们愿望运用 GitHub Actions 后,只须要往源文件堆栈 push 更新源文件,GitHub Actions 监控到 push 操纵时,就自动化实行 hexo cleanhexo g -d 操纵,完成博文宣布。

Action 寄存在项目根目录的 .github/workflows 下,后缀为 .yml。一个 Action 相当于一个事情流 workflow,一个事情流可以有多个使命 job,每一个使命可以分为几步 step。使命、步骤顺次实行。

每一个 Action 是一个自力剧本,所以可以作为代码堆栈。

  • actions/setup-node 就示意 github.com/actions/setup-node 这个 堆栈,代表装置 node.js。Action 为 action.yml

可以经由历程下面这类花样来运用他人写好的 action,@借用了指针的观点:

actions/setup-node@74bc508 # 指向一个 commit
actions/setup-node@v1.0    # 指向一个标签
actions/setup-node@master  # 指向一个分支

关于 GitHub Actions 更多学问,请看 GitHub Actions 入门教程 - 阮一峰。

如今须要完成一个 Action,使其可以实行 hexo cleanhexo g -d 操纵。

运用 GitHub Actions 完成 Hexo 博客自动布置 IT教程 第2张

三、Hexo Action

我是运用的 sma11black 已开发好的 Hexo Action,这个 Action 针对的是寄存 Hexo 源文件和网站文件离开寄存的场景。请先看 教程,以下为教程的补充。

非第一次生成 SSH Key:

ssh-keygen -t rsa -f ~/.ssh/id_rsa_x -C "yourmail@xxx.com"

将生成的 private key 作为 Hexo 源文件堆栈 Settings > Secrets 的 一个名叫 DEPLOY_KEYSecret。注重:须要复制包含 -----BEGIN OPENSSH PRIVATE KEY----------END OPENSSH PRIVATE KEY----- 的全部内容。Secret 相当于一个变量,可以使私有变量不公然。

将生成的 public key 作为网站文件堆栈 Settings > Deploy Keys 的 Deploy Key。Deploy Keys 中的公钥针对于当前堆栈。

为何要用 SSH Key?

  • SSH Key,是一对密匙:公钥+私钥,用于加密当地堆栈和长途堆栈的传输内容。黑白对称加密,可公钥加密、私钥解密;或私钥加密、公钥解密。
  • 运用 GitHub Actions 是借助 GitHub 供应的环境,跟当地环境一样,也须要有私钥。当 GitHub Action 实行 hexo g -d 时,用私钥 DEPLOY_KEY 加密,GitHub 用网站文件堆栈的 Deploy Key 举行考证。

下面是详细的 action.yml:

name: Deploy # workflow name

on:
  [push] # 触发事宜

jobs:
  build: # job1 id
    runs-on: ubuntu-latest # 运转环境为最新版 Ubuntu
    name: A job to deploy blog.
    steps:
    - name: Checkout # step1 猎取源码
      uses: actions/checkout@v1 # 运用 actions/checkout@v1
      with: # 前提
        submodules: true # Checkout private submodules(themes or something else). 当有子模块时切换分支?

    # Caching dependencies to speed up workflows. (GitHub will remove any cache entries that have not been accessed in over 7 days.) 缓存紧缩 node_modules,不必每次下载,运用时解压,可以加速事情流的实行历程,凌驾 7 天没有运用将删除紧缩包。
    - name: Cache node modules # step2
      uses: actions/cache@v1
      id: cache
      with:
        path: node_modules
        key: ${{ runner.os }}-node-${{ hashFiles('**/package-lock.json') }}
        restore-keys: |
          ${{ runner.os }}-node-
    - name: Install Dependencies # step3 name
      if: steps.cache.outputs.cache-hit != 'true' # 假如变量 cache-hit 不等于 true
      run: npm install # 装置 node modules 相干依靠

    # Deploy hexo blog website.
    - name: Deploy # step4
      id: deploy
      uses: sma11black/hexo-action@v1.0.0
      with:
        deploy_key: ${{ secrets.DEPLOY_KEY }}
        user_name: your github username
        user_email: your github useremail

运用 GitHub Actions 完成 Hexo 博客自动布置 IT教程 第3张

四、大概涌现的问题:Deploy 失利

大概涌现以下 3 三种状况:

1、

运用 GitHub Actions 完成 Hexo 博客自动布置 IT教程 第4张

Host key verification failed
fatal: Could not read from remote repository.

涌现此问题请搜检 站点配置文件,看 deploy 是不是存在出 GitHub 之外的堆栈,如 Coding 。

处理体式格局:去除 GitHub 之外的堆栈。

2、

运用 GitHub Actions 完成 Hexo 博客自动布置 IT教程 第5张

Load key "/root/ssh/id_rsa": invalid format
gitagithub.com: Permission denied (publickey)
fatal: Could not read from remote repository.

涌现此问题请搜检 SSH Key,看 Private Key 是不是准确且完全的复制

3、

运用 GitHub Actions 完成 Hexo 博客自动布置 IT教程 第6张

ERROR Local hexo not found in /github/workspace
ERROR Try running: 'npm install hexo --save'

处理体式格局:将 uses: sma11black/hexo-action@v1.0.0 改成 uses: deppwang/hexo-aciton@v1.0.1@v1.0.1entrypoint.shhexo g -d 前添加了敕令 npm install hexo --save

五、总结

关于 Action 详细怎样实行,可连系运转日志明白。

六、参考

  • GitHub Actions 入门教程 - 阮一峰
  • Hexo Action

参与评论