林中两路分,一路人迹稀。我独选此路,境遇乃相异。

0%

使用Github的Actions自动部署Pages


  使用Github的Pages来记录类博客内容,最开始是直接存手工敲命令部署到指定仓库,过程繁琐。后来用了Travis CI,发现挺好用,当时Github的Actions功能刚刚出来,稍微看了下,觉得比较复杂,就没有继续下去。这次因为把Github重新整理了下,发现Travis的org域名停用了系统,原来的配置都没有了,索性重新从Github的Action开始研究,把自动化做起来。

  下面就记录下,我本次操作的步骤,如何调用Github 的Actions来完成持续集成服务。

GitHub Actions介绍

  GitHub Actions 的工作原理:当我们提前设置好需要自动化执行的任务脚本(.github/workflows 下的·.yml 文件)后,GitHub Actions 监控当前仓库的某一个操作(如:push),一旦有此操作,就会分配一个虚拟主机来自动化执行这些任务。
  我们设置的任务即为 Action ,它存放在项目根目录的 .github/workflows 文件下,后缀为 .yml。一个 Action 相当于是一个工作流 workflow,一个工作流则可以有多个任务 job,而每个任务又能分成几个步骤step。任务、步骤会依次执行。
  Github的相关资料可参考:
GitHub Actions 官网:https://github.com/features/actions

Github 博客仓库

  首先,新建一个Hexo的源码仓库blog,一个Pages发布的仓库。Pages的仓库名规定形式:.github.io。我们将实现,blog仓库的内容修改提交后,自动发布hexo g生成的发布文件部署到Pages仓库。

Github配置

1. 创建 Github Personal Access Token

  Personal Access Token用于Actions调用GitHub仓库操作的Hook各种行为需要的会话授权,教程可参考:https://docs.github.com/cn/github/authenticating-to-github/keeping-your-account-and-data-secure/creating-a-personal-access-token

2. 创建仓库的Secrets

  Actions在工作流程中使用加密密码,采用Github Personal Access Token来做相关关联,我命名为ACTION_DEPLOY_KEY,后面编写脚本的时候会用到。文档可参考:https://docs.github.com/cn/actions/reference/encrypted-secrets

创建workflow脚本

  在Github的项目中选择Action,系统提供了很多工作流的模板,可以根据模板来做修改。在这里,我直接在项目的代码中创建,不使用系统提供的功能。我们需要在项目根目录下创建一个文件夹.github/workflows,并在文件夹下创建一个YAML脚本文件,用于编写任务,文件名由自定义即可,Action是根据扩展名来识别的。我这里命名为main.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
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
name: Deploy my blog
# 触发条件:在 push 到 blog仓库后触发
on:
push:
branches:
- master

env:
TZ: Asia/Shanghai

jobs:
build-and-deploy:
name: Hexo blog build & deploy
runs-on: ubuntu-latest # 使用最新的 Ubuntu 系统作为编译部署的环境

steps:
- name: 1. git checkout # 将仓库内master分支的内容下载到工作目录
uses: actions/checkout@v2 # 脚本来自 https://github.com/actions/checkout

- name: 2. setup nodejs,Use Node.js 13.x # 配置Node环境
uses: actions/setup-node@v2 # 配置脚本来自 https://github.com/actions/setup-node
with:
node-version: "13.x"

- name: 3.Cache node modules
# 设置包缓存目录,避免每次下载
uses: actions/cache@v1
with:
path: ~/.npm
key: ${{ runner.os }}-node-${{ hashFiles('**/package-lock.json') }}

- name: 4. install hexo
# 下载 hexo-cli 脚手架及相关安装包
run: |
npm install hexo-cli -g
npm install hexo-generator-search --save -g
npm i --save hexo-wordcount -g
npm install hexo-generator-feed -g
npm install

- name: 5. hexo generate public files...
run: |
hexo clean
hexo g

# 提交到我们的存放静态资源的仓库.
- name: Deploy hexo blog
env:
# Github 仓库
GITHUB_REPO: github.com/myblog/myblog.github.io

# 将编译后的博客文件推送到指定仓库
run: |
cd ./public && git init && git add .
git config user.name "myblog"
git config user.email "myblog@qq.com"
git add .
git commit -m "GitHub Actions Auto Builder at $(date +'%Y-%m-%d %H:%M:%S')"
git push --force --quiet "https://${{ secrets.ACTION_DEPLOY_KEY }}@$GITHUB_REPO" master:master

workflow的文档可参考:https://docs.github.com/cn/actions/reference/workflow-syntax-for-github-actions

部署

  最后,我们将源码推送到blog仓库,Github Actions会自动部署Pages项目了。

-------------本文结束 感谢您的阅读-------------
觉得好,点这里 ^_^