GitHub Actions 是 GitHub 提供的强大自动化工具,它允许开发者在代码仓库中直接定义、构建和执行工作流程。本文将带你深入了解 GitHub Actions 的核心概念,包括工作流(Workflows)、事件(Events)、任务(Jobs)和运行器(Runners),并通过详细的步骤指导你如何在仓库中创建和配置 GitHub Actions。我们还将通过四个实用的示例——Node.js 环境设置、Deno 环境设置、文件压缩和静态网站部署——来展示 GitHub Actions 的实际应用。无论你是初学者还是有一定经验的开发者,本文都将为你提供清晰的指导和启发,帮助你更高效地管理开发流程。
一、GitHub Actions 的核心概念
在开始使用 GitHub Actions 之前,理解其核心概念至关重要。这些概念构成了 GitHub Actions 的基础,帮助你更好地设计和实现自动化工作流程。
1. 工作流(Workflows)
工作流是 GitHub Actions 的核心,它是一个可配置的自动化过程,用于运行一个或多个任务(Jobs)。工作流通过 YAML 文件定义,并在特定事件触发时运行。你可以在仓库的 .github/workflows
目录下创建多个工作流文件,每个文件对应不同的任务,如构建和测试拉取请求、部署应用到云端等。
2. 事件(Events)
事件是触发工作流的特定活动。例如,代码推送、问题创建或拉取请求提交都会触发相应的事件。通过指定事件类型,你可以精确控制工作流的触发条件,避免不必要的资源消耗。
3. 任务(Jobs)
任务是工作流中的基本执行单元,可以并行或顺序运行。每个任务包含一系列步骤,用于执行命令或操作。通过设置任务依赖关系,你可以确保某些任务在其他任务完成后才开始执行。
4. 运行器(Runners)
运行器是执行工作流的服务器,每次只能处理一个任务。GitHub 提供了多种运行器环境,包括 Ubuntu Linux、Microsoft Windows 和 macOS,以满足不同开发需求。
二、如何在仓库中创建 GitHub Actions
创建 GitHub Actions 有两种主要方式:通过 GitHub 用户界面(UI)或使用本地 IDE。下面我们将详细介绍这两种方法。
1. 使用 GitHub UI 创建 GitHub Actions
- 进入你的 GitHub 仓库,点击“Actions”标签。
- 选择 GitHub 建议的工作流模板,或根据项目需求自定义。
- 在编辑页面中配置工作流,完成后点击“Commit changes”保存。
这种方式适合快速创建简单的工作流,无需手动管理 .github/workflows
目录。
2. 使用本地 IDE 创建 GitHub Actions
- 在你的 IDE(如 VS Code)中打开项目。
- 在项目根目录下创建
.github/workflows
文件夹,并新建一个 YAML 文件(如demo.yml
)。 - 编写工作流配置,保存后推送到 GitHub 仓库。
这种方法适合需要复杂配置或版本控制的工作流。
三、GitHub Actions 语法详解
理解 GitHub Actions 的语法是编写高效工作流的关键。以下是一个示例工作流及其语法解析:
name: Github Action Template
on:
pull_request:
branches: [ "main" ]
schedule:
- cron: '30 5,17 * * *'
workflow_call:
inputs:
username:
description: 'A username passed from the caller workflow'
default: 'john-doe'
required: false
type: string
permissions:
actions: read | write | none
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: NPM Install Package
run: npm install
with:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
first_name: Github
last_name: Action
if: ${{ github.event_name == 'pull_request' && github.event.action == 'unassigned' }}
shell: zsh
entrypoint: /bin/echo
- name: 工作流名称,显示在 GitHub UI 中。
- on: 定义触发工作流的事件,如
pull_request
或schedule
。 - jobs: 包含一个或多个任务,每个任务定义了运行的环境和步骤。
- steps: 任务的执行步骤,包括检查代码、运行命令或调用其他操作。
四、GitHub Actions 实用示例
通过实际示例,我们可以更直观地理解 GitHub Actions 的应用场景。
1. Node.js 环境设置
name: Setup Node.js Env
on:
push:
branches: [ "main" ]
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Use Node.js ${{ matrix.node-version }}
uses: actions/setup-node@v4
with:
node-version: 21
cache: 'npm'
- run: npm ci
- run: npm run build --if-present
- run: npm test
此工作流在代码推送到 main
分支时触发,自动设置 Node.js 环境并运行测试。
2. Deno 环境设置
name: Deno
on:
push:
branches: [ "main" ]
permissions:
contents: read
jobs:
test:
runs-on: ubuntu-latest
steps:
- name: Setup repo
uses: actions/checkout@v4
- name: Setup Deno
uses: denoland/setup-deno@v2
with:
deno-version: v2.1.5
- name: Run linter
run: deno lint
- name: Run tests
run: deno test -A
此工作流用于设置 Deno 环境并运行代码检查和测试。
3. 文件压缩
name: Zip Files
on:
release:
types: [ published ]
jobs:
zip-files:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: vimtor/action-zip@v1.2
with:
files: dist/ manifest.json
dest: build.zip
- uses: actions/upload-artifact@v4
with:
name: zip file
path: ${{ github.workspace }}/build.zip
此工作流在发布新版本时,将指定文件压缩为 ZIP 格式并保存为工件。
4. 部署静态网站到 GitHub Pages
name: Deploy static content to Pages
on:
push:
branches: [ "main" ]
permissions:
contents: read
pages: write
id-token: write
concurrency:
group: "pages"
cancel-in-progress: false
jobs:
deploy:
environment:
name: github-pages
url: ${{ steps.deployment.outputs.page_url }}
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Setup Pages
uses: actions/configure-pages@v5
- name: Upload artifact
uses: actions/upload-pages-artifact@v3
with:
path: '.'
- name: Deploy to GitHub Pages
id: deployment
uses: actions/deploy-pages@v4
此工作流在代码推送到 main
分支时,自动部署静态网站到 GitHub Pages。
五、总结
GitHub Actions 是一个功能强大且灵活的自动化工具,能够帮助开发者简化开发流程、提高效率。通过本文的介绍,你已经了解了 GitHub Actions 的核心概念、创建方法、语法详解以及实用示例。无论是设置开发环境、运行测试,还是部署应用,GitHub Actions 都能为你提供强大的支持。
开始尝试在你的项目中集成 GitHub Actions 吧!从简单的任务入手,逐步探索更复杂的应用场景。随着经验的积累,你会发现 GitHub Actions 是提升开发效率的得力助手。如果你有任何问题或需要进一步的指导,欢迎查阅 GitHub 官方文档或社区资源。祝你编程愉快!