介绍
GitHub Actions 已经从一个简单的 CI/CD 工具发展成为一个全面的自动化平台。虽然基本工作流程有详细记录,但该平台的高级功能(可重用工作流程、复合操作、矩阵策略和部署模式)支持复杂的自动化管道。本文探讨了构建复杂 CI/CD 系统的团队的这些高级功能。
可重用的工作流程
可重用工作流允许您在一个存储库中定义工作流并从其他存储库调用它,遵循 DRY 原则。它们由 workflow_call 触发并接受输入和秘密。
# .github/workflows/ci.yml (reusable)
on:
workflow_call:
inputs:
node-version:
required: true
type: string
secrets:
NPM_TOKEN:
required: true
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with:
node-version: ${{ inputs.node-version }}
从另一个存储库调用可重用工作流程:
jobs:
call-workflow:
uses: org/repo/.github/workflows/ci.yml@main
with:
node-version: "20"
secrets:
NPM_TOKEN: ${{ secrets.NPM_TOKEN }}
最佳实践包括使用 semver 标签或提交 SHA 固定版本、验证输入、仔细管理机密以及维护组织工作流程目录。
复合动作
复合操作将多个工作流程步骤捆绑到一个操作中,无需 Docker 容器或 JavaScript。它们是使用 action.yml 定义的:
# action.yml
name: "Deploy to Cloud Run"
description: "Deploy a container to Google Cloud Run"
inputs:
service-name:
description: "Cloud Run service name"
required: true
runs:
using: "composite"
steps:
- id: auth
uses: google-github-actions/auth@v2
- id: deploy
uses: google-github-actions/deploy-cloudrun@v2
with:
service: ${{ inputs.service-name }}
复合操作非常适合跨多个服务或团队标准化部署步骤。它们可以发布到 GitHub Marketplace 以便在组织范围内重复使用。
矩阵策略
矩阵策略支持跨多个配置并行运行作业,这对于全面测试至关重要:
jobs:
test:
strategy:
matrix:
os: [ubuntu-latest, windows-latest, macos-latest]
node: [18, 20, 22]
exclude:
- os: macos-latest
node: 18
runs-on: ${{ matrix.os }}
steps:
- uses: actions/setup-node@v4
with:
node-version: ${{ matrix.node }}
高级矩阵模式包括从 JSON 输出动态生成、包含和排除目标配置的规则、最大并行度控制,以及使用 fail-fast: false 收集所有配置的结果(即使某些配置失败)。
环境保护规则
GitHub 环境为部署门提供可配置的保护规则:
| 规则 | 描述 |
|---|---|
| 所需审稿人 | 部署前必须由指定审批者批准 |
| 等待定时器 | 部署前强制延迟 |
| 部署分支 | 将部署限制为特定分支模式 |
deploy-production:
runs-on: ubuntu-latest
environment:
name: production
url: https://example.com
steps:
- run: echo "Deploying to production"
环境还支持秘密范围——秘密可以限制在特定环境中,防止在较低环境中意外使用。
OIDC认证
OpenID Connect 允许工作流程向云提供商进行身份验证,而无需存储长期机密:
jobs:
deploy:
permissions:
id-token: write
contents: read
steps:
- id: auth
uses: google-github-actions/auth@v2
with:
workload_identity_provider: "projects/.../locations/.../workloadIdentityPools/..."
- run: gcloud deploy ...
OIDC 消除了 AWS、Azure、GCP 和 HashiCorp Vault 的静态服务帐户密钥,通过在每次工作流程运行时颁发短期令牌来显着改善安全状况。
部署模式
GitHub Actions 支持的现代部署模式包括渐进式交付(使用金丝雀部署逐步转移流量)、蓝绿部署(在两个相同的环境之间切换)、GitOps 工作流程与 Argo CD for Kubernetes 集成,以及环境升级(其中工件一次构建,然后通过基于运行状况检查的自动回滚通过开发、暂存和生产进行升级)。
结论
高级 GitHub Actions 模式将 CI/CD 从简单的构建测试管道转变为强大、安全的部署平台。可重用的工作流程和复合操作强制跨组织的一致性,而矩阵策略和 OIDC 身份验证可大规模处理复杂性和安全性。掌握这些模式使团队能够构建随着基础设施需求而增长的复杂自动化。

