自建GitLab代码平台


国内还有一个中国版的 GitLab,因为法规,独立出来,叫做极狐 GitLab。

GitLab 是一款功能强大的、开源的 DevOps 平台,提供了一套完整的工具链,涵盖了从代码托管、持续集成、持续交付到持续运维等各个环节,帮助团队高效地协作开发和管理软件项目。

自建GitLab代码平台


1. 功能特性

完全开源,并且可要自建服务!

GitLab 的主要功能包括:代码托管 支持代码仓库的创建、管理、分支管理、版本控制等功能;协作开发 提供代码评审、Issue 管理、里程碑设置、Wiki 文档等工具;持续集成与持续交付 提供自动化构建、测试、部署等功能;持续运维 提供监控、日志管理、安全扫描等工具;项目管理 提供项目看板、任务管理、进度追踪等工具。

GitLab 的核心优势在于,社区版开源免费,并且可要自建服务。对应个人或者小团队来说,提供的功能也够基本使用了。当然,后续需要高级功能的话,比如安全扫描、漏洞分析、更多第三方工具集成的话,也可以购买商业版本。

自建GitLab代码平台


2. 部署 GitLab 服务

推荐使用 docker 或者 kubernetes 的方式部署服务。

官方文档 中提供了多种部署方式,比如使用 Omnibus 包直接部署,也可以使用 Docker 部署服务,也可以使用 HelmOperator 部署到 Kubernetes 平台上面。同时,还支持部署到云平台上面,比如 AWSAzureOpenShift 等。自己可以根据实际情况,进行选择和使用。

这里补充下,在 GitLab 中,Omnibus 是一个用于安装和配置 GitLab 的 打包方案。它将 GitLab 运行所需的各种组件,例如 NginxPostgreSQLRedisRuby on Rails 等,打包成一个单一的、易于安装和管理的软件包。

容器部署的话,可以在 docker hub 中找到 gitlab-cegitlab-ee 的镜像下载地址,结合 官方文档 就可以部署服务了。需要注意的是,镜像不包含 mail transport 服务,需要这个功能的话,单独部署下。d

使用 GitLab 镜像之前,需要已经安装 Docker 工具,并且需要一个有效可访问主机名,所有就不能使用 localhost 了。并且,GitLab 默认使用 SSH 22 端口号与 Git 进行交互。如果要使用不同的端口,可要通过修改 sshd 的端口(推荐)或 GitLab ShellSSH 端口,进行跳转。

# change the server’s ssh port (recommended)
$ sudo vim /etc/ssh/sshd_config
Port = 2424

# restart
$ sudo systemctl restart ssh
# change the gitlab shell ssh port
$ sudo docker run \
    --publish 8929:8929 --publish 2424:22 ...

# change
$ sudo docker exec -it gitlab /bin/bash
$ vim /etc/gitlab/gitlab.rb
gitlab_rails['gitlab_shell_ssh_port'] = 2424
$ gitlab-ctl reconfigure

创建一个目录,用于存放配置、日志、 数据文件,之后将容器内部路径映射到该目录下面即可。如果对性能有高要求的话,可要将其存放在 SSD 磁盘上,提高访问速度。

services:
  gitlab:
    image: gitlab/gitlab-ce:17.2.1-ce.0
    container_name: gitlab-ce
    restart: always
    hostname: 'gitlab.example.com'
    environment:
      GITLAB_OMNIBUS_CONFIG: |
        external_url 'http://gitlab.example.com:8080'
        external_url 'https://gitlab.example.com:8443'
        gitlab_rails['gitlab_shell_ssh_port'] = 2424
    ports:
      - "8080:80"
      - "8443:443"
      - "2424:22"
    volumes:
      - "/data/gitlab/config:/etc/gitlab"
      - "/data/gitlab/logs:/var/log/gitlab"
      - "/data/gitlab/data:/var/opt/gitlab"
    shm_size: '256m'
# 启动服务
$ sudo docker compose up -d
$ sudo docker logs -f gitlab-ce

# 获取root登录密码
# 第一个容器重启24小时后,密码文件会自动删除
$ sudo docker exec -it gitlab grep 'Password:' /etc/gitlab/initial_root_password
# 全备份
$ docker exec -t <container_name> gitlab-backup create

# 数据库备份
$ docker exec -t <container_name> gitlab-backup create SKIP=artifacts,repositories,registry,uploads,builds,pages,lfs,packages,terraform_state

3. 部署 Runner 服务

可用可不用,非核心功能。

GitLab Runner 是一个独立的应用程序,它与 GitLab CI/CD 协同工作,负责执行 CI/CD 任务。按照你在 .gitlab-ci.yml 文件中定义的指令,在指定的运行环境中构建、测试、部署你的项目。

services:
  gitlab:
    restart: always
    container_name: gitlab-runner
    image: gitlab/gitlab-runner:ubuntu-v17.2.1
    volumes:
      - "/var/run/docker.sock:/var/run/docker.sock"
      - "/data/gitlab-runner/config:/etc/gitlab-runner"
# 启动服务
$ sudo docker compose up -d
$ sudo docker logs -f gitlab-runner

部署完成之后,还需要进行 Runner 注册,才能够在服务中使用到它。

# 生成token添加即可
$ sudo docker exec -it gitlab-runner gitlab-runner register

文章作者: Escape
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 Escape !
  目录