肯定有很多人发现自己的仓库里多出来了一个 Actions 选项。 没错这就是 Github Actions.

Github Actions

Github Actions 是 Github 自家的持续集成服务。用户可以直接从GitHub构建,测试和部署代码,轻松实现所有软件工作流程的自动化。

Github Actions 采用对开源仓库免费,对私有仓库按量收费模式。

下图是他的收费标准:

Runtime

自从 Github 被微软爸爸收购后,私有仓库可以免费创建了。虽然开源是主流思想,但私有仓库的需求依然存在。Github Actions 为每一个用户提供每月 2000 分钟的私有仓库CI(持续集成)时间配额。

这里的 2000 分钟是针对用户(或组织),而不是针对仓库。

假设一个 996 的开发者每个月平均工作25天,那么平均每天可以使用1小时20分钟的 Github Actions。如果一个集成项目每次可以在几分钟内跑完,那么一天勉强可以运行十几、二十次的集成测试。但是如果测试需要一两个小时,那么这么点配额肯定是不够用的,这时只能自建了(Github Actions 提供自建服务,有兴趣可以自行查找)。

而接下来的教程中,会演示如何将一个 Hugo 项目自动发布到 Github Pages。

基本概念

目前打开仓库 Github 会自动弹出提示,让你 set up actions。点击后会看到有很多 Actions 选项,我们选择一个 node.js。系统会在根目录下创建地址为 .github/workflows/nodejs.yml 文件。文件内容如下:

name: Node CI

on: [push]

jobs:
  build:

    runs-on: ubuntu-latest

    strategy:
      matrix:
        node-version: [8.x, 10.x, 12.x]

    steps:
    - uses: actions/[email protected]
    - name: Use Node.js ${{ matrix.node-version }}
      uses: actions/[email protected]
      with:
        node-version: ${{ matrix.node-version }}
    - name: npm install, build, and test
      run: |
        npm ci
        npm run build --if-present
        npm test        
      env:
        CI: true

  • Node CI:是工作流程的名称。
  • on:表示触发条件,条件可以是数组。
  • jobs:表示作业,一个工作流程可以有一个或多个作业。
  • build:是作业id,可以自定义。
  • runs-on:表示工作流程运行在最新的 Ubuntu 系统,目前系统支持 Windows、MaxOS、Ubuntu-16.04 和 Ubuntu-18.04。
  • strategy.matrix:是构建矩阵,案例中会创建一个由三个作业组成的矩阵,分别在三个不同版本的 node 进行作业。
  • steps:表示步骤,一个作业可以有很多步骤,他么以数组形式排列。
    • uses: actions/[email protected]:第一步通常是使用 actions/checkout Action 将仓库下载到工作目录。
    • name: Use Node.js ${{ matrix.node-version }}:配置 node 环境,可以通过 matrix 变量查看当前 node 版本。
    • run:执行命令(如果需要执行多个命令可以使用案例中的写法)。
    • env:设置环境变量(注:步骤之间不会保留环境变量的更改)。

详细文档参考: 这里

Hugo 项目发布到 Github Pages

Github Actions 中最重要的概念就是 actions。用户可以通过编写自定义代码来创建 actions,Github 还提供一个 actions市场

本例中我们使用 peaceiris/actions-hugo 这一 action。