从代码提交到构建、测试、安全扫描、制品发布和部署的自动化。以 GitHub Actions 为例,思路适用于 GitLab CI 等。
lint → test → build → scan → package → deploy-staging → approve → deploy-prod
name: ci-cd
on:
push:
branches: [main]
pull_request:
permissions:
contents: read
packages: write
concurrency:
group: ci-${{ github.ref }}
cancel-in-progress: true
jobs:
test:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with:
node-version: 20
cache: npm
- run: npm ci
- run: npm test
build:
needs: test
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- run: docker build -t app:${{ github.sha }} .
- run: docker push registry.example.com/app:${{ github.sha }}
- uses: aquasecurity/trivy-action@...
with:
image-ref: registry.example.com/app:${{ github.sha }}
exit-code: '1'
部署到 staging,跑冒烟测试。
生产部署加 environment 审批和 OIDC 凭据。
配置回滚:保留上一个镜像 tag,部署失败自动回滚。
pull_request_target 执行不可信代码。github-actions — 工作流docker-buildx — 镜像构建trivy — 镜像扫描kubectl / helm — 部署合上页面,先回答,再展开对照。
pull_request_target 执行 fork PR 的不可信代码?pull_request_target 下执行。exit-code: '1',扫描失败即可阻断发布。