Skip to content

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 test

GitLab 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 的权限

学习资源

实践练习

  1. 创建一个简单的 GitLab CI 流水线
  2. 配置自动测试
  3. 实现持续部署
  4. 使用矩阵构建测试多个版本
  5. 集成第三方服务

基于 VitePress 的本地知识库