温馨提示×

如何在Debian上利用GitLab进行持续集成与持续部署

小樊
33
2025-12-28 23:14:19
栏目: 智能运维

在 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),选择执行器(推荐 shelldocker)。
    • 启动与自启:sudo systemctl enable --now gitlab-runner;验证状态:sudo gitlab-runner status。
  • 执行器选择建议:
    • shell:直接在本机执行命令,部署到本机或内网主机简单高效。
    • docker:环境隔离、可复现,适合多语言/多版本并行构建与测试。

四 编写 .gitlab-ci.yml 与变量管理

  • 基础流水线示例(Shell 执行器,含产物与依赖):
    • stages:
      • build
      • test
      • deploy
    • 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_USERSERVER_IPPROJECT_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,并对流水线日志进行审计。

0