1. GitHub Actions 工作流文件解析入门
第一次看到.github/workflows/ci.yml这个文件时,你可能会有种既熟悉又陌生的感觉。作为现代软件开发中持续集成(CI)的核心配置文件,它就像一位沉默的工程师,默默地在代码提交后执行各种构建、测试和部署任务。这个看似简单的YAML文件,实际上承载着项目自动化流程的全部灵魂。
GitHub Actions的工作流文件通常存放在项目根目录的.github/workflows文件夹下,采用YAML格式编写。文件名可以自定义,但一般会使用ci.yml、build.yml或test.yml等具有描述性的名称。这个文件定义了何时触发工作流、运行在什么环境、执行哪些步骤等一系列关键配置。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 工作流文件结构深度解析
2.1 基础结构剖析
一个典型的CI工作流文件由以下几个核心部分组成:
yaml复制name: CI Pipeline # 工作流名称
on: # 触发条件
push:
branches: [ main ]
pull_request:
branches: [ main ]
jobs: # 定义任务
build:
runs-on: ubuntu-latest # 运行环境
steps: # 执行步骤
- uses: actions/checkout@v2
- name: Setup Node.js
uses: actions/setup-node@v2
with:
node-version: '14'
- name: Install dependencies
run: npm install
- name: Run tests
run: npm test
这个基础结构展示了工作流文件的四个关键部分:name、on、jobs和steps。每个部分都有其特定的作用和配置方式。
2.2 触发条件(on)详解
on部分定义了工作流的触发条件,这是整个自动化流程的起点。常见的触发条件包括:
- 代码推送(push): 当代码推送到特定分支时触发
- 拉取请求(pull_request): 当创建或更新拉取请求时触发
- 定时任务(schedule): 按照cron表达式定时触发
- 工作流调度(workflow_dispatch): 允许手动触发工作流
- 仓库事件(repository_dispatch): 响应外部事件触发
高级配置示例:
yaml复制on:
push:
branches:
- main
- develop
tags:
- v*
pull_request:
branches: [ main ]
paths:
- 'src/**'
- 'package.json'
schedule:
- cron: '0 0 * * *' # 每天午夜运行
这个配置表示:当代码推送到main或develop分支,或者推送以v开头的标签时触发;当针对main分支的拉取请求中修改了src目录下的文件或package.json时触发;以及每天午夜自动运行一次。
3. 任务(jobs)与步骤(steps)的进阶配置
3.1 任务配置的艺术
jobs部分是工作流的核心,定义了要执行的一个或多个任务。每个任务可以配置以下关键属性:
- runs-on: 指定运行环境(如ubuntu-latest、windows-latest等)
- needs: 定义任务依赖关系
- if: 条件判断是否执行该任务
- strategy: 定义矩阵策略,用于并行测试不同环境
- env: 设置环境变量
- timeout-minutes: 设置任务超时时间
矩阵策略示例:
yaml复制jobs:
test:
runs-on: ubuntu-latest
strategy:
matrix:
node-version: [12.x, 14.x, 16.x]
os: [ubuntu-latest, windows-latest]
name: Node ${{ matrix.node-version }
