GitHub Actions 的使用

# 基本概念

  1. workflow (工作流程):持续集成一次运行的过程,就是一个 workflow。
  2. job (任务):一个 workflow 由一个或多个 jobs 构成,含义是一次持续集成的运行,可以完成多个任务。
  3. step(步骤):每个 job 由多个 step 构成,一步步完成。
  4. action (动作):每个 step 可以依次执行一个或多个命令(action)。

# workflow 文件

GitHub Actions 的配置文件叫做 workflow 文件,存放在代码仓库的.github/workflows 目录。
workflow 文件采用 YAML 格式,文件名可以任意取,但是后缀名统一为.yml,比如 foo.yml。
一个库可以有多个 workflow 文件。
GitHub 只要发现.github/workflows 目录里面有.yml 文件,就会自动运行该文件。
workflow 文件的配置字段非常多,详见官方文档。下面是一些基本字段。

# name

工作流的名称。GitHub 在存储库的 “Actions” 显示工作流的名称。如果省略 ,GitHub 将显示相对于存储库根目录的工作流文件路径。

1
name: GitHub Actions Demo

# on

定义运行工作流时的触发事件

# 使用单个事件

例如,具有以下值的工作流将在推送到工作流存储库中的任何分支时运行:on

1
on: push

# 使用多个事件

您可以指定单个事件或多个事件。例如,当推送到存储库中的任何分支或有人分叉存储库时,将运行具有以下值的工作流:on

1
on: [push, fork]

如果指定多个事件,则只需发生其中一个事件即可触发工作流。如果同时发生工作流的多个触发事件,则将触发多个工作流运行。

# jobs.<job_id>.name

工作流运行中要执行的一项或多项任务

1
2
3
4
5
jobs:
task1:
name: The first task to be executed
task2:
name: The second task to execute

上面代码的 jobs 字段包含 task1、task2 任务,task1 (job_id) 里面的 name 字段是任务的说明。

# jobs.<job_id>.needs

用于标识在运行当前任务之前必须成功完成的一项或多项作业

1
2
3
4
5
6
jobs:
job1:
job2:
needs: job1
job3:
needs: [job1, job2]

job1 无需等待直接执行、job2 需要等待 job1 执行完成、job3 需要等待 job1、job2 都执行完成。

示例执行流程 | job1 -> job2 -> job3

# jobs.<job_id>.runs-on

runs-on 字段指定运行所需要的虚拟机环境。可用虚拟机如下(示例)

ubuntu windows macos
ubuntu-latest windows-latest macos-latest
ubuntu-18.04 windows-2019 macos-10.14
ubuntu-22.04 windows-2022 macos-12

指定虚拟机为 ubuntu-22.04 (必填)

1
runs-on: ubuntu-22.04

# jobs.<job_id>.steps

steps 字段指定每个 Job 的运行步骤,可以包含一个或多个步骤。
每个步骤都可以指定以下三个字段。

1
2
3
jobs.<job_id>.steps.name:名称
jobs.<job_id>.steps.run:运行的命令或者 action
jobs.<job_id>.steps.env:所需的环境变量