Skip to content

⚙️ CI/CD 概述

本文档站基于 GitHub Actions 自动构建,部署到 GitHub Pages。

流程总览

git push main (website/** 改动)


┌───────────────────────────┐
│  GitHub Actions 触发       │
│  .github/workflows/        │
│  deploy.yml                │
└─────────────┬─────────────┘

   ┌──────────┴──────────┐
   ▼                     ▼
build job            (并行无)

   ├─ checkout 仓库
   ├─ setup Node 20
   ├─ npm install
   ├─ vitepress build  → .vitepress/dist
   ├─ configure-pages
   └─ upload-artifact


deploy job

   └─ deploy-pages  →  https://<user>.github.io/ipapi.co-skills/

🎨 一图抵千言

下面这张流程图把从「git push」到「文档上线」的完整链路一次看清,含触发、构建、产物、部署、发布各阶段。

💡 一图多读

  • 主线(实线):push → 触发判断 → 排队 → build → deploy → 上线
  • 虚线:release 是独立可选路径,由 tag 触发,与文档部署并行不冲突
  • 触发判断:未命中 paths 直接跳过,省 CI 额度

阶段对照表

阶段所在作业关键动作产物 / 结果
🎯 触发push 到 main + paths 匹配工作流运行
🔒 并发group: pages 排队避免半截部署
📦 构建buildcheckout → setup-node → npm ci → vitepress build.vitepress/dist
📤 产物buildconfigure-pages → upload-pages-artifactPages artifact
🚢 部署deploydeploy-pages站点 URL
✅ 上线GitHub Pages 生效公网可访问

触发条件

yaml
on:
  push:
    branches: [main]
    paths:
      - 'website/**'
      - '.github/workflows/deploy.yml'
  workflow_dispatch:  # 手动触发
  • 推送到 main 且改动了 website/ 或工作流文件 → 自动部署
  • 也可在 Actions 页面手动 workflow_dispatch

并发控制

yaml
concurrency:
  group: pages
  cancel-in-progress: false

同一时刻只跑一个部署,新提交排队而非取消旧的(避免半截部署)。

⚠️ 为什么 cancel-in-progress: false

文档部署若中途被取消,会产生半截部署——旧版被清空、新版没上完,访问者看到空白页。因此这里宁可排队等,也不打断进行中的部署。代价是连续多次 push 时后面会累积排队,但文档场景频率低,可接受。

权限

yaml
permissions:
  contents: read    # 读仓库代码
  pages: write      # 写 GitHub Pages
  id-token: write   # OIDC 鉴权

🔒 最小权限原则

id-token: write 是为 deploy-pages 提供 OIDC 短令牌鉴权,仅文档部署工作流需要。不要在普通 CI 里随意开此权限。contents: read 够用即可,切勿给 contents: write,避免工作流被滥用往仓库推东西。

📖 三项权限各自管什么
权限作用缺了会怎样
contents: readcheckout 拉代码checkout 步骤失败
pages: write向 Pages 服务写部署deploy-pages 报 403
id-token: write生成 OIDC 令牌鉴权deploy-pages 报权限错

🎨 一图抵千言

下图用作业依赖视角展示 build → deploy 的串联关系,以及每个作业需要哪项权限。

下一步

基于 MIT 许可证发布