Linux环境下GitLab持续集成平台搭建指南

一、环境准备与虚拟机克隆

在构建GitLab服务前,需准备基础运行环境。建议采用虚拟机克隆方式快速创建标准化开发环境,此方法可确保所有节点配置一致性,降低环境差异导致的部署问题。

1.1 虚拟机克隆操作

基于已安装CentOS Stream的源虚拟机,通过虚拟化平台(如行业常见虚拟化解决方案)执行完整克隆操作。克隆完成后需修改主机名以避免服务冲突:

  1. hostnamectl set-hostname gitlab-server
  2. echo "192.168.226.100 gitlab-server" >> /etc/hosts

1.2 网络静态化配置

动态IP可能导致服务中断,需配置永久静态IP。使用NetworkManager工具进行配置:

  1. nmcli connection modify "ens33" \
  2. ipv4.addresses "192.168.226.100/24" \
  3. ipv4.gateway "192.168.226.2" \
  4. ipv4.dns "8.8.8.8,114.114.114.114" \
  5. ipv4.method manual
  6. # 应用配置
  7. nmcli connection down "ens33" && nmcli connection up "ens33"

验证网络连通性:

  1. ping -c 4 baidu.com
  2. curl ifconfig.me

二、GitLab依赖环境构建

GitLab作为复合型应用,依赖多种基础服务组件,需按特定顺序安装配置。

2.1 基础依赖安装

安装curl和安全策略工具:

  1. dnf install -y curl policycoreutils-python-utils
  • curl:用于下载仓库配置和软件包
  • policycoreutils-python-utils:解决SELinux策略冲突

2.2 仓库源配置

由于官方暂未提供CentOS Stream 10专用包,采用CentOS 8兼容方案:

  1. curl -sS https://packages.example.com/install-repo-script | \
  2. OS=el DIST=8 bash

验证仓库配置:

  1. ls /etc/yum.repos.d/gitlab_*.repo

2.3 安装核心组件

执行安装命令时需指定外部访问URL:

  1. EXTERNAL_URL="http://192.168.226.100" \
  2. yum install -y gitlab-ce

断点续传技巧:若网络中断,可重新执行命令自动继续下载。安装过程中可能遇到libxcrypt兼容性问题,需单独安装:

  1. dnf install -y libxcrypt-compat

三、服务配置与优化

GitLab包含PostgreSQL、Redis、Sidekiq等20+服务组件,需进行针对性优化。

3.1 初始配置重载

完成基础安装后执行配置重载:

  1. gitlab-ctl reconfigure

此过程会:

  1. 生成SSL自签名证书
  2. 初始化数据库结构
  3. 配置Nginx虚拟主机
  4. 设置默认管理员密码(路径:/etc/gitlab/initial_root_password

3.2 内存优化方案

默认配置需要至少4GB内存,可通过修改配置降低消耗:

  1. vim /etc/gitlab/gitlab.rb

调整关键参数:

  1. # 禁用Prometheus监控
  2. prometheus_monitoring['enable'] = false
  3. # 调整Unicorn工作进程数
  4. unicorn['worker_processes'] = 2
  5. # 限制Sidekiq并发
  6. sidekiq['concurrency'] = 10

应用修改后重启服务:

  1. gitlab-ctl restart

3.3 防火墙配置

开放必要端口并配置持久化规则:

  1. firewall-cmd --permanent --add-service={http,https}
  2. firewall-cmd --permanent --add-port=2222/tcp # Git SSH端口
  3. firewall-cmd --reload

四、平台初始化与使用

完成环境部署后,需进行初始化配置和基础使用教学。

4.1 首次登录流程

访问http://192.168.226.100,使用默认账号root和初始密码登录。安全提示:首次登录后立即修改密码,初始密码文件会在24小时后自动删除。

4.2 项目结构规划

推荐采用”组-项目”二级结构管理代码:

  1. 创建部门组(如backend-team
  2. 在组内创建项目(如order-service
  3. 设置成员权限(Developer/Maintainer/Owner)

权限模型优势

  • 继承式权限管理
  • 集中式访问控制
  • 简化审计流程

4.3 代码提交示例

通过Git命令行提交代码的完整流程:

  1. # 配置全局信息
  2. git config --global user.name "John Doe"
  3. git config --global user.email "john@example.com"
  4. # 克隆项目
  5. git clone http://192.168.226.100/backend-team/order-service.git
  6. cd order-service
  7. # 创建开发分支
  8. git checkout -b feature/add-payment
  9. # 提交变更
  10. echo "new feature" > payment.py
  11. git add .
  12. git commit -m "Add payment module"
  13. git push origin feature/add-payment

五、运维监控体系

建立完善的监控机制保障服务稳定性。

5.1 服务状态检查

实时监控关键服务:

  1. gitlab-ctl status
  2. # 正常状态应全部显示"up"

5.2 日志分析技巧

定位问题的常用日志路径:

  1. /var/log/gitlab/gitlab-rails/production.log # 应用日志
  2. /var/log/gitlab/nginx/gitlab_access.log # 访问日志
  3. /var/log/gitlab/postgresql/current # 数据库日志

5.3 备份策略

配置每日自动备份:

  1. vim /etc/gitlab/gitlab.rb
  2. # 添加配置
  3. gitlab_rails['manage_backup_path'] = true
  4. gitlab_rails['backup_path'] = "/var/opt/gitlab/backups"
  5. gitlab_rails['backup_keep_time'] = 604800 # 保留7天

执行手动备份测试:

  1. gitlab-rake gitlab:backup:create

六、常见问题处理

收集整理部署过程中的典型故障解决方案。

6.1 502错误排查

可能原因及解决方案:

  1. Unicorn超载:检查/var/log/gitlab/unicorn/unicorn_stderr.log
  2. 内存不足:执行free -h查看可用内存
  3. PostgreSQL故障:检查/var/log/gitlab/postgresql/current

6.2 邮件发送失败

配置SMTP邮件服务示例:

  1. # /etc/gitlab/gitlab.rb
  2. gitlab_rails['smtp_enable'] = true
  3. gitlab_rails['smtp_address'] = "smtp.example.com"
  4. gitlab_rails['smtp_port'] = 587
  5. gitlab_rails['smtp_user_name'] = "gitlab@example.com"
  6. gitlab_rails['smtp_password'] = "secure-password"

6.3 升级注意事项

版本升级前必须:

  1. 创建完整备份
  2. 检查版本兼容性
  3. 预读发布说明
  4. 在测试环境验证

升级命令流程:

  1. # 停止服务
  2. gitlab-ctl stop
  3. # 执行升级
  4. yum update gitlab-ce
  5. # 迁移数据库
  6. gitlab-rake gitlab:db:migrate
  7. # 重启服务
  8. gitlab-ctl restart

通过本指南的系统化部署,读者可构建出稳定可靠的GitLab持续集成平台。建议结合企业实际需求,进一步集成CI/CD流水线、容器化部署等高级功能,构建完整的DevOps技术体系。在运维过程中,应建立定期巡检机制,重点关注磁盘空间、内存使用、备份完整性等关键指标,确保系统长期稳定运行。