GitLab CI/CD
GitLab 原生 CI/CD,.gitlab-ci.yml、runner 和环境。
CI/CD进阶
为什么
GitLab CI 内置 GitLab,.gitlab-ci.yml、auto-devops 和容器仓库。Runner 可共享或自托管,含自动扩缩。
何时使用
GitLab 上项目用 GitLab CI。非 GitLab 避免(无 GitHub Actions 优势)。
如何做
1. 配置 — 仓库根 .gitlab-ci.yml
2. 阶段 — build、test、deploy
3. Runner — 共享或自托管,标签
4. 变量 — CI/CD 设置或 .gitlab-ci.yml
5. 缓存 — cache key 依赖
6. 产物 — 作业间传递
7. 环境 — 部署 staging/prod
示例
# .gitlab-ci.yml
stages: [build, test, deploy]
build:
stage: build
image: node:20
script: [npm ci, npm run build]
artifacts: { paths: [dist] }
test:
stage: test
image: node:20
script: [npm ci, npm test]
cache: { key: npm, paths: [node_modules] }
deploy:prod:
stage: deploy
image: node:20
script: [npx vercel --prod --token $VERCEL_TOKEN]
environment: { name: production, url: https://app.com }
only: { refs: [main] }
variables: { VERCEL_TOKEN: $VERCEL_TOKEN }
常见问题
- ⚠无 runner — 无共享 runner 或自托管未注册,查设置
- ⚠作业未运行 — only/except 规则,查分支和条件
- ⚠环境间配置漂移 — 使用基础设施即代码(Terraform/Pulumi)保持 dev/staging/prod 一致
最佳实践
- ✓依赖用 cache — 加速作业,lockfile 哈希做 cache key
- ✓部署用环境 — 跟踪部署,UI 回滚
- ✓设置健康检查和优雅关闭 — 处理 SIGTERM 以在退出前排空进行中的请求