SuperAPI AI 工具集

gitlab-ci

部署与运维

查看项目

更新于 10-15 11:54

技能介绍

用途

GitLab CI/CD 是 GitLab 集成的持续集成与持续交付系统,用于自动化软件交付流水线。该技能适用于以下场景:在 GitLab 中搭建 CI/CD 流水线、配置 GitLab Runner(共享或自托管)、创建多阶段部署流水线、实现 GitLab Auto DevOps、管理 CI/CD 变量与密钥。

前置条件

  • GitLab 仓库(gitlab.com 或自托管)
  • 对 YAML 的基本理解
  • 若使用自托管 Runner:Linux 服务器或 Kubernetes 集群

主要能力

流水线配置

在仓库根目录创建 .gitlab-ci.yml,可定义 stages(如 build、test、deploy)、全局 variables,以及各作业的 stage、image、script、artifacts 等。示例中构建作业产出 dist/ 制品并设置 expire_in 为 1 小时;测试作业通过 coverage 正则提取覆盖率;部署作业设置 environment 并仅对 main 分支运行。

作业配置

  • 基于规则的执行:使用 rules 配合 if 条件(如 $CI_COMMIT_BRANCH == "main"、$CI_PIPELINE_SOURCE == "merge_request_event")控制 when(manual、never、on_success)。
  • 并行作业:通过 parallel: 3 配合 $CI_NODE_INDEX/$CI_NODE_TOTAL 分片测试。
  • 矩阵构建:parallel.matrix 可组合 NODE_VERSION 与 OS 等变量生成多个作业。
  • 缓存:cache 支持按 key(可基于 package-lock.json 等文件)缓存 node_modules/ 等路径,policy 可选 pull-push 或 pull。
  • 制品:artifacts 可指定 paths、reports(junit、coverage_report 使用 cobertura 格式)、expire_in 和 when。

环境与部署

可定义 deploy_staging 等部署作业,设置 environment 的 name、url 和 on_stop,并配套 stop_staging 作业(action: stop,when: manual)实现环境停止。

Docker 构建

使用 docker:24 镜像与 docker:24-dind 服务,设置 DOCKER_TLS_CERTDIR,通过 $CI_REGISTRY_USER、$CI_REGISTRY_PASSWORD、$CI_REGISTRY 登录并构建、推送镜像(标签使用 $CI_COMMIT_SHA)。

GitLab Runner

安装:通过 packages.gitlab.com 脚本安装 gitlab-runner,再使用 gitlab-runner register 注册(指定 url、registration-token、executor、docker-image)。配置位于 /etc/gitlab-runner/config.toml,可设置 name、url、token、executor 及 runners.docker 的 image、privileged、volumes。作业可通过 tags 指定 Runner 标签(如 docker、linux)。

CI/CD 变量

在 Settings > CI/CD > Variables 中定义受保护、掩码的变量(如 AWS_ACCESS_KEY_ID、AWS_SECRET_ACCESS_KEY)。作业中可直接引用变量,也可在作业内定义 variables(如 AWS_DEFAULT_REGION)。

复用与组合

  • include:可引入模板(如 Security/SAST.gitlab-ci.yml)、其他项目的文件或本地文件。
  • extend:通过隐藏作业(如 .base_job)复用 image、before_script 等配置。
  • 多项目流水线:使用 trigger 触发下游项目(指定 project、branch、strategy: depend)。

常见问题

  • 流水线卡住:作业一直 pending,需检查 Runner 可用性与标签匹配。
  • Docker-in-Docker 失败:无法连接 Docker 守护进程,需使用 docker:dind 服务并正确配置 TLS。
  • 缓存不生效:作业间缓存未命中,需检查缓存 key 并确保 Runner 共享分布式缓存。

最佳实践

  • 复杂条件使用 rules 替代 only/except。
  • 利用 GitLab 内置安全扫描模板。
  • 使用作业依赖优化流水线速度。
  • 为合并请求实现 review apps。
  • 积极缓存依赖。
  • 使用制品在阶段间传递数据。

相关技能

github-actions(GitHub CI/CD 替代方案)、argocd-gitops(GitOps 部署)、container-registries(镜像仓库管理)。

限制

资料未提供该技能的具体收费、价格、平台支持范围或效果数据,暂未提供相关信息。