Skip to content

参考

速查表 + Marketplace 常用 Action + 上下文 + 触发器

yml 关键字索引

顶层

关键字作用
nameworkflow 显示名
on触发器
permissionsGITHUB_TOKEN 默认权限
envworkflow 级环境变量
defaults所有 run step 的默认 shell / cwd
concurrency同组排队 / 取消
jobsjobs 容器

Job 级

关键字作用
runs-onRunner(必填)
needs依赖的上游 jobs
if条件
permissionsjob 级权限
envjob 级环境变量
defaultsjob 级 default
outputsjob 暴露给下游 jobs 的输出
environment部署环境(审批 + env secrets)
concurrencyjob 级并发
container整个 job 跑在容器里
services旁路服务容器
strategy.matrix矩阵展开
strategy.fail-fast一败俱败
strategy.max-parallel并发上限
timeout-minutesjob 级超时(默认 360 min)
continue-on-error失败不阻塞下游
runs-on larger升级 runner 规格
uses (job 级)调用 reusable workflow
with (job 级)给 reusable workflow 传参
secrets给 reusable workflow 传 secrets

Step 级

关键字作用
uses引用 Action
run跑 shell(与 uses 互斥)
with给 Action 传参
envstep 级环境变量
id给 step 加 ID(拿 outputs 用)
name日志显示名
working-directory工作目录
shellbash / sh / pwsh / python / cmd ...
if条件
continue-on-error失败不挂 job
timeout-minutesstep 级超时

触发器事件全表

仓库代码事件

事件触发条件
push推送 commit / tag
pull_requestPR 创建 / 更新 / 关闭
pull_request_target同 PR 但用 base 分支的 workflow(fork 安全)
pull_request_reviewPR 评审提交
pull_request_review_commentPR 行级评论
releaserelease 创建 / 发布 / 编辑
create创建分支 / tag
delete删除分支 / tag
fork仓库被 fork

Issue / Discussion

事件触发条件
issuesissue 操作
issue_commentissue / PR 评论
discussiondiscussion 操作
discussion_commentdiscussion 评论

CI / 调度

事件触发条件
schedulecron 定时(UTC)
workflow_dispatchUI / API 手动触发
workflow_call被其它 workflow 调用
workflow_run监听另一个 workflow 完成
repository_dispatch外部 API webhook
check_runcheck 状态变化
check_suitecheck suite 状态

其它

事件触发条件
deployment / deployment_status部署 API 调用
statuscommit status 变化
watch仓库被 star
page_buildGitHub Pages 构建完成
registry_package包仓库变更

上下文(contexts)速查

上下文主要属性用途
githubref / sha / actor / repository / event_name / event / workflow / run_id / run_number / token触发上下文
env自定义环境变量跨 step 共享变量
varsUI 配置的非机密配置变量替代 env 中的非机密值
secretsUI 配置的机密变量(含 GITHUB_TOKENAPI 凭据 / 部署密钥
inputsworkflow_dispatch / workflow_call 的输入手动 / 复用 workflow 时取参
needs上游 jobs 的 outputs / result跨 job 传值
steps当前 job 的各 step outputs / outcome / conclusion跨 step 传值
job当前 job 的 status / container用 job 自身信息
runneros / arch / name / temp / tool_cache跨平台分支
strategyjob-index / job-total / fail-fastmatrix 内部信息
matrix当前 matrix 的字段matrix 内取值

内置函数

函数用途
contains(haystack, needle)检查包含(字符串 / 数组 / 对象)
startsWith(s, prefix)字符串前缀检查
endsWith(s, suffix)字符串后缀检查
format(str, ...args)C# style 字符串格式化
join(array, sep)数组 join
toJSON(obj)对象 → JSON 字符串
fromJSON(str)JSON 字符串 → 对象
hashFiles(...paths)文件内容 hash(用于 cache key)
success()上面 step 全部成功
failure()有 step 失败
always()不论成败都跑
cancelled()job 被取消

GITHUB_TOKEN permissions 完整列表

Scope默认(旧)默认(新仓库)写时能做
actionsreadread触发 / 取消 其它 workflow
attestations-none创建 artifact 证明
checkswriteread创建 check runs
contentswriteread读写仓库代码
deploymentswriteread写部署状态
discussionswriteread创建 / 评论 discussions
id-tokennonenoneOIDC 联邦认证
issueswriteread读写 / 评论 issues
models-none调用 GitHub Models
packageswritereadpush 到 GHCR
pageswriteread部署 GitHub Pages
pull-requestswriteread创建 / 评论 / 加 label PR
repository-projectswriteread项目板写
security-eventswriteread写 code scanning 结果
statuseswriteread创建 commit status

简写:

yaml
permissions: read-all                   # 全部 read
permissions: write-all                  # 全部 write(不建议)
permissions: {}                         # 全部 none

预定义环境变量

变量含义示例
GITHUB_WORKFLOWworkflow 名CI
GITHUB_RUN_ID运行 ID123456789
GITHUB_RUN_NUMBERworkflow 在仓库内的序号42
GITHUB_ACTION当前 action 名 / step id-
GITHUB_ACTOR触发的用户octocat
GITHUB_REPOSITORYowner/repomyorg/myrepo
GITHUB_REPOSITORY_OWNERownermyorg
GITHUB_EVENT_NAME事件名push / pull_request
GITHUB_EVENT_PATH事件 payload JSON 路径/github/workflow/event.json
GITHUB_WORKSPACE工作目录/home/runner/work/...
GITHUB_SHA触发的 commit SHA-
GITHUB_REF完整 refrefs/heads/main
GITHUB_REF_NAME短 refmain
GITHUB_REF_TYPEbranch / tag-
GITHUB_HEAD_REFPR 时的源分支feature/x
GITHUB_BASE_REFPR 时的目标分支main
GITHUB_TOKEN自动注入的 PATghs_xxx
GITHUB_API_URLAPI URLhttps://api.github.com
GITHUB_SERVER_URLGitHub URLhttps://github.com
RUNNER_OSLinux / macOS / Windows-
RUNNER_ARCHX64 / ARM64-
RUNNER_TEMP临时目录-
RUNNER_TOOL_CACHE工具缓存目录-

Marketplace 常用 Action

GitHub 官方 actions/*

Action用途
actions/checkout@v4拉取仓库代码
actions/setup-node@v4装 Node.js + 内置 cache
actions/setup-python@v5装 Python
actions/setup-go@v5装 Go
actions/setup-java@v4装 JDK
actions/cache@v4自定义缓存
actions/upload-artifact@v4上传产物
actions/download-artifact@v4下载产物
actions/github-script@v7在 step 里跑 JS 调 GitHub API
actions/labeler@v6按 paths 自动加 PR label
actions/stale@v9标记 / 关闭长期不活的 issue / PR
actions/create-release@v1创建 GitHub Release(已弃用,建议 softprops/action-gh-release)

Docker 官方 docker/*

Action用途
docker/login-action@v3登录 registry
docker/setup-buildx-action@v3启用 BuildKit
docker/setup-qemu-action@v3跨架构构建(QEMU)
docker/build-push-action@v6构建 + push 镜像(推荐)
docker/metadata-action@v5自动生成镜像 tags + labels

云厂商

Action用途
aws-actions/configure-aws-credentials@v6AWS OIDC
aws-actions/amazon-ecr-login@v2ECR 登录
azure/login@v2Azure OIDC
google-github-actions/auth@v2GCP OIDC
hashicorp/vault-action@v3Vault

Release / 部署

Action用途
softprops/action-gh-release@v2创建 GitHub Release(推荐)
peaceiris/actions-gh-pages@v4部署到 GitHub Pages
JamesIves/github-pages-deploy-action@v4部署到 GitHub Pages(替代)
superfly/flyctl-actions/setup-flyctl@masterFly.io 部署
vercel/setup-now@v1Vercel CLI

包管理

Action用途
pnpm/action-setup@v4装 pnpm
oven-sh/setup-bun@v2装 Bun
astral-sh/setup-uv@v3装 uv(Python)

工具

Action用途
crazy-max/ghaction-github-labeler@v5同步 labels
dorny/paths-filter@v3按 paths 设置 outputs
lhotari/action-upterm@v1失败时启 SSH session 调试
tj-actions/changed-files@v45拿到本次变更的文件列表

常用 yml 片段拷贝即用

Node.js 项目(pnpm)

yaml
name: CI
on:
  push:
    branches: [main]
  pull_request:
permissions:
  contents: read
jobs:
  test:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - uses: pnpm/action-setup@v4
        with: { version: 9 }
      - uses: actions/setup-node@v4
        with:
          node-version: '22'
          cache: 'pnpm'
      - run: pnpm install --frozen-lockfile
      - run: pnpm lint
      - run: pnpm test
      - run: pnpm build

跑 PostgreSQL 测试

yaml
jobs:
  test:
    runs-on: ubuntu-latest
    services:
      postgres:
        image: postgres:16
        env:
          POSTGRES_PASSWORD: ci
        ports: ['5432:5432']
        options: --health-cmd pg_isready --health-interval 10s
    steps:
      - uses: actions/checkout@v4
      - run: pnpm test:integration
        env:
          DATABASE_URL: postgres://postgres:ci@localhost:5432/postgres

多版本 matrix

yaml
jobs:
  test:
    runs-on: ubuntu-latest
    strategy:
      matrix:
        node: ['18', '20', '22']
      fail-fast: false
    steps:
      - uses: actions/checkout@v4
      - uses: actions/setup-node@v4
        with: { node-version: ${{ matrix.node }}, cache: 'pnpm' }
      - run: pnpm install && pnpm test

Docker build + push (GHCR)

yaml
jobs:
  build:
    runs-on: ubuntu-latest
    permissions:
      contents: read
      packages: write
    steps:
      - uses: actions/checkout@v4
      - uses: docker/setup-buildx-action@v3
      - uses: docker/login-action@v3
        with:
          registry: ghcr.io
          username: ${{ github.actor }}
          password: ${{ secrets.GITHUB_TOKEN }}
      - uses: docker/build-push-action@v6
        with:
          push: true
          tags: |
            ghcr.io/${{ github.repository }}:${{ github.sha }}
            ghcr.io/${{ github.repository }}:latest
          cache-from: type=gha
          cache-to: type=gha,mode=max

OIDC 部署 AWS

yaml
jobs:
  deploy:
    runs-on: ubuntu-latest
    permissions:
      id-token: write
      contents: read
    steps:
      - uses: aws-actions/configure-aws-credentials@v6
        with:
          role-to-assume: arn:aws:iam::123456789:role/github-actions-prod
          aws-region: ap-southeast-1
      - run: aws sts get-caller-identity
      - run: aws s3 sync dist/ s3://my-bucket/

发包到 npm

yaml
on:
  push:
    tags: ['v*']
jobs:
  publish:
    runs-on: ubuntu-latest
    permissions:
      contents: read
      id-token: write                   # 启用 npm provenance
    steps:
      - uses: actions/checkout@v4
      - uses: actions/setup-node@v4
        with:
          node-version: '22'
          registry-url: 'https://registry.npmjs.org'
      - run: pnpm install --frozen-lockfile
      - run: pnpm build
      - run: pnpm publish --provenance --access public
        env:
          NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}

部署 GitHub Pages

yaml
on:
  push:
    branches: [main]
permissions:
  contents: read
  pages: write
  id-token: write
jobs:
  deploy:
    environment:
      name: github-pages
      url: ${{ steps.deployment.outputs.page_url }}
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - run: pnpm install && pnpm build
      - uses: actions/upload-pages-artifact@v3
        with:
          path: ./dist
      - id: deployment
        uses: actions/deploy-pages@v4

与其他 CI 对比备查

概念GitHub ActionsGitLab CI/CDJenkins
配置.github/workflows/*.yml.gitlab-ci.ymlJenkinsfile
阶段jobs(默认并行 + needs)stages(默认串行)stages
任务jobjobstage
步骤steps:script:steps { }
Action 复用uses / Composite / Reusableextends / includeShared Library
执行环境runs-on: / containerimage: / services:agent { docker }
条件if:rules:when {}
矩阵strategy.matrixparallel.matrixparallel { ... }
凭据Secrets / OIDCCI/CD VariablesCredentials
部署目标environment:environment:-
触发器on:workflow: + rules:triggers { }