在 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 实例 URL 与 Registration token(在项目 Settings → CI/CD → Runners 获取),选择 Executor(如 shell 或 docker),如选 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:
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:
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 用于在各阶段间传递产物;environment 与 only/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。