用途
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(镜像仓库管理)。
限制
资料未提供该技能的具体收费、价格、平台支持范围或效果数据,暂未提供相关信息。