Appearance
GitLab CI
什么是 GitLab CI
GitLab CI(Continuous Integration)是 GitLab 提供的 CI/CD 服务,它允许你在 GitLab 仓库中自动执行软件构建、测试和部署流程。GitLab CI 使用 .gitlab-ci.yml 文件来定义 CI/CD 流水线,可以响应仓库中的事件(如推送、合并请求等)。
GitLab CI 的特点
1. 与 GitLab 集成
- 直接在 GitLab 仓库中配置
- 响应 GitLab 事件
- 与 GitLab 生态系统无缝集成
2. 灵活的流水线
- 自定义流水线
- 支持多种事件触发
- 并行和串行执行任务
- 支持复杂的工作流
3. 强大的执行环境
- 支持 Docker 容器
- 可配置的执行环境
- 支持多种操作系统
4. 可视化
- 直观的流水线视图
- 实时构建状态
- 详细的构建日志
5. 免费使用
- 自托管 GitLab 免费
- GitLab.com 有一定的免费额度
GitLab CI 的基本概念
1. 流水线(Pipeline)
- 由一个或多个作业组成
- 可以由事件触发
- 按照定义的顺序执行
2. 作业(Job)
- 流水线中的一个独立单元
- 运行在 Docker 容器或虚拟机中
- 可以并行或串行执行
3. 阶段(Stage)
- 作业的逻辑分组
- 同一阶段的作业并行执行
- 阶段按顺序执行
4. 触发器(Trigger)
- 触发流水线的事件
- 如 push、merge_request、schedule 等
5. 变量(Variable)
- 用于存储配置值
- 可以在
.gitlab-ci.yml中定义 - 可以在 GitLab 界面中设置
创建 GitLab CI 流水线
基本流水线示例
yaml
stages:
- build
- test
- deploy
build:
stage: build
script:
- npm install
- npm run build
artifacts:
paths:
- dist/
test:
stage: test
script:
- npm test
deploy:
stage: deploy
script:
- npm run deploy
only:
- main流水线触发事件
yaml
# 触发规则
rules:
- if: '$CI_COMMIT_BRANCH == "main"'
when: always
- if: '$CI_PIPELINE_SOURCE == "merge_request_event"'
when: always
- if: '$CI_PIPELINE_SOURCE == "schedule"'
when: always
# 或使用 only/except
only:
- main
- merge_requests
except:
- tags矩阵构建
yaml
test:
stage: test
script:
- npm test
parallel:
matrix:
- NODE_VERSION: [14, 16, 18]
OS: [ubuntu-latest, windows-latest]
variables:
NODE_VERSION: "16"
script:
- echo "Node version: $NODE_VERSION"
- echo "OS: $OS"
- npm install
- npm testGitLab CI 的执行环境
1. GitLab Runner
- 执行 CI/CD 作业的代理
- 可以安装在各种环境中
- 支持多种执行器(Docker、Shell、SSH 等)
2. Docker 执行器
- 使用 Docker 容器运行作业
- 提供隔离的执行环境
- 可以使用自定义镜像
3. 共享 Runner vs 专用 Runner
- 共享 Runner:由 GitLab 提供
- 专用 Runner:自己安装和管理
GitLab CI 最佳实践
1. 流水线设计
- 合理划分阶段
- 保持作业简洁
- 使用并行执行提高效率
2. 性能优化
- 缓存依赖项
- 使用适当的 Docker 镜像
- 优化构建过程
3. 安全性
- 使用 GitLab CI/CD 变量存储敏感信息
- 限制作业的权限
- 定期更新依赖项
4. 可维护性
- 使用模板和包含文件
- 模块化流水线配置
- 提供清晰的注释
5. 监控和调试
- 添加详细的日志
- 使用 GitLab CI 日志查看器
- 测试流水线变更
GitLab CI 常见问题
1. 流水线不触发
- 检查
.gitlab-ci.yml文件位置 - 检查触发规则
- 检查 GitLab Runner 状态
2. 构建失败
- 检查构建日志
- 检查依赖项
- 检查环境配置
3. 性能问题
- 优化缓存策略
- 减少不必要的步骤
- 使用并行构建
4. 安全问题
- 避免硬编码敏感信息
- 使用 GitLab CI/CD 变量
- 限制 Runner 的权限
学习资源
实践练习
- 创建一个简单的 GitLab CI 流水线
- 配置自动测试
- 实现持续部署
- 使用矩阵构建测试多个版本
- 集成第三方服务