GitHubActions

记录一下 GitHub Actions 的简单使用,强大得很

概述

GitHub Actions 是一种持续集成和持续交付 (CI/CD) 平台,可用于自动执行生成、测试和部署管道。我的理解,为 GitHub 项目进行自动化操作的工具,提供一个 Linux 系统对我们的代码进行运行、构建、发布等等。工作流在仓库的 .github/workflows 下面定义,文件名为 *.yml,每一个 yml 文件一个工作流程。下面实例为一个简单的定时运行项目根路径下 index.py 文件的实例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
# 这是完美校园打卡项目最初用 GitHub Actions 定时进行打卡的一个工作流程
name: 17wanxiaoCheckin # 工作流的名字

on:
push:
branches: [ master ] # 当往 master 上 push 代码的时候会触发当前工作流
schedule:
- cron: 0 22 * * * # cron 表达式,每天 22:00 运行当前工作流

jobs:
build: # 当前 job 的名称
runs-on: ubuntu-latest # 指定当前运行环境

steps:
- uses: actions/checkout@v2 # 检索出当前代码,即 clone 仓库代码到当前工作目录下

- name: Pip
run: pip3 install requests pycryptodome # 安装所需依赖

- name: HealthyCheckIn
run: python3 index.py # 运行脚本
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
# 当前工作流会生成三个 job 分别构建 python3.6、3.7、3.9 的包并上传到 Actions 下的构件列表,可供下载
name: auto-build

on:
push:
branches: master

jobs:
build:
strategy:
matrix:
python-version: [ "3.6", "3.7", "3.9"]
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3

- uses: actions/setup-python@v4 # 安装 Python 环境
with:
python-version: ${{ matrix.python-version }}

- name: Pip Install # 安装所需依赖
run: |
python -m pip install --upgrade pip
pip install -r requirements.txt -t .

- name: Upload a Build Artifact # 上传构件
uses: actions/upload-artifact@v3.1.1
with:
name: 17wanxiaoCheckin-CF.py${{ matrix.python-version }}
path: ./

常用语法

on

on 下定义如何触发当前工作流程,具体的非常多。参考文档

  • push,当 push 操作时触发
  • schedule,定时任务
  • pull_request,当 PR 时触发

jobs

jobs 下定义工作流任务,可以有多个。参考文档

  • needs,确定 jobs 间的依赖,以下为确保顺序为 job1,job2,job3

    1
    2
    3
    4
    5
    6
    jobs:
    job1:
    job2:
    needs: job1
    job3:
    needs: [job1, job2]
  • if,为 true 才执行当前任务,在 if 条件下使用表达式时,可以省略表达式语法 (${{ }})

runs-on

指定当前任务所使用的计算机类型。参考文档

  • windows-latest:最新 windows 服务器镜像,Windows Server 2022
  • ubuntu-latest:最新 Ubuntu 服务器镜像,Ubuntu 22.04
  • macos-latest:最新 Mac 服务器镜像,macOS Big Sur 11

steps

定义一个任务中每一步操作。参考文档

matrix

定义矩阵策略进行多维度自动化。参考文档

1
2
3
4
5
6
jobs:
example_matrix: # 这个名字是 job id
strategy:
matrix:
version: [10, 12, 14]
os: [ubuntu-latest, windows-latest]

当前策略会以不同版本和操作系统执行 6 次任务,默认情况下,GitHub 将根据运行器的可用性将并行运行的作业数最大化,矩阵在每次工作流运行时最多将生成 256 个作业。可以使用 matrix.versionmatrix.os 来访问作业正在使用的 versionos 的当前值。

1
2
3
4
5
6
7
8
9
10
11
12
jobs:
example_matrix:
strategy:
matrix:
os: [ubuntu-22.04, ubuntu-20.04]
version: [10, 12, 14]
runs-on: ${{ matrix.os }}
steps:
- uses: actions/setup-node@v3

with:
node-version: ${{ matrix.version }}

badge

添加工作流徽章,显示工作流执行结果状态。

https://github.com/<OWNER>/<REPOSITORY>/actions/workflows/<WORKFLOW_FILE>/badge.svg

例:

表达式

${{ }},使用该语法获取表达式值,在 if 中会自动对表达式求值,因此在 if 中可不加 ${{}}参考文档

上下文变量,参考文档

扩展阅读


GitHubActions
https://reajason.vercel.app/2022/11/21/GitHubActions/
作者
ReaJason
发布于
2022年11月21日
许可协议