SuperAPI AI 工具集

gitlab-ci

部署与运维

查看项目

更新于 10-23 02:19

技能介绍

用途

GitLab CI/CD 用于自动化软件交付流水线,把构建、测试、部署等环节串联起来。当需要在 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 以及各阶段作业。示例中 build 作业使用 node 镜像执行 npm ci 与 npm run build,并通过 artifacts 输出 dist/,设置 expire_in 为 1 hour;test 作业执行 npm test 并配置 coverage 正则;deploy 作业通过 environment 指定生产环境名称与 URL,并用 only 限定 main 分支。

作业配置

  • 基于 rules 的执行控制:可按分支、流水线来源等条件设置 when(manual、never、on_success)。
  • 并行作业:通过 parallel 数值拆分测试分片,结合 CI_NODE_INDEX 与 CI_NODE_TOTAL 使用。
  • 矩阵构建:通过 parallel.matrix 组合不同 NODE_VERSION 与 OS 变量生成多个作业。

缓存与制品

  • 缓存:通过 cache.key(可基于 package-lock.json 等文件)与 paths 缓存 node_modules/ 等目录,policy 可设为 pull-push 或 pull。
  • 制品:通过 artifacts.paths 保存 dist/、coverage/ 等,可配置 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 镜像仓库后构建并推送镜像(使用 CI_REGISTRY_USER、CI_REGISTRY_PASSWORD、CI_REGISTRY、CI_REGISTRY_IMAGE、CI_COMMIT_SHA 等变量)。

GitLab Runner

  • 安装与注册:资料给出 gitlab-runner --version 检查版本,以及 gitlab-runner register 命令示例(指定 url、registration-token、executor docker、docker-image alpine:latest)。资料说明 Runner 需从组织批准的签名包安装,本指南不获取或执行远程引导脚本。
  • Runner 配置:/etc/gitlab-runner/config.toml 中可配置 name、url、token、executor,以及 runners.docker 下的 image、privileged、volumes。
  • Runner 标签:作业可通过 tags 指定所需 Runner 标签(如 docker、linux)。

CI/CD 变量

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

Include 与 Extend

  • include 可引入模板(如 Security/SAST.gitlab-ci.yml)、其他项目的文件或本地文件。
  • extends 可复用基础作业(如 .base_job 定义 image 与 before_script),build 与 test 作业继承后各自定义 script。

多项目流水线

通过 trigger 配置下游项目(project、branch、strategy: depend)触发多项目流水线。

使用方式

在仓库根目录编写 .gitlab-ci.yml,按阶段组织作业;根据需要在 GitLab 界面配置变量与 Runner;通过 include 复用模板、通过 extends 复用作业定义;使用 rules 控制执行条件,使用 cache 与 artifacts 在作业间传递数据。

适用场景

  • 在 GitLab 中搭建从构建到部署的自动化流水线
  • 配置共享或自托管 Runner
  • 多阶段部署与环境管理
  • Docker 镜像构建与推送
  • 多项目流水线编排

常见问题

  • 流水线卡住:作业一直处于 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(镜像仓库管理)。