GitLab介绍及Docker部署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 群组,提醒团队成员关注。

部署方式

开源版本(GitLab Community Edition)

  • 免费使用:GitLab CE 是完全开源的版本,用户可以免费下载和使用。它提供了 GitLab 的基本功能,包括代码管理、项目管理、CI/CD 等。开源版本适合中小团队和开源项目使用,用户可以根据自己的需求进行定制和扩展。
  • 自行部署:用户需要自行搭建服务器环境,安装和配置 GitLab。虽然部署过程需要一定的技术知识,但用户可以完全掌控系统的运行环境和数据存储方式。例如,一个小型创业团队可以使用开源版本搭建在本地服务器上,节省成本。

企业版(GitLab Enterprise Edition)

  • 付费使用:GitLab EE 是针对企业用户的付费版本。它在开源版本的基础上增加了更多高级功能,如高级的权限管理、审计日志、LDAP 集成、高级的/ CICD 功能等。这些功能可以帮助企业更好地管理复杂的项目和团队,满足企业的安全性和合规性要求。
  • 多种部署方式:企业版支持多种部署方式,包括在本地服务器部署、在云平台部署(如 AWS、Azure)以及使用 GitLab 提供的 SaaS 服务(GitLab.com)。企业可以根据自身的资源和需求选择合适的部署方式。例如,大型企业可能会选择在本地服务器部署,以确保数据的安全性和自主性;而一些中小型企业可能会选择使用 GitLab.com,方便快速部署和使用。

SaaS 服务(GitLab.com

  • 托管服务:GitLab.com 是 GitLab 提供的 SaaS 服务,用户无需自行搭建服务器环境,直接在 GitLab.com 上注册账号并使用。它提供了基本的开源版本功能和部分企业版功能,适合个人开发者、小型团队和开源项目使用。使用 SaaS 服务可以节省硬件成本和运维成本,用户可以专注于开发工作。
  • 免费与付费套餐:GitLab.com 提供了免费套餐和多种付费套餐。免费套餐包含基本的代码托管、项目管理等功能,但有一些使用限制,如仓库大小限制、CI/CD 任务数量限制等。付费套餐则提供了更多的功能和更高的资源配额,用户可以根据项目需求选择合适的套餐。

Docker部署GitLab CE

参考网址:https://docs.gitlab.com/install/docker/installation/

配置SSH端口

默认情况下,GitLab 使用 port22通过 SSH 与 Git 交互

修改SSH端口

复制代码
[root@master ~]# vim /etc/ssh/sshd_config
# 默认为22,修改为2222
Port 2222

## 重启sshd服务
[root@master ~]# systemctl restart sshd

编写Docker Compose文件

复制代码
[root@master ~/gitlab]# cat docker-compose.yaml
services:
  gitlab:
    image: docker.m.daocloud.io/gitlab/gitlab-ce:16.5.10-ce.0
    container_name: gitlab
    restart: always
    hostname: '10.0.0.20'
    environment:
      GITLAB_OMNIBUS_CONFIG: |
        external_url 'http://10.0.0.20'
        gitlab_rails['smtp_enable'] = false
        gitlab_rails['registry_enabled'] = false
        registry['enable'] = false
        prometheus['enable'] = false
        alertmanager['enable'] = false
        node_exporter['enable'] = false
        redis_exporter['enable'] = false
        postgres_exporter['enable'] = false
    ports:
      - '22:22'
      - '443:443'
      - '80:80'
    volumes:
      - '/data/gitlab/config:/etc/gitlab'
      - '/data/gitlab/logs:/var/log/gitlab'
      - '/data/gitlab/data:/var/opt/gitlab'

创建数据目录

复制代码
[root@master ~/gitlab]# mkdir -p  /data/gitlab/{config,logs,data}

启动gitlab

复制代码
[root@master ~/gitlab]# docker-compose up -d
[+] Running 2/2
 ✔ Network gitlab_default  Created                                                                                                                                                       0.0s
 ✔ Container gitlab        Started

# 检查一下
[root@master ~/gitlab]# docker ps -a
CONTAINER ID   IMAGE                                                COMMAND             CREATED         STATUS                   PORTS                                                                                                               NAMES
13be8dbc138b   docker.m.daocloud.io/gitlab/gitlab-ce:16.5.10-ce.0   "/assets/wrapper"   3 minutes ago   Up 3 minutes (healthy)   0.0.0.0:22->22/tcp, [::]:22->22/tcp, 0.0.0.0:80->80/tcp, [::]:80->80/tcp, 0.0.0.0:443->443/tcp, [::]:443->443/tcp   gitlab

访问gitlab

http://10.0.0.20

默认用户名为:root

默认的密码需要查看文件.

复制代码
[root@master ~]# cat /data/gitlab/config/initial_root_password
# WARNING: This value is valid only in the following conditions
#          1. If provided manually (either via `GITLAB_ROOT_PASSWORD` environment variable or via `gitlab_rails['initial_root_password']` setting in `gitlab.rb`, it was provided before database was seeded for the first time (usually, the first reconfigure run).
#          2. Password hasn't been changed manually, either via UI or via command line.
#
#          If the password shown here doesn't work, you must reset the admin password following https://docs.gitlab.com/ee/security/reset_user_password.html#reset-your-root-password.

Password: yQaKVjqDN/nQcf4uG2UfkaMy0/vSiMFjWXFOiJNns4k=

# NOTE: This file will be automatically deleted in the first reconfigure run after 24 hours.

配置GitLab

修改admin密码

第一件事应该修改一下密码,因为默认的密码有效期只有24小时

配置时区

配置中文和星期

配置ssh密钥