Post

GitHub Actions

官方文档:

基本概念

GitHub Actions用于自动化软件开发中的任务

GitHub Actions是事件驱动的,即当指定的事件发生时(例如push, pull request等)运行一系列命令(例如构建、测试、部署等)

workflow

事件自动触发workflow,一个workflow包含一个或多个并行执行的job,一个job包含多个顺序执行的step,每个step执行一个action,action即具体执行的命令

runner是一个安装了GitHub Actions runner的虚拟机,基于Ubuntu Linux, Windows或macOS,默认使用GitHub服务器的runner。每次执行一个job时,GitHub服务器都将创建一个新的虚拟环境。

创建workflow

GitHub Actions使用YAML语法来定义job和step,这些YAML文件保存在仓库根目录下的.github/workflows目录中

下面的步骤创建了一个示例workflow,每次向仓库push代码时执行bats命令(一个自动化测试工具):

(1)在仓库中创建一个.github/workflows/目录

(2)在.github/workflows/目录下,创建一个名为learn-github-actions.yml的文件,表示一个workflow,内容如下:

1
2
3
4
5
6
7
8
9
10
11
12
name: learn-github-actions
on: [push]
jobs:
  check-bats-version:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v2
      - uses: actions/setup-node@v2
        with:
          node-version: '14'
      - run: npm install -g bats
      - run: bats -v

(3)提交并推送代码

下面逐行分析该workflow文件

代码解释
name: learn-github-actionsworkflow的名字(不一定要和文件名相同),可省略
on: [push]指定触发该workflow的事件,该示例使用push事件
jobs:定义该workflow中的job
check-bats-version:job的名字,可任意
runs-on: ubuntu-latest指定该job运行在Ubuntu Linux runner中(GitHub创建的虚拟机)
steps:指定该job包含的step
  - uses: actions/checkout@v2uses关键字表示使用一个现有的action(一种特殊的仓库),格式为{owner}/{repo}@{ref},该示例使用的是actions/checkout@v2,用于(在虚拟机上)拉取代码,从而可以对代码执行操作(例如测试工具),任何需要对代码执行操作workflow都要使用该action
  - uses: actions/setup-node@v2
  with:
   node-version: '14'
安装指定版本的node软件包,从而可以使用npm命令
  - run: npm install -g batsrun关键字在runner上执行一个命令,该示例中使用npm安装测试工具bats
  - run: bats -v执行bats命令,输出版本

该示例workflow的可视化: workflow可视化

可在GitHub仓库的Actions标签页查看运行结果

常用action

actions是一个GitHub官方账户,提供了多种常用的action,除此之外还有大量其他用户贡献的action,可在GitHub Marketplace搜索

参考文档

This post is licensed under CC BY 4.0 by the author.