1. 什么是 GitHub Actions?
GitHub Actions 是 GitHub 提供的一项功能,旨在帮助开发者自动化、定制和执行软件开发工作流。它集成在 GitHub 平台内,可以在代码库中直接配置和运行。通过 GitHub Actions,开发者可以在代码提交、拉取请求、发布等事件发生时自动触发一系列任务,从而提高开发效率和代码质量。
2. GitHub Actions 的核心概念
- 工作流(Workflow):一个工作流是一个可配置的自动化过程,由一个或多个任务(Job)组成。工作流通常定义在代码库的
.github/workflows
目录下的 YAML 文件中。 - 任务(Job):一个任务是一个独立的运行单元,包含一系列步骤(Step)。任务可以并行或串行执行。
- 步骤(Step):步骤是任务中的最小执行单元,可以是运行命令或调用预定义的动作(Action)。
- 动作(Action):动作是可重用的代码单元,用于完成特定的任务。GitHub 提供了许多内置的动作,开发者也可以创建自定义动作。
- Runner:Runner 是执行工作流的计算环境。GitHub 提供了托管 Runner,开发者也可以使用自托管 Runner。
3. 创建和管理工作流
要创建一个新的工作流,可以在代码库的 .github/workflows
目录下创建一个 YAML 文件。例如,创建一个名为 ci.yml
的文件:
name: CI
on: [push, pull_request]
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- name: Set up Node.js
uses: actions/setup-node@v2
with:
node-version: '14'
- name: Install dependencies
run: npm install
- name: Run tests
run: npm test
上述工作流将在每次代码推送或拉取请求时触发,执行以下任务:
- 检出代码库。
- 设置 Node.js 环境。
- 安装依赖。
- 运行测试。
4. 工作流语法详解
GitHub Actions 的工作流语法基于 YAML,主要包括以下几个部分:
- 名称(name):工作流的名称,用于标识和管理工作流。
- 触发器(on):定义工作流的触发条件,如
push
、pull_request
、schedule
等。 - 任务(jobs):定义工作流中的任务,每个任务包含运行环境(runs-on)和步骤(steps)。
- 步骤(steps):任务中的具体执行步骤,可以是运行命令(run)或调用动作(uses)。
5. 使用 GitHub 提供的 Runner
GitHub 提供了多种托管 Runner 环境,包括 Ubuntu、Windows 和 macOS。开发者可以在工作流中指定运行环境:
jobs:
build:
runs-on: ubuntu-latest
也可以使用自托管 Runner 来运行工作流:
jobs:
build:
runs-on: self-hosted
6. 触发器和事件
GitHub Actions 支持多种事件触发工作流,包括但不限于:
- push:代码推送到仓库时触发。
- pull_request:创建或更新拉取请求时触发。
- schedule:定时触发工作流。
- workflow_dispatch:手动触发工作流。
示例:
on:
push:
branches:
- main
pull_request:
branches:
- main
schedule:
- cron: '0 0 * * *'
7. 安全性和权限管理
GitHub Actions 提供了多种安全性和权限管理机制,包括:
- 机密管理:可以在仓库设置中添加机密(Secrets),并在工作流中使用。
- 权限控制:可以通过
permissions
字段控制工作流的权限。
示例:
jobs:
build:
runs-on: ubuntu-latest
permissions:
contents: read
issues: write
steps:
- name: Checkout code
uses: actions/checkout@v2
- name: Use secret
run: echo ${{ secrets.MY_SECRET }}