温馨提示×

CentOS环境下GitLab的自动化运维实践

小樊
42
2025-11-17 20:07:53
栏目: 智能运维

CentOS环境下GitLab自动化运维实践

一 环境准备与安装

  • 系统准备:建议使用 CentOS 7/8/Stream,内存至少 4GB(生产建议 8GB+),磁盘 50GB+;安装常用工具并开启 firewalld
  • 安装依赖与邮件服务:
    sudo yum update -y
    sudo yum install -y curl openssh-server policycoreutils-python perl git nodejs rsync cronie postfix
    sudo systemctl enable --now sshd postfix
    sudo firewall-cmd --permanent --add-service=ssh
    sudo firewall-cmd --permanent --add-service=https
    sudo firewall-cmd --reload
  • 添加仓库并安装 GitLab CE:
    curl -sS https://packages.gitlab.com/install/repositories/gitlab/gitlab-ce/script.rpm.sh | sudo bash
    sudo EXTERNAL_URL=“http://your_gitlab_server_ip_or_domain” yum install -y gitlab-ce
    sudo gitlab-ctl reconfigure && sudo gitlab-ctl start
  • 访问验证:浏览器打开 http://your_gitlab_server_ip_or_domain,首次登录设置管理员密码。
  • 可选容器化部署(便于迁移与回滚):
    mkdir -p /data/gitlab/{config,logs,data}
    docker run -d --hostname gitlab.local -p 8443:443 -p 8081:80 -p 2222:22 \ –name gitlab --restart always \ -v /data/gitlab/config:/etc/gitlab \ -v /data/gitlab/logs:/var/log/gitlab \ -v /data/gitlab/data:/var/opt/gitlab \ gitlab/gitlab-ce:latest
    访问 http://gitlab.local:8081 完成初始化。

二 自动化安装与配置

  • 使用 Ansible 编排安装与初始化(示例 Playbook):
    • hosts: gitlab_servers
      become: yes
      vars:
      gitlab_external_url: “http://gitlab.example.com”
      tasks:
      • name: Install dependencies
        yum: name={{ item }} state=present
        loop: [curl, openssh-server, policycoreutils-python, postfix]
      • name: Enable services
        systemd: name={{ item }} enabled=yes state=started
        loop: [sshd, postfix]
      • name: Add GitLab CE repo and install
        shell: |
        curl -sS https://packages.gitlab.com/install/repositories/gitlab/gitlab-ce/script.rpm.sh | bash
        yum install -y gitlab-ce
        args: { creates: /usr/bin/gitlab-ctl }
      • name: Configure external_url
        lineinfile:
        path: /etc/gitlab/gitlab.rb
        regexp: '^external_url ’
        line: “external_url ‘{{ gitlab_external_url }}’”
        backup: yes
      • name: Reconfigure and start
        command: gitlab-ctl reconfigure
  • 说明:也可将防火墙放行、用户与目录权限、时区等纳入 Playbook,实现一键交付与重复部署。

三 CI/CD 流水线设计与 Runner 部署

  • 安装 GitLab Runner(CentOS):
    curl -L https://packages.gitlab.com/install/repositories/runner/gitlab-runner/script.rpm.sh | sudo bash
    sudo yum install -y gitlab-runner
    sudo systemctl enable --now gitlab-runner
  • 注册 Runner(在项目 Settings → CI/CD → Runners 获取 URLRegistration token):
    sudo gitlab-runner register --url <GitLab_URL> --registration-token \ –executor shell --description “centos-runner” --tag-list “shell,centos” --run-untagged true --locked false
  • 多 Runner 与隔离:按用途拆分 Runner(如 build/test/deploy),使用 tagsexecutor(shell、docker、kubernetes)隔离环境与权限。
  • 基础 .gitlab-ci.yml 示例(Maven 项目):
    stages:
    • build
    • test
    • deploy
      variables:
      MAVEN_OPTS: “-Dmaven.repo.local=.m2/repository”
      cache:
      paths:
      • .m2/repository/
      • target/
        build_job:
        stage: build
        script:
      • mvn clean package -DskipTests
        artifacts:
        paths:
        • target/*.jar
          test_job:
          stage: test
          script:
      • mvn test
        artifacts:
        reports:
        junit: target/surefire-reports/TEST-*.xml
        deploy_job:
        stage: deploy
        script:
      • scp target/*.jar user@prod-server:/opt/app/
      • ssh user@prod-server “systemctl restart myapp || true”
        only:
      • main
  • 说明:通过 only/except/rules 控制触发分支;使用 artifactsreports 传递产物与测试报告;为生产部署设置 保护分支手动确认 更安全。

四 自动化部署与交付策略

  • SSH 免密部署:在 Runner 主机生成密钥并分发到目标机,保证 CI 任务可安全推送与重启服务。
    ssh-keygen -t rsa -b 2048 -N “” -f ~/.ssh/id_rsa
    ssh-copy-id user@prod-server
  • 零停机部署实践:
    • 蓝绿发布:准备两套环境(blue/green),通过负载均衡切换流量,出现问题可快速回滚。
    • 金丝雀发布:先对少量实例发布新版本,观察后再全量切换。
    • 滚动更新:分批替换实例,保持服务可用。
  • 产物与回滚:将可运行包与版本元数据存入制品库(如 Nexus/对象存储),回滚时按版本号快速部署历史产物。
  • 安全建议:生产部署使用 受限用户最小权限部署清单脚本;通过 Secrets 管理凭据,避免明文出现在仓库中。

五 备份恢复与高可用

  • 备份与恢复:
    • 手动备份:
      sudo gitlab-rake gitlab:backup:create STRATEGY=copy
    • 定时备份(示例每日 2 点):
      echo ‘0 2 * * * /opt/gitlab/bin/gitlab-rake gitlab:backup:create CRON=1’ | sudo tee /etc/cron.d/gitlab-backup
    • 恢复(注意版本一致):
      sudo gitlab-ctl stop unicorn && sudo gitlab-ctl stop sidekiq
      sudo gitlab-rake gitlab:backup:restore BACKUP=timestamp_of_backup
      sudo gitlab-ctl start
  • 高可用与扩展:
    • 单实例瓶颈与风险较高,生产建议部署 多节点高可用(Pacemaker/Keepalived + 共享存储/数据库),或使用官方推荐的 Geo 多地域 架构。
    • 简单对外高可用可用 Nginx 做反向代理与故障转移:
      upstream gitlab { server 192.168.0.11:80; server 192.168.0.12:80 backup; }
      server { listen 80; server_name gitlab.example.com; location / { proxy_pass http://gitlab; } }
    • 监控与告警:启用 Prometheus/Grafana 监控组件,结合 告警规则日志审计 提升可观测性与稳定性。

0