1. 项目概述与背景
在C++项目开发中,频繁的手动构建和部署不仅效率低下,还容易引入人为错误。作为经历过多次深夜紧急修复的开发者,我深知自动化构建部署的重要性。最近在团队内部落地了一套基于Arbess+GitLab的CI/CD方案,实现了从代码提交到生产环境部署的全流程自动化。这套方案特别适合中小团队私有化部署,零成本实现企业级流水线。
Arbess作为一款轻量级开源CI/CD工具,相比Jenkins等传统方案具有三大优势:一是安装配置简单,真正实现开箱即用;二是可视化流水线设计,降低学习成本;三是资源占用低,单台2核4G服务器即可支撑中型团队使用。配合GitLab的代码管理能力,可以构建完整的DevOps工作流。
2. 环境准备与工具安装
2.1 GitLab服务器搭建
2.1.1 系统环境配置
我们选择CentOS 9作为基础系统,相比Ubuntu更适合企业级服务部署。在安装前需要确保:
- 服务器至少4核8G配置(实测2核4G运行GitLab会出现内存不足)
- 开放80/443端口(HTTP/HTTPS)和22端口(SSH)
- 准备域名并做好DNS解析(不建议直接使用IP访问)
bash复制# 基础依赖安装(必须执行)
sudo yum update -y
sudo yum install -y curl policycoreutils-python-utils openssh-server perl
sudo systemctl enable --now sshd
# 防火墙配置(如果启用)
sudo firewall-cmd --permanent --add-service=http
sudo firewall-cmd --permanent --add-service=https
sudo firewall-cmd --reload
注意:CentOS 9默认使用firewalld而非iptables,若遇到端口无法访问请检查防火墙规则
2.1.2 GitLab安装实战
我们选择极狐GitLab(GitLab JH)版本,相比社区版提供了更好的中文支持和企业级功能:
bash复制# 下载安装包(版本号需替换为最新)
curl -LO https://packages.gitlab.cn/repository/el/8/gitlab-jh-17.7.0-jh.0.el8.x86_64.rpm
# 安装配置(EXTERNAL_URL建议使用域名)
export EXTERNAL_URL="http://gitlab.yourdomain.com"
sudo rpm -ivh gitlab-jh-*.rpm
安装完成后需要重点关注:
- 初始密码位置:
/etc/gitlab/initial_root_password - 配置文件路径:
/etc/gitlab/gitlab.rb - 常用管理命令:
bash复制# 查看服务状态 sudo gitlab-ctl status # 重新加载配置 sudo gitlab-ctl reconfigure # 重启服务 sudo gitlab-ctl restart
2.1.3 访问令牌生成
为Arbess配置访问令牌时需要注意:
- 权限范围至少勾选
api和read_repository - 令牌有效期建议设置为永不过期(生产环境需定期轮换)
- 创建后立即保存,页面刷新后将无法再次查看

2.2 Arbess安装配置
2.2.1 系统要求检查
Arbess对系统要求较低,但需要注意:
- 需要Java 11+运行环境
- 服务器需要能访问GitLab服务
- 建议与GitLab分开部署(避免端口冲突)
bash复制# 检查Java版本
java -version
# 若未安装可执行
sudo yum install -y java-11-openjdk
2.2.2 安装与启动
从官网下载RPM包后:
bash复制# 安装(注意版本号替换)
rpm -ivh tiklab-arbess-x.x.x.rpm
# 启动服务
cd /opt/tiklab-arbess/bin
./arbess start
# 查看启动日志
tail -f ../logs/arbess.log
首次访问http://ip:9200使用admin/123456登录后,应立即修改密码。建议在系统设置中配置SMTP邮件服务,便于接收构建通知。
3. 流水线设计与实现
3.1 GitLab服务集成
在Arbess中添加GitLab服务时常见问题:
- 服务地址必须包含
http://或https://前缀 - 个人令牌需要具有api权限
- 测试连接时若失败,检查网络连通性和防火墙规则

3.2 C++构建任务详解
对于典型的CMake项目,构建任务配置示例:
| 参数项 | 示例值 | 说明 |
|---|---|---|
| 模块地址 | $ | 使用默认代码目录 |
| 执行命令 | mkdir -p build && cd build && cmake .. && make -j4 | 并行编译加速构建 |
经验:在构建服务器上预先安装gcc、cmake等工具链,可通过
-j$(nproc)自动设置并行编译线程数
对于复杂项目,建议编写构建脚本build.sh存放在代码库中,然后执行:
bash复制chmod +x build.sh && ./build.sh
3.3 多主机部署策略
3.3.1 主机认证配置
Arbess支持两种认证方式:
- 密码认证(不推荐)
- SSH密钥认证(生产环境必用)
配置SSH密钥的步骤:
bash复制# 在Arbess服务器生成密钥对
ssh-keygen -t rsa -b 4096
# 将公钥添加到目标主机
ssh-copy-id user@target_host
3.3.2 部署文件管理
高级部署技巧:
- 使用通配符匹配构建产物:
target/*.so - 多文件部署使用分号分隔:
lib/*.so;bin/main - 支持正则表达式过滤:
.*\.(so|a)$

4. 高级配置与优化
4.1 构建缓存优化
对于C++大型项目,可以配置ccache加速编译:
bash复制# 安装ccache
sudo yum install -y ccache
# 在CMake命令前添加
export CC="ccache gcc"
export CXX="ccache g++"
在Arbess环境变量中设置:
ini复制CCACHE_DIR=/tmp/ccache
CCACHE_SIZE=5G
4.2 流水线触发器配置
除了手动触发,还可以设置:
- GitLab Webhook自动触发
- 定时构建(如每晚执行)
- 上游任务成功触发
在GitLab项目设置→Webhooks中添加:
code复制URL: http://arbess_ip:9200/api/webhook
Secret Token: 在Arbess流水线设置中获取
4.3 多环境部署策略
通过Arbess变量实现环境区分:
| 环境 | 主机组 | 构建参数 |
|---|---|---|
| dev | dev_servers | -DDEBUG=ON |
| prod | prod_servers | -DNDEBUG=ON |
在部署任务中使用${ENV}_servers动态选择主机组。
5. 问题排查与日常维护
5.1 常见错误解决方案
| 错误现象 | 可能原因 | 解决方案 |
|---|---|---|
| 克隆代码失败 | 令牌权限不足 | 检查api和read_repository权限 |
| 构建命令未找到 | PATH环境变量问题 | 使用绝对路径如/usr/bin/g++ |
| 部署连接超时 | 防火墙限制 | 检查9200端口和SSH端口连通性 |
5.2 日志分析技巧
Arbess日志分级:
- INFO:常规操作记录
- WARN:需要关注的异常
- ERROR:必须处理的故障
关键日志路径:
code复制/opt/tiklab-arbess/logs/arbess.log # 主服务日志
/opt/tiklab-arbess/logs/pipeline/* # 各流水线运行日志
5.3 性能监控与调优
通过Prometheus监控关键指标:
- 构建队列长度
- 平均构建时间
- 资源利用率
配置示例:
yaml复制# arbess.yml
metrics:
enabled: true
port: 9400
在半年多的生产使用中,这套方案成功将我们的部署频率从每周1次提升到每日多次,构建失败率降低了80%。特别是C++项目的ABI兼容性问题,通过自动化构建环境标准化得到了根本解决。对于想要快速搭建私有CI/CD的中小团队,Arbess+GitLab确实是个务实的选择。