返回首页
⚙️ 后端 / 架构
GitHub Actions + DevOps 实战:从 CI 到自动化部署
GitHub Actions 是 2026 年独立开发者的标配 DevOps 工具。本文从 0 到生产级 CI/CD,含 8 个实战 Workflow + 测试 + 部署 + 安全扫描 + 性能监控。
GitHub Actions · DevOps · CI/CD · 自动化部署 · Docker · 测试
📰
今日技术简讯
📰 技术简讯 · 2026-07-27
今日聚合 6 条热门技术内容(中文素材优先)。
🤖 AI / LLM
1. GitHub Copilot 推出 Agent Workflows
- 链接:https://github.blog/copilot-agent-workflows
- 来源:GitHub
- 摘要:GitHub Copilot 推出 Agent Workflows,在 PR 中自动修复 / 重构 / 写测试。
2. Dependabot 推出 AI 自动修复
- 链接:https://github.blog/dependabot-ai-fix
- 来源:GitHub
- 摘要:Dependabot 集成 AI 自动修复漏洞,PR 中生成补丁并自动 commit。
🎨 前端 / Web
3. Playwright 2.0 推出 CI 集成
- 链接:https://playwright.dev/blog/2-0
- 来源:Microsoft
- 摘要:Playwright 2.0 推出 CI 集成,GitHub Actions 一键 E2E 测试。
⚙️ 后端 / 架构
4. GitHub Actions 推出 GPU Runner
- 链接:https://github.blog/actions-gpu
- 来源:GitHub
- 摘要:GitHub Actions 推出 GPU Runner,CI 中跑 AI 模型推理 / 训练。
5. Earthly 2.0 GA 推出 CI/CD 一体化
- 链接:https://earthly.dev/blog/2-0
- 来源:Earthly
- 摘要:Earthly 2.0 GA,本地 + CI 一致构建,跨平台(GitHub / GitLab / Jenkins)。
🚀 独立开发 / OPC
6. 即刻"独立开发者 CI/CD"专题
- 链接:https://m.okjike.com/ci-cd-2026
- 来源:即刻
- 摘要:即刻推出独立开发者 CI/CD 专题,200+ 开发者分享 GitHub Actions / Vercel / Cloudflare 自动化部署经验。
数据来源:掘金 / InfoQ 中文 / 即刻 / 少数派 / HN 采集时间:2026-07-27 09:00 (UTC+8)
📝
今日深度文
GitHub Actions + DevOps 实战:从 CI 到自动化部署
一句话结论:GitHub Actions = 独立开发者的"免费运维团队"。零成本(2000 分钟/月)/ 完整生态 / 与 Git 深度集成。本文从 CI 到自动化部署,含 8 个实战 Workflow。
背景
2026 年独立开发者必备 DevOps 工具:
- GitHub Actions:CI/CD(首选,免费 2000 分钟/月)
- Docker:容器化(与 7/19 关联)
- Vercel / Cloudflare:部署(与 7/18 / 7/26 关联)
- Playwright:E2E 测试
- Sentry:错误监控
- Dependabot:依赖安全
GitHub Actions 优势:
- 与 GitHub 深度集成
- 免费额度(2000 分钟/月,公共仓库无限)
- 完整 Marketplace(20000+ Action)
- 支持多平台(Linux / macOS / Windows)
- 支持 ARM(Apple Silicon)
6 大核心概念
1. Workflow(工作流)
# .github/workflows/ci.yml
name: CI
on:
push:
branches: [main]
pull_request:
branches: [main]
jobs:
test:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with:
node-version: 20
- run: npm ci
- run: npm test
2. Event(事件)
on:
push: # 推送
pull_request: # PR
schedule: # 定时
- cron: '0 0 * * *' # 每天凌晨
workflow_dispatch: # 手动触发
release: # 发布
types: [published]
issues: # Issue
types: [opened]
3. Job(任务)
jobs:
test:
runs-on: ubuntu-latest
steps: [...]
deploy:
needs: test # 依赖
runs-on: ubuntu-latest
if: github.ref == 'refs/heads/main' # 条件
steps: [...]
4. Step(步骤)
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Setup Node
uses: actions/setup-node@v4
with:
node-version: 20
- name: Install
run: npm ci
- name: Test
run: npm test
env:
API_KEY: ${{ secrets.API_KEY }}
5. Runner(运行环境)
runs-on: ubuntu-latest # Linux
# runs-on: macos-latest # macOS
# runs-on: windows-latest # Windows
# runs-on: ubuntu-22.04-arm # ARM
6. Action(操作)
# 官方
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
# 社区
- uses: actions/setup-pnpm@v4
- uses: arduino/setup-task@v2
# 自定义
- uses: ./my-action # 本地 action
8 个实战 Workflow
Workflow 1:基础 CI(Node.js)
# .github/workflows/ci.yml
name: CI
on:
push:
branches: [main]
pull_request:
branches: [main]
jobs:
test:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with:
node-version: 20
cache: 'npm'
- name: Install
run: npm ci
- name: TypeScript
run: npx tsc --noEmit
- name: Lint
run: npm run lint
- name: Test
run: npm test
env:
DATABASE_URL: postgresql://test:test@localhost:5432/test
- name: Build
run: npm run build
- name: Upload artifact
uses: actions/upload-artifact@v4
with:
name: build
path: dist/
Workflow 2:多 Node 版本测试
name: Multi-Node Test
on: [push, pull_request]
jobs:
test:
runs-on: ubuntu-latest
strategy:
matrix:
node-version: [18, 20, 22]
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with:
node-version: ${{ matrix.node-version }}
- run: npm ci
- run: npm test
Workflow 3:自动部署到 Vercel(与 7/18 关联)
name: Deploy
on:
push:
branches: [main]
jobs:
deploy:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with:
node-version: 20
- name: Install Vercel CLI
run: npm install -g vercel
- name: Pull Vercel config
run: vercel pull --yes --environment=production --token=${{ secrets.VERCEL_TOKEN }}
- name: Build
run: vercel build --prod --token=${{ secrets.VERCEL_TOKEN }}
- name: Deploy
run: vercel deploy --prebuilt --prod --token=${{ secrets.VERCEL_TOKEN }}
Workflow 4:Docker 镜像构建推送(与 7/19 关联)
name: Docker Build & Push
on:
push:
branches: [main]
tags: ['v*']
jobs:
docker:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Login to Docker Hub
uses: docker/login-action@v3
with:
username: ${{ secrets.DOCKER_USERNAME }}
password: ${{ secrets.DOCKER_TOKEN }}
- name: Build and push
uses: docker/build-push-action@v5
with:
context: .
push: true
tags: |
myuser/myapp:latest
myuser/myapp:${{ github.sha }}
cache-from: type=gha
cache-to: type=gha,mode=max
Workflow 5:E2E 测试(Playwright)
name: E2E Test
on:
push:
branches: [main]
jobs:
e2e:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with:
node-version: 20
- name: Install
run: npm ci
- name: Install Playwright
run: npx playwright install --with-deps
- name: Build
run: npm run build
- name: Start server
run: |
npm start &
sleep 10
- name: Run tests
run: npx playwright test
- name: Upload report
if: always()
uses: actions/upload-artifact@v4
with:
name: playwright-report
path: playwright-report/
Workflow 6:安全扫描
name: Security
on:
push:
branches: [main]
pull_request:
schedule:
- cron: '0 0 * * 1' # 每周一
jobs:
security:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
# 依赖漏洞扫描
- name: npm audit
run: npm audit --audit-level=moderate
# CodeQL 扫描
- name: Initialize CodeQL
uses: github/codeql-action/init@v3
with:
languages: javascript
- name: Perform CodeQL Analysis
uses: github/codeql-action/analyze@v3
# Secret 扫描
- name: TruffleHog
uses: trufflesecurity/trufflehog@main
with:
args: --directory=. --json
# SAST
- name: Semgrep
uses: returntocorp/semgrep-action@v1
Workflow 7:定时任务(Cron)
name: Daily Backup
on:
schedule:
- cron: '0 2 * * *' # 每天凌晨 2 点
workflow_dispatch:
jobs:
backup:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Backup database
run: |
pg_dump ${{ secrets.DATABASE_URL }} > backup.sql
echo "Backup created: $(date)"
- name: Upload to S3
uses: aws-actions/configure-aws-credentials@v4
with:
aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY }}
aws-secret-access-key: ${{ secrets.AWS_SECRET_KEY }}
aws-region: us-east-1
- name: Upload
run: |
aws s3 cp backup.sql s3://my-backups/$(date +%Y-%m-%d).sql
- name: Notify Slack
if: always()
uses: slackapi/slack-github-action@v1
with:
payload: |
{
"text": "Backup ${{ job.status }}: ${{ github.run_id }}"
}
env:
SLACK_WEBHOOK_URL: ${{ secrets.SLACK_WEBHOOK }}
Workflow 8:PR 自动化(AI 评审)
name: AI PR Review
on:
pull_request:
types: [opened, synchronize]
jobs:
review:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
with:
fetch-depth: 0
- name: Get diff
id: diff
run: |
echo "diff<<EOF" >> $GITHUB_OUTPUT
git diff origin/main...HEAD >> $GITHUB_OUTPUT
echo "EOF" >> $GITHUB_OUTPUT
- name: AI Review
uses: actions/github-script@v7
with:
script: |
const diff = `${{ steps.diff.outputs.diff }}`;
const prompt = `
审查以下 PR,重点关注:
1. 性能问题
2. 安全漏洞
3. TypeScript 类型安全
4. 错误处理
5. 测试覆盖
输出 Markdown 格式的审查报告。
${diff.slice(0, 8000)}
`;
const response = await fetch('https://api.anthropic.com/v1/messages', {
method: 'POST',
headers: {
'x-api-key': process.env.ANTHROPIC_API_KEY,
'anthropic-version': '2023-06-01',
'content-type': 'application/json',
},
body: JSON.stringify({
model: 'claude-sonnet-4-5',
max_tokens: 2048,
messages: [{ role: 'user', content: prompt }],
}),
});
const data = await response.json();
const review = data.content[0].text;
await github.rest.issues.createComment({
owner: context.repo.owner,
repo: context.repo.repo,
issue_number: context.issue.number,
body: `## 🤖 AI Review\n\n${review}`,
});
env:
ANTHROPIC_API_KEY: ${{ secrets.ANTHROPIC_API_KEY }}
5 个常用 Action
1. pnpm 安装
- uses: pnpm/action-setup@v4
with:
version: 9
2. 缓存依赖
- uses: actions/cache@v4
with:
path: ~/.npm
key: ${{ runner.os }}-node-${{ hashFiles('**/package-lock.json') }}
3. 上传 / 下载 Artifact
- uses: actions/upload-artifact@v4
with:
name: build
path: dist/
- uses: actions/download-artifact@v4
with:
name: build
path: dist/
4. 设置环境变量
- name: Set env
run: echo "VERSION=1.0.0" >> $GITHUB_ENV
5. SSH 部署
- name: Deploy via SSH
uses: appleboy/ssh-action@v1
with:
host: ${{ secrets.HOST }}
username: ${{ secrets.USERNAME }}
key: ${{ secrets.SSH_KEY }}
script: |
cd /app
git pull
npm ci
npm run build
pm2 restart app
5 个常见坑
坑 1:超时
默认超时 6 小时
免费 runner 内存 7GB
❌ 大型 build 卡死
✅ 拆分 job / 用缓存 / 用自托管 runner
坑 2:免费额度
免费:2000 分钟/月(Linux)
macOS / Windows:10x 计算(更贵)
❌ 大项目频繁跑 CI
✅ 缓存依赖 + 减少触发条件
坑 3:Secret 泄露
# ❌ 错误
echo "API_KEY=$API_KEY" >> $GITHUB_ENV
# ✅ 正确(仅本 step 可见)
env:
API_KEY: ${{ secrets.API_KEY }}
坑 4:并发问题
# ❌ 多个 PR 同时部署会冲突
on: pull_request
# ✅ 串行部署
concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: false
坑 5:依赖缓存失效
# ✅ 正确缓存 key
- uses: actions/setup-node@v4
with:
cache: 'npm' # 自动用 package-lock.json 作 key
与之前内容的关系
7/17 Rust + Axum → 后端
7/18 Vercel + Cloudflare → 部署
7/19 Docker → 容器化
7/20 OWASP → 安全
7/25 Deno 2 + Hono → 运行时
7/26 Workers + D1 → 边缘全栈
7/27 GitHub Actions → DevOps ← 今天
→ "框架 → 部署 → 容器 → 安全 → 运行时 → 边缘 → 自动化"
7 天落地路径
Day 1:第一个 Workflow
# .github/workflows/ci.yml
name: CI
on: [push]
jobs:
test:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with: { node-version: 20 }
- run: npm ci
- run: npm test
Day 2:多版本测试
strategy:
matrix:
node: [18, 20, 22]
Day 3:自动部署
# Vercel / Cloudflare Pages / Docker Hub
Day 4:E2E 测试
# Playwright
Day 5:安全扫描
# CodeQL / npm audit / TruffleHog
Day 6:定时任务
# Cron Trigger
Day 7:监控 + 优化
# 缓存 / 并发 / 自托管 runner
我的看法
GitHub Actions 是 2026 年独立开发者的"标配 DevOps":
- 零成本:免费 2000 分钟/月(个人够用)
- 完整生态:Marketplace 20000+ Action
- 深度集成:与 GitHub 代码 / PR / Issue
- 多平台:Linux / macOS / Windows / ARM
- 可扩展:自托管 runner + GPU runner
对独立开发者的建议:
- 必装 CI:每次 PR 自动跑测试
- 必装 Deploy:main 分支自动部署
- 必装安全:每周扫描漏洞
- 可选 AI Review:自动 PR 审查
参考
- GitHub Actions 文档
- Workflow 语法
- Marketplace
- Docker(7/19)
- Vercel+Cloudflare(7/18)
- OWASP(7/20)
- Workers + D1(7/26)
本文基于 GitHub Actions 2026 年 7 月最新版本。
📚 同主题文章
⚙️后端 / 架构·
Playwright + Vitest 实战:现代 Web 测试完整指南 2026
现代 Web 测试 = Vitest(单元/集成)+ Playwright(E2E)+ 视觉回归。本文从 0 到完整测试体系,含 4 个真实项目 + 测试金字塔 + AI 测试。
PlaywrightVitest测试
⚙️后端 / 架构·
Docker 实战:从入门到生产级多阶段镜像
Docker 是 2026 年部署的事实标准。本文从 0 到生产级多阶段构建,含 4 个真实项目 + 镜像优化 10x + Docker Compose 编排实战。
DockerDevOps容器化
⚙️后端 / 架构·
Docker 多阶段构建最佳实践:从 1GB 到 100MB
Docker 多阶段构建可以把镜像从 1GB 缩小到 100MB。本文演示 6 个真实案例,包括 Node.js / Go / Rust。
Docker多阶段构建镜像优化