在 Debian 上使用 GitLab 搭建 CI/CD 的完整实践
一 架构与准备
- 组件分工:在 Debian 上部署 GitLab CE 作为代码托管与流水线平台,安装 GitLab Runner 作为执行器,在项目的 .gitlab-ci.yml 中定义 stages(build、test、deploy) 与 jobs,Runner 按配置拉取代码并执行任务,实现自动化构建、测试与部署。
- 基础环境建议:更新系统并安装常用依赖(如 curl、openssh-server、ca-certificates、postfix),便于后续安装与通知;如使用容器化 Runner,需确保宿主机具备 Docker 环境。
二 安装与初始化 GitLab CE
- 安装步骤(Debian 官方仓库方式):
- 更新并安装依赖:sudo apt update && sudo apt install -y curl openssh-server ca-certificates postfix
- 添加 GitLab CE 仓库并安装:curl -sS https://packages.gitlab.com/install/repositories/gitlab/gitlab-ce/script.deb.sh | sudo bash
- 设置外部访问地址并安装:sudo EXTERNAL_URL=“http://your_server_ip_or_domain” apt install -y gitlab-ce
- 应用配置并启动:sudo gitlab-ctl reconfigure && sudo gitlab-ctl start
- 访问与初始化:浏览器打开 EXTERNAL_URL,完成管理员账号设置。
- 网络与证书:开放 80/443 端口;生产环境建议启用 HTTPS/Let’s Encrypt 或自有证书,保障数据传输安全。
三 安装与注册 GitLab Runner
- 安装 Runner(与 GitLab CE 分离部署更常见):
- 添加 Runner 仓库并安装:curl -L https://packages.gitlab.com/install/repositories/runner/gitlab-runner/script.deb.sh | sudo bash && sudo apt install -y gitlab-runner
- 注册到项目:sudo gitlab-runner register,依次输入 GitLab 实例 URL、项目注册令牌(路径:项目 → Settings → CI/CD → Runners)、Runner 描述与标签(如 deploy),选择执行器(推荐 shell 或 docker)。
- 启动与自启:sudo systemctl enable --now gitlab-runner;验证状态:sudo gitlab-runner status。
- 执行器选择建议:
- shell:直接在本机执行命令,部署到本机或内网主机简单高效。
- docker:环境隔离、可复现,适合多语言/多版本并行构建与测试。
四 编写 .gitlab-ci.yml 与变量管理
- 基础流水线示例(Shell 执行器,含产物与依赖):
- stages:
- variables:
MAVEN_OPTS: “-Dmaven.repo.local=.m2/repository”
- build_job:
stage: build
script:
- mvn dependency:go-offline
- mvn package -DskipTests
artifacts:
paths:
- target/*.jar
expire_in: 1 hour
- test_job:
stage: test
script:
- mvn test
needs: [“build_job”]
- deploy_job:
stage: deploy
script:
- scp target/*.jar user@prod-server:/opt/app/
- ssh user@prod-server “systemctl restart app-service”
only:
- main
needs: [“test_job”]
- 变量与 SSH 安全(避免硬编码敏感信息):
- 在 GitLab 项目 → Settings → CI/CD → Variables 添加:SSH_PRIVATE_KEY(设为 Masked、Protected)、SERVER_USER、SERVER_IP、PROJECT_PATH 等。
- 在 before_script 中初始化 SSH(示例):
- ‘which ssh-agent || (apt-get update -y && apt-get install -y openssh-client)’
- eval $(ssh-agent -s)
- echo “$SSH_PRIVATE_KEY” | tr -d ‘\r’ | ssh-add -
- mkdir -p ~/.ssh && chmod 700 ~/.ssh
- ssh-keyscan $SERVER_IP >> ~/.ssh/known_hosts && chmod 644 ~/.ssh/known_hosts
- 触发策略:测试环境可自动部署(如 only: main),生产环境建议 when: manual 并绑定 environment(如 name: production, url: https://your-prod/)。
五 运行、监控与优化
- 触发与查看:推送代码至 main/develop 等分支后,GitLab 自动触发流水线;在项目 → CI/CD → Pipelines 查看状态与日志,定位失败原因。
- 性能优化:
- 使用 cache 缓存依赖目录(如 node_modules、~/.m2)显著加速构建:cache: paths: [node_modules/]
- 使用 artifacts 在作业间传递构建产物(如 target/*.jar),并通过 needs 明确依赖关系,缩短等待时间。
- 部署方式扩展:
- Docker 部署:在 Runner 或作业中构建镜像并推送到 GitLab Container Registry 或私有仓库,目标机通过 SSH 拉取并运行容器(示例命令含 docker build/push/run 与重启策略)。
- 蓝绿/金丝雀:结合多环境、流量切换与健康检查实现零停机或低风险发布(按需扩展)。
- 安全与合规:
- 生产部署使用 手动审批 与 受保护分支/变量;Runner 与部署主机采用最小权限与 SSH 密钥登录,禁用密码登录。
- 定期备份 GitLab 与项目数据,启用 HTTPS,并对流水线日志进行审计。