主要参考资料:
GitHub Actions 工作流编写指南: https://blog.csdn.net/i89211/article/details/144881603
目录
简介
GitHub Actions的核心在于它允许你在GitHub仓库中定义自定义的工作流程,这些工作流程由一系列动作(actions)组成,它们可以在特定事件发生时自动触发。
-
事件触发器(Event Triggers):
当你指定某些事件(如push、pull_request等),GitHub会监听这些事件并在其发生时启动相应的工作流。
-
运行器(Runners):
GitHub提供托管的虚拟机作为运行器,你可以选择不同的操作系统(如Ubuntu、Windows或macOS)。运行器负责执行你的工作流中的各个步骤。
-
动作(Actions):
Actions是构成工作流的基本单元,可以是一个简单的shell命令,也可以是一个复杂的Docker容器。GitHub Marketplace提供了大量预构建的动作供用户直接使用或作为参考。
-
矩阵(Matrix):
对于需要跨平台或跨版本测试的情况,可以使用矩阵策略来同时在多个环境中运行相同的工作流。
通过这种机制,GitHub Actions使得开发者能够轻松地实现CI/CD管道,提高软件开发效率,减少手动操作带来的错误风险。此外,由于其与GitHub紧密集成,因此特别适合于基于GitHub进行项目管理的团队。
工作流文件
什么是工作流文件?
- 文件必须保存在仓库的 .github/workflows 目录中
- 文件格式为 YAML,后缀为 .yml 或 .yaml
- 一个仓库可以有多个工作流文件
YAML 语法基础
yaml
key: value # 基本的键值对
parent: # 缩进表示层级关系
child: value
array: # 列表使用 - 表示
- item1
- item2
工作流文件结构:
名称定义(name)
yaml
name: My Workflow # 工作流的名称,会显示在 Actions 页面
触发条件(on)
yaml
on:
push: # 推送时触发
branches:
- main # 只在 main 分支触发
pull_request: # PR 时触发
branches:
- main
schedule: # 定时触发
- cron: '0 0 * * *' # 每天零点触发
常用的 cron 表达式:
yaml
* * * * * 分别代表:分钟(0-59) 小时(0-23) 日期(1-31) 月份(1-12) 星期几(0-6)
0 0 * * * = 每天午夜
0 */4 * * * = 每4小时
0 9 * * 1-5 = 工作日早上9点
工作定义(jobs)
yaml
jobs:
build: # 工作ID
runs-on: ubuntu-latest # 运行环境
steps: # 步骤定义
- name: Step 1 # 步骤名称
uses: actions/checkout@v2 # 使用现成的 action
- name: Step 2
run: echo "Hello" # 运行命令
常用环境变量
yaml
env:
GLOBAL_VAR: value # 全局环境变量
jobs:
job1:
env:
JOB_VAR: value # 作业级环境变量
steps:
- env:
STEP_VAR: value # 步骤级环境变量
常用 Actions
检出代码
yaml
- uses: actions/checkout@v2
设置环境
yaml
- uses: actions/setup-node@v2
with:
node-version: '14'
- uses: actions/setup-python@v2
with:
python-version: '3.8'
缓存依赖
yaml
- uses: actions/cache@v2
with:
path: ~/.npm
key: ${{ runner.os }}-node-${{ hashFiles('**/package-lock.json') }}