Linux环境下配置 GitLab CI/CD 实操指南
一 架构与前置准备
- 核心组件:在 Linux 服务器上部署 GitLab(或使用 SaaS gitlab.com),为项目配置 GitLab Runner 执行流水线任务,流水线由项目根目录的 .gitlab-ci.yml 定义。Runner 支持多种执行器(如 Shell、Docker、Docker-in-Docker),可按项目选择。若使用容器化 GitLab,可用 Docker Compose 快速启动实例。以上组件与流程是 Linux 上落地 CI/CD 的标准做法。
二 安装与注册 Runner
- Ubuntu/Debian 安装 Runner
- 添加仓库并安装:
- curl -L https://packages.gitlab.com/install/repositories/runner/gitlab-runner/script.deb.sh | sudo bash
- sudo apt-get update && sudo apt-get install -y gitlab-runner
- 注册 Runner(交互式或命令行):
- 交互式:sudo gitlab-runner register
- 命令行:sudo gitlab-runner register --url https://gitlab.com --token
- 启动服务:sudo gitlab-runner start(可按需配置为系统服务并设置运行用户与工作目录)。
- CentOS/RHEL 安装 Runner
- 添加仓库并安装:
- curl -L https://packages.gitlab.com/install/repositories/runner/gitlab-runner/script.rpm.sh | sudo bash
- sudo yum install -y gitlab-runner
- 注册与启动同上。
- Runner 执行器选择
- Shell:直接在宿主机执行,适合简单任务或需要本机工具链的场景。
- Docker:环境隔离、可复用,适合多语言/多版本并行构建。
- Docker-in-Docker(DinD):在容器内构建/运行 Docker 镜像,适合需要推送镜像到 GitLab Container Registry 的流水线。
三 编写 .gitlab-ci.yml 示例
- 示例一 通用多阶段流水线(Node.js)
- stages:
- variables:
NODE_VERSION: “18”
- build_job:
stage: build
image: node:$NODE_VERSION
script:
- npm ci
- npm run build --if-present
artifacts:
paths:
- test_job:
stage: test
image: node:$NODE_VERSION
script:
- deploy_job:
stage: deploy
image: alpine:latest
script:
- echo “Deploying to $DEPLOY_HOST”
- scp -r dist/ $DEPLOY_USER@$DEPLOY_HOST:/var/www/myapp
only:
- main
environment: production
- 示例二 Docker 镜像构建与推送(使用 GitLab 容器镜像仓库)
- variables:
DOCKER_DRIVER: overlay2
IMAGE_TAG: $CI_REGISTRY_IMAGE:$CI_COMMIT_SHA
- build_image:
stage: build
image: docker:24.0
services:
- docker:24.0-dind
variables:
DOCKER_HOST: tcp://docker:2375
DOCKER_TLS_CERTDIR: “”
script:
- docker login -u $CI_REGISTRY_USER -p $CI_REGISTRY_PASSWORD $CI_REGISTRY
- docker build -t $IMAGE_TAG .
- docker push $IMAGE_TAG
only:
- main
- 要点
- 使用 stages 定义阶段顺序;用 artifacts 在阶段间传递产物;用 only/except 或 rules 控制触发分支;用 variables 管理密钥与镜像标签;Docker 场景优先使用 services: docker:dind 并正确设置 DOCKER_HOST 与 DOCKER_TLS_CERTDIR。
四 触发与监控流水线
- 触发方式:将 .gitlab-ci.yml 提交并推送到仓库后,GitLab 会自动触发流水线;也可在 CI/CD → Pipelines 页面手动运行。
- 查看与调试:在项目的 CI/CD → Jobs 查看作业日志与状态,定位失败原因;必要时在本地复现命令或在 Runner 宿主机排查环境依赖。
五 安全与网络要点
- 防火墙与端口:开放 SSH 22、HTTP 80、HTTPS 443 等必要端口,确保 Runner 与 GitLab 实例之间网络可达。
- Runner 安全
- 避免使用 root 运行 Runner,建议创建专用系统用户(如 gitlab-runner)。
- 使用 Docker 执行器 可实现环境隔离,减少宿主机污染。
- 涉及生产部署时,使用 CI/CD 变量 或 Secrets 管理凭据,避免明文写在脚本中。
- 容器与镜像
- 使用 Docker-in-Docker 时,优先配置 overlay2 存储驱动与合适的并发限制,避免资源争用。
- 推送镜像到 GitLab Container Registry 时,使用 $CI_REGISTRY、$CI_REGISTRY_USER、$CI_REGISTRY_PASSWORD 等内置变量完成登录与推送。