阅读此篇文章之前,需具备hexo本地环境的搭建,会用git push到Github Pages上使得静态网站可以访问这样的能力。

同样,《Coding持续集成自动部署Hexo博客》还可以试试用Coding-Ci来做这个事情。

Github Actions做的事情,就是替代你之前在本地构建Hexo环境,并且每次更新还要git推送一次,而现在这一切都放到服务器端来处理,这使得你随时随地都可以发表博客文章,只要有设备能链接上Github即可。

而之前你不但要有链接的上的设备,还要有hexo的运行环境,如果在别的电脑来坐这个事情,那么过程必将是繁琐的,而且就算同步也不好使,因没法在移动端实现吧?

下面开始着手 Github Actions的实现,自己也折腾了许久才得以完成。

安装hexo必要插件

Github Actions用的是deploy 方式,得先在本地安装一下此插件 npm install hexo-deployer-git --save

如果你还有其他的插件,一并安装,这些信息应该会更新到 package.jsonpackage-lock.json 两文件,我之前失败可能是与此相关。如果有gulp这样的插件,可能还要写入部署配置文件中去 deploy.yml

配置_config.yaml

在Hexo项目根目录配置文件 _config.yaml中加入如下代码配置,这个文件不是主题里面的那个,请注意。

deploy:
 type: git
 repo: git@github.com:Github用户名/Github用户名.github.io.git
 branch: master

密钥生成和Github配置

密钥生成

用git命令生成公私秘钥 ssh-keygen -f github-actions-key如果你不知道密钥文件文件生成到哪里,可以用 dir命令回车看看当前目录存在哪些文件,或者 cd /d/ 这样就进入D盘根目录,执行上述命令生成即可,一路回车到底
完事后应该可以看到一个不带后缀名的文件和一个带 .pub 后缀名的文件。

如果你严格执行了我上述命令,那么文件名分别是 github-actions-keygithub-actions-key.pub 通常前者文件大于后者。

Github配置

先去github创建一个Private仓库,同时你已经有公开的github pages仓库,这种仓库一般是 你的github用户名.github.io 命名的,并且这个仓库已经存在问题,使得通过 你的github用户名.github.io可访问。

配置 github-actions-key.pub公钥,登录你的github,在右上角点击你的头像后,点击 Settings–>SSH and GPG keys 把公钥文件的内容粘贴进去。

配置 github-actions-key私钥,找到你的Private仓库,在仓库中点击 Settings->Secrets 把私钥的内容添加进去,此时 Name中要严格填写 HEXO_DEPLOY_PRIVATE_KEY 否则就要修改 deploy.yml 相应代码。

文章中的 –>表示下一步的意思。

Github Actions配置

Github Actions是在你创建的Private仓库中,把hexo源文件传到此仓库,源文件有如下,当然你也可以试试网页版直接上传这些文件和文件夹。

  • scaffolds文件夹
  • source文件夹
  • theme文件夹
  • _config.yml
  • package.json
  • package-lock.json

最后在Private仓库点击 Actions→set up a workflow yourself 对下面的代码做相应修改,粘贴进去,文件名我命名为 deploy.yml然后提交,便会自动开始运行。
下面代码指定了时区,不然可能会导致你用今天的日期写一篇文章后,尽管自动更新了,文章依旧不发表的问题,因为默认的时区比我们这里慢上好几个小时。下面代码还可在这里查看,更易于复制 https://gitee.com/ct2/web/blob/master/github-actions-hexo.md

# workflow name
name: Hexo Github Actions

# master branch on push, auto run
on:
push:
  branches:
    - master

jobs:
build:
  runs-on: ubuntu-latest

  steps:
    # check it to your workflow can access it
    # from: https://github.com/actions/checkout
    - name: Checkout Repository master branch
      uses: actions/checkout@master

    # from: https://github.com/actions/setup-node
    - name: Setup Node.js 10.x
      uses: actions/setup-node@master
      with:
        node-version: "10.x"

    - name: Setup Hexo Dependencies
      run: |
        npm install hexo-cli -g
        npm install

    - name: Setup Deploy Private Key
      env:
        HEXO_DEPLOY_PRIVATE_KEY: ${{ secrets.HEXO_DEPLOY_PRIVATE_KEY }}
      run: |
        sudo timedatectl set-timezone "Asia/Shanghai"
        mkdir -p ~/.ssh/
        echo "$HEXO_DEPLOY_PRIVATE_KEY" > ~/.ssh/id_rsa 
        chmod 600 ~/.ssh/id_rsa
        ssh-keyscan github.com >> ~/.ssh/known_hosts

    - name: Setup Git Infomation
      run: |
        git config --global user.name 'Github用户名' 
        git config --global user.email 'Github注册邮箱'
    - name: Deploy Hexo
      run: |
        hexo clean
        hexo generate 
        hexo deploy