温馨提示×

GitLab在CentOS上的CI/CD配置

小樊
42
2025-11-29 18:15:02
栏目: 智能运维

在 CentOS 上配置 GitLab CI/CD 的完整流程


一 环境准备与网络

  • 系统建议:CentOS 7/8,硬件至少 2 核 CPU / 4GB 内存 / 20GB 磁盘,确保可访问互联网。
  • 安装常用依赖并启动服务:
    sudo yum update -y
    sudo yum install -y curl policycoreutils openssh-server postfix
    sudo systemctl enable --now sshd postfix
  • 防火墙放行端口:
    sudo firewall-cmd --permanent --add-service=http
    sudo firewall-cmd --permanent --add-service=https
    sudo firewall-cmd --permanent --add-service=ssh
    sudo firewall-cmd --reload
  • 说明:若你同时在同一台机器部署 GitLab 服务,以上准备同样适用;若仅部署 Runner,以上准备已足够。

二 安装与注册 GitLab Runner

  • 安装 Runner(CentOS 使用 RPM 仓库):
    curl -L https://packages.gitlab.com/install/repositories/runner/gitlab-runner/script.rpm.sh | sudo bash
    sudo yum install -y gitlab-runner
  • 注册 Runner(两种常见方式,二选一或并存):
    • 交互式注册:
      sudo gitlab-runner register
      按提示输入 GitLab 实例 URLRegistration token(在项目 Settings → CI/CD → Runners 获取),选择 Executor(如 shelldocker),如选 Docker 还需填写默认镜像(如 alpine:latest)。
    • 非交互式注册(示例为 Docker 执行器):
      sudo gitlab-runner register --non-interactive
      –executor “docker”
      –docker-image “alpine:latest”
      –url “http://your-gitlab.example.com”
      –registration-token “YOUR_TOKEN”
      –description “docker-runner”
      –tag-list “docker,centos”
      –run-untagged “true”
      –locked “false”
      –docker-volumes /var/run/docker.sock:/var/run/docker.sock
      –docker-privileged “true”
  • 常用管理命令:
    sudo gitlab-runner start | stop | restart
    sudo gitlab-runner list
    sudo gitlab-runner verify
  • 提示:Runner 注册完成后,在项目 Runners 页面应显示为 online,并带有你设置的 tags

三 编写 .gitlab-ci.yml 示例

  • 示例一 通用多阶段流水线(适合大多数项目) stages:

    • build
    • test
    • deploy

    variables: NODE_VERSION: “18”

    before_script:

    • echo “Node version: ${NODE_VERSION}”
    • node -v || (curl -fsSL https://rpm.nodesource.com/setup_${NODE_VERSION}.x | bash - && yum install -y nodejs)
    • npm ci --quiet

    build_job: stage: build script: - npm run build --if-present artifacts: paths: - dist/ expire_in: 1 week

    test_job: stage: test script: - npm run test – --ci coverage: ‘/Lines\s*:\s*(\d+.\d+)%/’

    deploy_job: stage: deploy script: - echo “Deploying to $CI_ENVIRONMENT_NAME” - rsync -avz --delete dist/ user@prod-server:/var/www/myapp/ environment: name: production url: https://myapp.example.com only: - main when: manual

  • 示例二 Docker 镜像构建与推送(使用 GitLab 内置容器镜像仓库) stages:

    • build
    • test

    variables: DOCKER_DRIVER: overlay2 IMAGE_TAG: $CI_REGISTRY_IMAGE:$CI_COMMIT_REF_SLUG

    before_script:

    • docker login -u “$CI_REGISTRY_USER” -p “$CI_REGISTRY_PASSWORD” “$CI_REGISTRY”

    build_image: stage: build script: - docker build -t “$IMAGE_TAG” . - docker push “$IMAGE_TAG”

    test_image: stage: test script: - docker run --rm “$IMAGE_TAG” npm test – --ci

  • 要点说明:

    • 通过 stages 定义阶段顺序;artifacts 用于在各阶段间传递产物;environmentonly/except 控制部署环境与触发分支;variables 支持内置变量(如 CI_REGISTRY_IMAGE、CI_COMMIT_REF_SLUG)与自定义变量。

四 触发流水线与安全加固

  • 触发与查看:将 .gitlab-ci.yml 提交并推送到仓库后,GitLab 会自动创建流水线;在项目 CI/CD → Pipelines 查看运行状态与日志,定位失败原因。
  • 变量与密钥:在 Settings → CI/CD → Variables 配置敏感信息(如 SSH_PRIVATE_KEY、REGISTRY_USER、REGISTRY_PASSWORD),勾选 Masked 与(必要时)Protected,避免明文出现在日志中。
  • Runner 安全:
    • 使用 Docker 执行器时,推荐挂载 /var/run/docker.sock 并启用 –docker-privileged,以便容器内构建/推送镜像;务必限定 Runner 的 tags 与可运行项目,避免越权。
    • 使用 Shell 执行器时,Runner 以系统用户身份执行脚本,请确保该用户对代码与部署目标具备最小必要权限,并谨慎授予 sudo

0