主题
Gitlab
概述
官方文档:https://docs.gitlab.com/?tab=Use+GitLab
GitHub地址:https://github.com/gitlabhq/gitlabhq
GitLab 是一个基于 Git 的开源分布式版本控制系统,最初由荷兰开发者 Dmitriy Zaporozhets 和 Valery Sizov 于 2011 年创建。它不仅是代码托管平台,更是一个集成了 DevOps 全生命周期管理的协作工具,帮助团队实现从代码开发、测试、部署到运维的全流程自动化。
截至 2025 年,GitLab 已成为全球最受欢迎的 DevOps 平台之一,被广泛应用于企业级软件开发,例如微软、IBM、NASA 等机构均在使用。
GitLab架构图:
功能特点
版本控制
- 基于 Git 的代码管理:GitLab 使用 Git 作为其底层版本控制系统,支持代码的分支管理、合并请求、版本回溯等功能。开发者可以通过分支进行独立开发,然后通过合并请求将代码合并到主分支,确保代码的版本控制和变更管理有序进行。
- 代码审查与合并请求:GitLab 提供了强大的代码审查功能。开发者提交代码后,其他团队成员可以通过合并请求进行代码审查。审查者可以查看代码的变更、添加评论、提出修改意见等。只有在代码通过审查后,才能合并到主分支,从而保证代码的质量。
- 代码仓库管理:用户可以轻松创建、克隆和管理代码仓库。GitLab 支持多种仓库权限设置,如公开仓库、私有仓库和内部仓库,满足不同项目的保密性和共享需求。例如,一个开源项目可以设置为公开仓库,方便全球开发者参与;而企业内部的核心代码则可以设置为私有仓库,仅限授权人员访问。
持续集成与持续部署(CI/CD)
- 内置 CI/CD 流水线:GitLab 提供了强大的内置 CI/CD 功能。开发者可以在代码仓库中配置 .gitlab-ci.yml 文件,定义项目的构建、测试和部署流程。当代码提交或合并请求触发时,GitLab CI/CD 会自动执行线流水任务,包括代码编译、单元测试、代码质量检查、自动化部署等。例如,一个 Web 应用项目可以在代码提交后自动运行测试用例,如果测试通过,则将应用部署到测试环境,大大提高了开发效率和软件交付速度。
- 多环境部署支持:GitLab 支持多种部署环境,如开发环境、测试环境和生产环境。开发者可以通过配置文件指定不同环境的部署策略和参数,实现一键式多环境部署。例如,开发团队可以在开发环境中快速迭代代码,经过测试环境验证后,一键将应用部署到生产环境,减少人为操作错误。
项目管理
- 任务管理与看板:GitLab 提供了类似敏捷开发的项目管理功能。用户可以创建任务(Issue)、分配任务给团队成员、设置任务优先级和截止日期等。同时,GitLab 的看板功能可以将任务按照不同状态(如待办、进行中、已完成)进行可视化展示,方便团队成员实时了解项目进度。
- 里程碑管理:项目管理者可以为项目设置里程碑,将任务分配到不同的里程碑中。里程碑可以帮助团队明确项目阶段目标和交付时间,确保项目按计划推进。例如,一个软件开发项目可以设置多个里程碑,如需求分析里程碑、设计里程碑、开发里程碑和上线里程碑,每个里程碑包含一系列相关任务。
- 文档管理:GitLab 支持在代码仓库中创建和管理文档,如项目文档、开发文档、用户手册等。文档可以使用 Markdown 语法编写,方便团队成员阅读和编辑。同时,GitLab 还提供了文档版本控制功能,确保文档的变更可以追溯。
团队协作
- 多用户支持与权限管理:GitLab 支持多用户协作,团队成员可以根据角色和权限访问项目。项目所有者可以为不同用户分配不同的权限,如读取权限、写入权限、管理权限等。例如,开发人员可以有代码提交和修改权限,而测试人员可以有代码审查和测试权限,确保团队协作的安全性和高效性。
- 讨论与评论功能:GitLab 提供了丰富的讨论和评论功能。团队成员可以在代码、任务、合并请求等地方发表评论、进行讨论。这些讨论记录会保留下来,方便团队成员回顾和查阅,促进团队沟通和协作。
- Web 挂钩和集成:GitLab 支持与其他工具和平台的集成,如 Slack、Jira、Docker 等。通过 Web 挂钩,GitLab 可以将项目事件(如代码提交、任务更新)自动推送到其他工具中,实现团队协作的无缝衔接。例如,当有新的代码提交时,GitLab 可以自动将消息发送到 Slack 群组,提醒团队成员关注。
Docker部署GitLab CE
参考网址:https://docs.gitlab.com/install/docker/installation/
版本Tag: https://hub.docker.com/r/gitlab/gitlab-ce/tags/
配置存储目录
配置一个新的环境变量$GITLAB_HOME,设置您创建的目录的路径:
sh
export GITLAB_HOME=/data/gitlab
GitLab 容器使用主机挂载卷来存储持久数据:
本地位置 | 容器位置 | 用法 |
---|---|---|
$GITLAB_HOME/data | /var/opt/gitlab | 存储应用程序数据 |
$GITLAB_HOME/logs | /var/log/gitlab | 存储日志 |
$GITLAB_HOME/config | /etc/gitlab | 存储 GitLab 配置文件 |
运行gitlab
Docker Compose方式部署
创建一个docker-compose.yml文件。例如:
yaml
services:
gitlab:
image: gitlab/gitlab-ce:18.1.0-ce.0
container_name: gitlab
restart: always
hostname: 'gitlab.example.com'
environment:
GITLAB_OMNIBUS_CONFIG: |
external_url 'http://gitlab.example.com:8090'
gitlab_rails['gitlab_shell_ssh_port'] = 2424
ports:
- '8090:8090'
- '443:443'
- '2424:22'
volumes:
- '$GITLAB_HOME/config:/etc/gitlab'
- '$GITLAB_HOME/logs:/var/log/gitlab'
- '$GITLAB_HOME/data:/var/opt/gitlab'
shm_size: '256m'
在与 相同的目录中docker-compose.yml,启动 GitLab:
sh
docker compose up -d
Docker Engine方式部署
sh
docker run -d --hostname gitlab.example.com --name gitlab \
--restart always --shm-size 256m -p 8090:8090 -p 443:443 -p 2424:22 \
-v $GITLAB_HOME/config:/etc/gitlab \
-v $GITLAB_HOME/logs:/var/log/gitlab \
-v $GITLAB_HOME/data:/var/opt/gitlab \
-e GITLAB_OMNIBUS_CONFIG="external_url 'http://gitlab.example.com:8090'; gitlab_rails['gitlab_shell_ssh_port'] = 2424;" \
gitlab/gitlab-ce:18.1.0-ce.0
查看密码
root 访问 GitLab URL,并使用以下命令中的用户名和密码登录:
sh
docker exec -it gitlab grep 'Password:' /etc/gitlab/initial_root_password
密码文件在 24 小时后第一次容器重启时自动删除。
查看日志
sh
docker logs -f --tail=1000 gitlab
设置中文
登录GitLab管理页面
头像 -> Preferences
- 在 Localization 里选择中文 -> 保存 -> 刷新页面
Nginx 代理
修改 nginx.conf 配置文件
nginx
server {
listen 443 ssl;
server_name 您的域名;
# ......
location / {
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_pass http://<GitLab宿主机ip/域名>;
}
}
stream {
server {
listen 2424;# 上面docker-compose中gitlab_shell_ssh_port配置的ssh端口
proxy_pass <GitLab宿主机ip/域名>;
}
}