利用 GitHub Action 发布文章到阿里云 OSS

之前博客中 ,将 Hexo 源文件存放在 GitHub ,生成的静态站点手动上传到阿里云 OSS。每次发博客步骤太繁琐,所以尝试利用 GitHub 持续集成功能实现自动发布。

GitHub Action 介绍

GitHub Action 是一种持续集成服务,可以在我们对 Repo 进行 push、pull 等操作时,通过 workflow 的形式,自动执行一些任务。
一些基本概念和操作,可以参考官方文档或者阮一峰写的入门教程

GitHub 中配置 OSS 授权信息

Action 通过 AccessKey 访问及操作 OSS,为了能让 Action 自动部署,我们需要创建 AccessKey 并将其配置到 Github 中

阿里云创建 AccessKey

参考获取AccessKey文档,创建 AccessKey 并进行授权管理对象存储服务(OSS)

使用 GitHub Secrets

Action 对应的 workflow 会以文件形式存放在 Repo 的 .github 中,虽然我们的 Repo 是 Private 的,不过为了安全起见,AccessKey 不能明文存存储在 workflow 中。这时候,就需要配合 GitHub 的 Secrets 功能了。
直接通过 Repo 的 Settings -> Secrets -> Action -> New repository secrets 创建四个 KV 项,用于存储 OSS 相关信息。这些信息,我们将在后续的 workflow 源码中会用到。

创建发布到 OSS 的 Action

新建 Action

在 Repo 中,通过 Actions -> New workflow -> set up a workflow yourself 即可进入工作流编辑界面。

实现 push 时发送到阿里云

直接上 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
# workflow 名称,执行时的标题
name: Deploy

# 触发条件
on:
push:
branches: [ "main" ]

# 不清楚干嘛的,保留着
workflow_dispatch:

# 真正的任务
jobs:
# job 名称
build:
# 运行环境
runs-on: ubuntu-latest

# 步骤
# 1. checkout repo
steps:
- name: Checkout Repository
uses: actions/checkout@v3

# 2. 配置 node
- name: Setup Node
uses: actions/setup-node@v3
with:
node-version: 18

# 3. hexo 一条龙
- name: Setup Hexo Dependencies
run: |
npm install
npm install -g hexo-cli
hexo clean
hexo generate

# 4. OSS 脚本相关配置
- name: Setup Aliyun OSS
uses: manyuanrong/setup-ossutil@master
with:
endpoint: ${{ secrets.ALI_ENDPOINT }}
access-key-id: ${{ secrets.ALI_ACCESSKEYID }}
access-key-secret: ${{ secrets.ALI_ACCESSKEYSECRET }}

# 5. 执行 OSS 脚本,ossutil 用法 `https://help.aliyun.com/document_detail/50452.html`
- name: Upload to Aliyun OSS
run: ossutil sync -f public/ oss://${{ secrets.ALI_BUCKET }} --delete

下次 Push 代码时,即可在 Action 中查看任务执行情况

附注

编写 Action 时遇到的问题

  1. 每个 Job 中,只能有一个 - 前缀,如下是一种错误写法
1
2
3
4
- name: Setup Node
- uses: actions/setup-node@v3
with:
node-version: 18
Author: HenryMe
Link: https://henryme.com/2022/06/hexo-cd-with-github-action-efea902f4b8a.html
Copyright Notice: All articles in this blog are licensed under CC BY-NC-SA 4.0 unless stating additionally.