Introduction
好久不见。上一篇博客已经是9月份了,写到一半就进入了非常忙碌的模式,没想到一忙就忙到了现在。加上之前的CI/CD流水线需要从Travis迁移,手动发布的模式实在太麻烦,所以就等到现在才恢复更新。
人类之所以聪明是因为会利用工具,工具使人懒惰。是的,没有了CI/CD流水线,以前手动发布博客的模式实在太过繁琐,写完博客还要敲几行命令等几分钟才能发布完成,实在令人难受。今天就来和大家分享一下使用Github Actions部署CI/CD流水线,实现hexo博客的自动发布。
Background
还是简单提一下background,之前我是一直采用Travis的CI/CD流水线进行博客的自动发布,配置好之后,我发布博客的步骤实际上就是:
- 写好文章;
- 直接push到hexo分支(或者直接上github的网页中upload file,这个功能非常方便,有时外出带了其他笔记本的话,就可以直接利用网页上传文件)
然而享受了Travis将近两年的免费服务后,Travis宣布把免费的功能取消,如果需要继续使用就要付费。那我肯定果断(也没有很果断,等了半年)把流水线迁走。下一站就是Github Actions,自从被微软收购后,Github推出的一些功能其实口碑都不错,Github Actions就是其中一个,它发展的很快,相关的插件也越来越多,总之满足一个自动发布博客的需求肯定是绰绰有余的。关键是发布的速度还非常快,比起Travis快了将近一倍。(吹这么多希望微软给我发offer)
Steps
言归正传,我们来开始配置流水线。
- 首先需要确认你已经给你的Github仓库配置了Deploy Key(如果之前已经有使用Travis的话,这一步可以忽略)。如果没有配置,打开仓库的Settings,找到Deploy keys,把本地ssh的公钥(pub后缀)的内容加进去; 
- 配置环境变量。因为我们需要在运行Github Actions的机器上推送代码,所以我们要把本地的私钥通过环境变量的方式传过去,这样该机器才有权限。同样在仓库的Settings,找到Secrets,把本地ssh的私钥的内容加进去,命名为 - GITHUB_KEY(命名可以随意,但是后面要用到);
- 在仓库的根目录创建文件夹 - .github/workflows,在里面创建一个- ci.yml文件。有关什么是Github Actions和这些文件的位置及命名要求,可以参考What is Github Actions,这里focus在配置上;
- 然后编写 - ci.yml文件,这里我把我自己的share出来作为参考:- 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
 39
 40
 41
 42
 43- name: Hexo CI/CD 
 # trigger when push event happens on hexo branch
 on:
 push:
 branches:
 - hexo
 env:
 GIT_USER: leungyukshing
 GIT_EMAIL: jacky14.liang@gmail.com
 jobs: # workflow
 build-and-deploy:
 runs-on: ubuntu-latest # run in virtual machine environment
 steps:
 - name: Checkout # step 1
 uses: actions/checkout@v2 # format: username/repoName
 - name: Use Node.js@14.x
 uses: actions/setup-node@v1 # install nodejs
 with:
 node-version: 14.x
 - name: Install depndencies
 run: npm install
 - name: Set up environment
 env: # set env
 GITHUB_TOKEN: ${{ secrets.ACCESS_TOKEN }} # token
 run: |
 sudo timedatectl set-timezone "America/New_York"
 mkdir -p ~/.ssh
 echo "$GITHUB_TOKEN" > ~/.ssh/id_rsa
 chmod 600 ~/.ssh/id_rsa
 ssh-keyscan github.com >> ~/.ssh/known_hosts
 ssh-keyscan e.coding.net >> ~/.ssh/known_hosts
 git config --global user.name $GIT_USER
 git config --global user.email $GIT_EMAIL
 - name: Deploy # step 3 (deploy github and coding)
 run: npx hexo deploy -g
- 这里我监听的是 - hexo分支,这个是我博客源码的分支。还需要注意修改里面的- GIT_USER和- GIT_EMAIL。然后还有一点就是,因为我使用了coding.net作为博客的镜像仓库,所以这里我在38行需要把它的域名加到- known_hosts文件,如果不需要做镜像备份,则可以删掉这一行。
- 然后把这个文件推上仓库就可以了。然后可以在仓库中跳转到Actions,查看流水线工作情况。  - 可以看到这里的耗时大概就是1分半钟到2分钟,之前在Travis上的平均耗时大概是3-4分钟,确实是快了不少! 
Summary
部署完之后发布博客又回到了懒人模式,最近开始放假也会更加频繁的更新,希望这篇博客能够帮助到你,谢谢!
 
        