Skip to content

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架构图:

Image 1

功能特点

版本控制

  • 基于 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

设置中文

  1. 登录GitLab管理页面

  2. 头像 -> Preferences

  1. 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/域名>;
     }
}

粤ICP备20009776号