首发于JerryC

travisci/GitHub Actions部署GitHub Pages和Coding Pages

对于静态博客来说,Hexo是一款很受欢迎的博客生成器。其拥有数百的主题和插件,方便我们部署和自定义博客内容。然而,很多生成器都有一个跟明显的缺点,当网站的文章越来越多时,生成所需要的时间也越来越久。如果电脑效能差的话,部署时间则会更加的久。

为了解决这个问题,采用自动化部署是一个绝佳的选择。现如今提供自动化部署的平台越来越多。像Travis CI,还有最近发布的GitHub Actions。我们只需要把Hexo的目录推送到GitHub去,相关平台监测到对应的Repositories发布变化,就会自动去执行编译,并把编译好的内容发布到博客Repositories去。

Travis CI

Travis CI有提供免费版和企业版,以下的教程是在免费版上操作。

免费版不支持私人仓库(Private Repositories)部署

注册



点击Sign Up会自动跳到Github上去授权登录。只需授权登录就行,完成后会进入操作界面。





设置仓库Repositories

接下来要选择哪一个仓库Repositories需要被监测。

点击Activate all repositories using GitHub Apps

然后点击Only select repositories,选择你想要的仓库(hexo目录的仓库),点击Approve & Install



选择你想要的仓库,点击settings



settings界面,找到Environment Variables。为了保护我们的隐私,一些重要的资料写在这里,然后通过${xxx}进行引用。



创建travis 配置文件



在hexo根目录创建一个travis 配置档案。名称一定要是.travis.yml

把以下内容复制到里面去

language: node_js
node_js: stable

sudo: required

# Travis-CI Caching
cache:
  directories:
    - node_modules

# S: Build Lifecycle
install:
  - npm install

script:
  - hexo clean && hexo g && hexo douban && gulp
  - cd ./public
  - git init
  - git config user.name "${GIT_NAME}"
  - git config user.email "${GIT_EMAIL}"
  - git add .
  - git commit -m "Update"
  - git push --force --quiet "https://${GH_TOKEN}@${GH_REF}" master:master
  - git push --force --quiet "https://${CDT_TOKEN}@${CDT_REF}" master:master

# after_script:

branches:
  only:
    - hexo
  • cache是缓存node_modules文件夹,这样就可以不用每次部署都要去下载各种依赖,只有存在变更时,才去下载。
  • branches是指需要监测的branch,看你的hexo目录放在哪里,需要自己去修改
  • GIT_NAME,GIT_EMAIL,GH_TOKEN这些是引入你在Environment Variables所配置的内容。
- git push --force --quiet "https://${GH_TOKEN}@${GH_REF}" master:master
- git push --force --quiet "https://${CDT_TOKEN}@${CDT_REF}" master:master

第一个是推送到GitHub去,例如jerryc127.github.io仓库。
GH_TOKEN需要自己去GitHub setting里申请
GH_REF是指仓库的git地址,例如:github.com/jerryc127/jerryc127.github.io.git



第二个是推送到Coding.me仓库去。

CDT_TOKEN需要到仓库的项目设置,然后在开发者选项项目令牌申请。

CDT_TOKEN的内容为用户名:密码

如果是推送到gh-pages,需要把master:master更改为master:gh-pages





运行

现在你只要把Hexo的目录推送到GitHub去,Travis会自动监测到变化,然后进行编译。(编译完成后会收到邮件通知是否编译成功)

GitHub Actions

GitHub Actions是GitHub于2019年底推出的自动化流程工具,它的功能很强大。而我们只需要用到它的构建。由于是GitHub自家的工具,我们无需再额外的注册账号,GitHub Actions也集成在了GitHub界面上,我们只需点击Actions进行创建。

创建Actions

在Hexo目录的仓库,点击Actions Tab,然后点击Set up a workflow yourself







把以下代码复制到代码框去

name: 自动部署 Hexo

on:
  push:
    branches:
      - master

jobs:
  build:
    runs-on: ubuntu-latest
    strategy:
      matrix:
        node-version: [10.x]

    steps:
      - name: 开始运行
        uses: actions/checkout@v1

      - name: 设置 Node.js ${{ matrix.node-version }}
        uses: actions/setup-node@v1
        with:
          node-version: ${{ matrix.node-version }}

      - name: 安装 Hexo CI
        run: |
          export TZ='Asia/Shanghai'
          npm install hexo-cli -g

      - name: 缓存
        uses: actions/cache@v1
        id: cache-dependencies
        with:
          path: node_modules
          key: ${{runner.OS}}-${{hashFiles('**/package-lock.json')}}

      - name: 安装插件
        if: steps.cache-dependencies.outputs.cache-hit != 'true'
        run: |
          npm install

      - name: 部署博客
        run: |
          hexo clean && hexo g && hexo douban && gulp
          cd ./public
          git init
          git config user.name "${{secrets.GIT_NAME}}"
          git config user.email "${{secrets.GIT_EMAIL}}"
          git add .
          git commit -m "Update"
          git push --force --quiet "https://${{secrets.GH_TOKEN}}@${{secrets.GH_REF}}" master:master
          git push --force --quiet "https://${{secrets.CD_TOKEN}}@${{secrets.CD_REF}}" master:master
  • on是要被监测的branch,等同Travis-ci的branches
    其它的都跟Travis-ci的配置差不多,这里就不再仔细介绍。

设置隐私资料

为了不让重要的资料暴露在公众,需要把这些资料设置到secrets里,然后通过${{secrets.xxxx}}引用。

Settings里的Secrets里设置



运行

现在你只要把Hexo的目录推送到GitHub去,GitHub Actions会自动监测到变化,然后进行编译。

参考

  1. Github Actions 自动部署 Hexo 脚本
  2. travis.demo by Molunerfinn

编辑于 01-20

文章被以下专栏收录