肯定有很多人发现自己的仓库里多出来了一个 Actions
选项。 没错这就是 Github Actions.
Github Actions
Github Actions 是 Github 自家的持续集成服务。用户可以直接从GitHub构建,测试和部署代码,轻松实现所有软件工作流程的自动化。
Github Actions 采用对开源仓库免费,对私有仓库按量收费模式。
下图是他的收费标准:
自从 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/checkout@v1
- name: Use Node.js ${{ matrix.node-version }}
uses: actions/setup-node@v1
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/checkout@v1:第一步通常是使用
actions/checkout
Action 将仓库下载到工作目录。 - name: Use Node.js ${{ matrix.node-version }}:配置 node 环境,可以通过 matrix 变量查看当前 node 版本。
- run:执行命令(如果需要执行多个命令可以使用案例中的写法)。
- env:设置环境变量(注:步骤之间不会保留环境变量的更改)。
- uses: actions/checkout@v1:第一步通常是使用
详细文档参考: 这里
Hugo 项目发布到 Github Pages
Github Actions 中最重要的概念就是 actions。用户可以通过编写自定义代码来创建 actions,Github 还提供一个 actions市场。
本例中我们使用 peaceiris/actions-hugo 这一 action。