温馨提示×

Linux环境下如何配置GitLab CI/CD

小樊
48
2025-11-22 22:11:43
栏目: 智能运维

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:
      • build
      • test
      • deploy
    • variables: NODE_VERSION: “18”
    • build_job: stage: build image: node:$NODE_VERSION script:
      • npm ci
      • npm run build --if-present artifacts: paths:
        • dist/ expire_in: 1 week
    • test_job: stage: test image: node:$NODE_VERSION script:
      • npm test – --ci
    • 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/exceptrules 控制触发分支;用 variables 管理密钥与镜像标签;Docker 场景优先使用 services: docker:dind 并正确设置 DOCKER_HOSTDOCKER_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 等内置变量完成登录与推送。

0