前言
刚开始使用 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
dist
:使用 focal 发行版的 Ubuntu 运行
language
:使用 Node.js
node_js
:安装长期支持版本的 Nodejs
cache
:缓存 node_modules
branches
:仅 master 分支会触发工作流
before_install
:设置时区和 Github 用户名/邮箱
install
:使用 yarn 安装依赖
script
:执行 hexo generate
生成静态页面
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,改写后的配置文件如下:
name
:工作流名称,自动触发时会以此作为名称,推送触发会以说明作为名称
on
:仅 push 触发,仅限 master 分支
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:以上方法的缺点是更改文章路径或隐藏时,残留的文件无法自动删除。