1. GitLab-CE 基础介绍与部署准备
GitLab Community Edition(简称GitLab-CE)是目前最受欢迎的开源代码托管平台之一。作为一个完整的DevOps生命周期管理工具,它不仅仅提供Git仓库管理功能,还集成了CI/CD、问题跟踪、Wiki文档等全套协作工具。相比GitHub,GitLab的最大优势在于可以完全自主部署在企业内部环境中。
我在过去三年中为超过20家企业部署过GitLab-CE,发现大多数团队最初只需要掌握几个核心功能就能显著提升开发效率。本文将重点介绍如何快速搭建和使用GitLab-CE的基础功能,包括:
- 单机版部署方案选择
- 管理员账户初始化配置
- 项目创建与成员管理
- 日常代码提交与合并流程
- 基础CI/CD流水线配置
提示:本文基于Ubuntu 20.04 LTS和GitLab-CE 14.9.0版本,但核心操作适用于大多数Linux发行版和较新的GitLab版本。
1.1 环境准备与安装
对于初次使用GitLab的用户,我强烈推荐使用官方提供的Omnibus包安装方式。这种方式将所有依赖(包括PostgreSQL、Redis等)打包在一起,极大简化了安装过程。以下是具体步骤:
# 安装依赖 sudo apt-get update sudo apt-get install -y curl openssh-server ca-certificates # 添加GitLab仓库 curl https://packages.gitlab.com/install/repositories/gitlab/gitlab-ce/script.deb.sh | sudo bash # 安装GitLab-CE(将EXTERNAL_URL替换为你的域名或IP) sudo EXTERNAL_URL="http://your-server-ip" apt-get install gitlab-ce安装完成后,通过以下命令启动服务:
sudo gitlab-ctl reconfigure sudo gitlab-ctl start第一次访问配置的EXTERNAL_URL时,系统会提示设置root账户密码。这个密码务必妥善保管,它是系统的超级管理员账户。
注意:如果服务器内存小于4GB,建议调整swap空间或优化配置,否则可能出现性能问题。可以通过以下命令添加2GB swap:
sudo fallocate -l 2G /swapfile sudo chmod 600 /swapfile sudo mkswap /swapfile sudo swapon /swapfile2. 管理员基础配置
2.1 系统设置优化
首次登录后,建议立即进行以下关键配置:
关闭开放注册(除非你确实需要):
- 导航到"Admin Area" → "Settings" → "General"
- 展开"Sign-up restrictions"
- 取消勾选"Sign-up enabled"
配置邮箱服务(重要通知依赖于此):
# 编辑配置文件 sudo vim /etc/gitlab/gitlab.rb # 添加以下配置(以Gmail为例) gitlab_rails['smtp_enable'] = true gitlab_rails['smtp_address'] = "smtp.gmail.com" gitlab_rails['smtp_port'] = 587 gitlab_rails['smtp_user_name'] = "your-email@gmail.com" gitlab_rails['smtp_password'] = "your-password" gitlab_rails['smtp_domain'] = "gmail.com" gitlab_rails['smtp_authentication'] = "login" gitlab_rails['smtp_enable_starttls_auto'] = true gitlab_rails['smtp_tls'] = false # 应用配置 sudo gitlab-ctl reconfigure备份设置:
# 编辑配置文件 sudo vim /etc/gitlab/gitlab.rb # 设置备份保留7天 gitlab_rails['backup_keep_time'] = 604800 # 手动执行备份 sudo gitlab-rake gitlab:backup:create
2.2 用户与权限管理
GitLab的权限系统基于项目层级,主要角色包括:
- Guest:只能查看项目
- Reporter:可以查看和克隆代码
- Developer:可以推送代码、创建分支
- Maintainer:可以管理分支、标签等
- Owner:完整项目控制权
创建新用户的最佳实践:
- 通过"Admin Area" → "Users" → "New user"创建账户
- 设置强密码或勾选"Send user password reset link"
- 为用户分配适当的全局权限(通常保持为"Regular")
- 在具体项目中邀请用户并分配角色
经验:对于小型团队,我建议使用"Project access tokens"而非个人账户token进行自动化操作,这样更安全且易于管理。
3. 项目管理核心操作
3.1 创建第一个项目
在GitLab中创建项目时有三种选择:
- 空白项目:完全空白的Git仓库
- 模板项目:使用预定义的模板(如Spring Boot、React等)
- 导入项目:从GitHub、Bitbucket等平台导入
对于新用户,我建议从空白项目开始:
- 点击导航栏"+" → "New project"
- 选择"Create blank project"
- 输入项目名称(如"my-first-project")
- 设置可见级别:
- Private:仅成员可见
- Internal:登录用户可见
- Public:完全公开
- 点击"Create project"
创建后,你会看到详细的Git操作指引。如果是已有本地项目,可以按如下方式推送:
cd existing-project git init git remote add origin http://your-gitlab-url/username/my-first-project.git git add . git commit -m "Initial commit" git push -u origin master3.2 分支策略建议
根据团队规模不同,我推荐两种分支策略:
小型团队(3-5人)简单模型:
master:稳定版本分支dev:集成测试分支feature/*:功能开发分支
中型团队(5+人)Git Flow模型:
master:生产代码develop:集成分支feature/*:功能开发release/*:预发布分支hotfix/*:紧急修复
设置保护分支的方法:
- 进入项目 → "Settings" → "Repository"
- 展开"Protected branches"
- 选择分支(如master)
- 设置允许合并/推送的角色(通常Maintainer以上)
4. 日常开发工作流
4.1 代码提交与合并请求
典型的GitLab开发流程包括:
从最新master创建功能分支:
git checkout master git pull git checkout -b feature/new-login开发并提交代码:
git add . git commit -m "实现新的登录页面" git push origin feature/new-login创建合并请求(Merge Request):
- 在GitLab界面点击"Create merge request"
- 设置源分支(feature/new-login)和目标分支(master)
- 指定审查者(Assignee)
- 添加详细描述和关联issue
代码审查与合并:
- 审查者通过"Changes"标签页查看差异
- 使用行内评论功能提出建议
- 作者推送更新后会自动更新MR
- 通过后点击"Merge"按钮
技巧:在commit消息中引用issue(如"Fix #123"),合并后会自动关闭对应issue。
4.2 Issue跟踪与里程碑
GitLab的Issue系统是项目管理的重要工具:
创建issue:
- 项目 → "Issues" → "New issue"
- 填写标题、描述
- 设置标签(如bug、enhancement)
- 指定负责人和里程碑
看板视图:
- 项目 → "Issues" → "Board"
- 可以按标签、分配人等过滤
- 拖拽卡片改变状态
里程碑(Milestone):
# 通过API创建里程碑(适合批量操作) curl --request POST --header "PRIVATE-TOKEN: <your_access_token>" \ --data "title=Spring+Release&description=Major+update+for+spring" \ "http://your-gitlab-url/api/v4/projects/1/milestones"
5. 基础CI/CD配置
5.1 理解GitLab Runner
GitLab CI/CD的核心组件是Runner,它是一个轻量级进程,负责执行定义好的任务。安装Runner的步骤:
# 添加官方仓库 curl -L https://packages.gitlab.com/install/repositories/runner/gitlab-runner/script.deb.sh | sudo bash # 安装 sudo apt-get install gitlab-runner # 注册(交互式命令) sudo gitlab-runner register在注册过程中需要提供:
- GitLab实例URL
- 注册token(项目 → Settings → CI/CD → Runners)
- 执行器类型(推荐docker)
- 默认镜像(如alpine:latest)
5.2 编写.gitlab-ci.yml
以下是一个完整的Java项目示例:
stages: - build - test - deploy variables: MAVEN_OPTS: "-Dmaven.repo.local=.m2/repository" cache: paths: - .m2/repository/ - target/ build-job: stage: build image: maven:3.6-jdk-11 script: - mvn compile artifacts: paths: - target/ test-job: stage: test image: maven:3.6-jdk-11 script: - mvn test only: - merge_requests production-deploy: stage: deploy image: alpine:3.12 script: - apk add --no-cache openssh-client rsync - rsync -avz --delete target/ user@production-server:/opt/app when: manual only: - master关键配置说明:
stages:定义流水线阶段顺序cache:复用依赖加快构建速度artifacts:传递构建产物到后续阶段only/except:控制任务触发条件
5.3 高级CI技巧
并行测试:
test: stage: test parallel: 5 script: - mvn test -Dtest=TestSuite$CI_NODE_INDEX环境变量管理:
- 项目 → Settings → CI/CD → Variables
- 添加如DATABASE_URL、API_KEY等敏感信息
- 勾选"Protect variable"限制分支
手动部署审批:
deploy_prod: stage: deploy script: - ./deploy.sh when: manual only: - master
6. 维护与故障排查
6.1 日常维护命令
# 检查服务状态 sudo gitlab-ctl status # 查看日志(实时跟踪) sudo gitlab-ctl tail # 备份(会生成时间戳备份文件) sudo gitlab-rake gitlab:backup:create # 恢复备份(先停止服务) sudo gitlab-ctl stop unicorn sudo gitlab-ctl stop sidekiq sudo gitlab-rake gitlab:backup:restore BACKUP=timestamp # 升级到新版本 sudo apt-get update sudo apt-get install gitlab-ce sudo gitlab-ctl reconfigure6.2 常见问题解决
问题1:502错误页面
- 原因:通常Unicorn服务未启动
- 解决:
sudo gitlab-ctl restart unicorn sudo gitlab-ctl tail unicorn # 查看日志
问题2:推送代码被拒绝
- 检查仓库是否已满:
sudo gitlab-rake gitlab:check - 清理无用文件:
sudo gitlab-rake gitlab:cleanup:orphan_lfs_files sudo gitlab-rake gitlab:cleanup:orphan_job_artifacts
问题3:Runner不执行任务
- 检查Runner是否在线:
sudo gitlab-runner list - 查看Runner日志:
journalctl -u gitlab-runner -f
7. 安全加固建议
定期更新:
sudo apt-get update sudo apt-get upgrade gitlab-ce禁用不必要的服务:
# /etc/gitlab/gitlab.rb nginx['enable'] = true prometheus['enable'] = false # 如不需要监控配置防火墙:
sudo ufw allow http sudo ufw allow https sudo ufw allow ssh sudo ufw enable备份加密:
# /etc/gitlab/gitlab.rb gitlab_rails['backup_encryption'] = 'AES256' gitlab_rails['backup_encryption_key_path'] = '/etc/gitlab/backup_key'监控配置:
# 设置内存限制 sudo vim /etc/gitlab/gitlab.rb unicorn['worker_memory_limit_min'] = "200MB" unicorn['worker_memory_limit_max'] = "300MB"
经过多年实践,我发现80%的团队只需要掌握上述核心功能就能满足日常开发需求。GitLab的强大之处在于它的模块化设计 - 你可以根据需要逐步探索更高级的功能,如容器注册表、Kubernetes集成等。对于初次接触GitLab的管理员,我的建议是:先确保基础功能稳定运行,再逐步引入自动化流程。