前言

刚开始使用 Github 托管博客时使用 Travis CI 自动部署 Hexo 博客,一个私人仓库用于备份博客源码,另一个公开仓库用于托管静态页面,但是最近将修改的文章推送到私人仓库时没有触发 Travis CI 的工作流,提示 👇

查询 Plan 页面发现自己使用的是免费版,目前的策略是一次性给予用户 10000 可用额度,而我还剩余 3700 可用额度,并且开启了 Consume paid credits for OSS 选项:

搜索了一圈发现也有相同情况的用户,看起来没什么解决办法,除非掏钱(手动狗头)。

之前写的 签到脚本推送脚本 都是用 Github Action 定时运行,而且 Github 还提供了从 Travis CI 迁移到 Github Action 的指南 Migrating from Travis CI to GitHub Actions,个人感觉迁移还是比较容易的。

Travis CI 配置文件

在 Travis-CI 的任务页面点击 View Config 可以看到私人仓库根目录下的 .travis.yml 配置文件,具体写法可以参考 Travis CI 的文档 Building a JavaScript and Node.js project

注意,配置中的 GH_TOKEN 是在 Github 中生成的 Personal access tokens

  1. dist:使用 focal 发行版的 Ubuntu 运行
  2. language:使用 Node.js
  3. node_js:安装长期支持版本的 Nodejs
  4. cache:缓存 node_modules
  5. branches:仅 master 分支会触发工作流
  6. before_install:设置时区和 Github 用户名/邮箱
  7. install:使用 yarn 安装依赖
  8. script:执行 hexo generate 生成静态页面
  9. after_script:将新生成的静态页面提交到公开仓库
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
dist: focal
language: node_js
node_js:
- lts/*
cache:
yarn: true
directories:
- node_modules
branches:
only:
- master
before_install:
- export TZ='Asia/Shanghai'
- git config --global user.name "jckling"
- git config --global user.email "jckling@163.com"
install:
- yarn install
script:
- hexo generate
after_script:
- git clone https://github.com/jckling/jckling.github.io.git
- cp -r ./public/* ./jckling.github.io/
- cd jckling.github.io
- git add .
- git commit -m "Travis-CI Automated Deployment $(date +'%Y-%m-%d %H:%M:%S')"
- git push "https://${GH_TOKEN}@github.com/jckling/jckling.github.io.git" master

迁移到 Github Action

Github Action 的配置文件必须在仓库根目录的 .github/workflows/ 路径下,因此得先在博客根目录创建文件夹。之前把文件夹创建成了 workflow 导致没有触发工作流……

在 workflows 目录下创建并添加配置文件 deploy.yml,改写后的配置文件如下:

  1. name:工作流名称,自动触发时会以此作为名称,推送触发会以说明作为名称
  2. on:仅 push 触发,仅限 master 分支
  3. jobs:作业
    • deploy:作业名称,唯一
      • runs-on:使用最新的 Ubuntu 系统运行,目前是 20.04
      • env:设置环境变量,参见 签到脚本使用方式
      • steps:任务
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
name: Hexo Blog

on:
push:
branches:
- master

jobs:
deploy:
runs-on: ubuntu-latest

env:
GH_TOKEN: ${{ secrets.GH_TOKEN }}

steps:
- uses: actions/checkout@v3
with:
submodules: true

- name: Set up timezone
run: sudo timedatectl set-timezone 'Asia/Shanghai'

- name: Echo current time
run: timedatectl

- name: Set up Node.js
uses: actions/setup-node@v3
with:
node-version: lts/*
cache: 'yarn'

- name: Install Hexo CLI
run: npm install -g hexo-cli

- name: Install dependencies
uses: borales/actions-yarn@v4
with:
cmd: install

- name: Generate pages
run: hexo generate

- name: Git config
run: |
git config --global user.name "jckling"
git config --global user.email "jckling@163.com"
- name: Deploy blog
run: |
git clone https://github.com/jckling/jckling.github.io.git
cp -r ./public/* ./jckling.github.io/
cd jckling.github.io
git add .
git commit -m "Github Action Automated Deployment $(date +'%Y-%m-%d %H:%M:%S')"
git push "https://${GH_TOKEN}@github.com/jckling/jckling.github.io.git" master

删除原先的 Travis CI 配置文件 .travis.yml,目前备份的博客内容如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
├── .gitignore
├── _config.yml
├── _config.butterfly.yml
├── yarn.lock
├── package.json
├── .github
│   └── workflows
│      └── deploy.yml
├── scaffolds
│   ├── draft.md
│   ├── page.md
│   └── post.md
├── source
│   ├── robots.txt
│   ├── _data
│   ├── _posts
│   ├── about
│   ├── categories
│   ├── link
│   ├── music
│   └── tags
└── themes
└── butterfly

测试

Github Action 没有很好的本地测试工具,因此迁移时在博客仓库中新建了一个 test 分支进行测试,注意测试时需要允许测试分支的提交触发构建流程:

1
2
3
4
5
on:
push:
branches:
- master
- test

测试完毕后可以直接合并到主分支,或修改 Github Action 的配置文件后提交到主分支。

结语

本来以为只有私有仓库受到影响,没想到公开仓库也因为额度问题不能使用 Travis CI 了,不得不把 Github Profile 仓库的自动更新脚本也迁移到 Github Action 😒

PS:以上方法的缺点是更改文章路径或隐藏时,残留的文件无法自动删除。