国内还有一个中国版的 GitLab,因为法规,独立出来,叫做极狐 GitLab。
GitLab
是一款功能强大的、开源的 DevOps
平台,提供了一套完整的工具链,涵盖了从代码托管、持续集成、持续交付到持续运维等各个环节,帮助团队高效地协作开发和管理软件项目。
1. 功能特性
完全开源,并且可要自建服务!
GitLab
的主要功能包括:代码托管 支持代码仓库的创建、管理、分支管理、版本控制等功能;协作开发 提供代码评审、Issue
管理、里程碑设置、Wiki
文档等工具;持续集成与持续交付 提供自动化构建、测试、部署等功能;持续运维 提供监控、日志管理、安全扫描等工具;项目管理 提供项目看板、任务管理、进度追踪等工具。
而 GitLab
的核心优势在于,社区版开源免费,并且可要自建服务。对应个人或者小团队来说,提供的功能也够基本使用了。当然,后续需要高级功能的话,比如安全扫描、漏洞分析、更多第三方工具集成的话,也可以购买商业版本。
2. 部署 GitLab 服务
推荐使用 docker 或者 kubernetes 的方式部署服务。
官方文档 中提供了多种部署方式,比如使用 Omnibus
包直接部署,也可以使用 Docker
部署服务,也可以使用 Helm
或 Operator
部署到 Kubernetes
平台上面。同时,还支持部署到云平台上面,比如 AWS
、Azure
、OpenShift
等。自己可以根据实际情况,进行选择和使用。
这里补充下,在 GitLab
中,Omnibus
是一个用于安装和配置 GitLab
的 打包方案。它将 GitLab
运行所需的各种组件,例如 Nginx
、PostgreSQL
、Redis
、Ruby on Rails
等,打包成一个单一的、易于安装和管理的软件包。
容器部署的话,可以在 docker hub
中找到 gitlab-ce 和 gitlab-ee 的镜像下载地址,结合 官方文档 就可以部署服务了。需要注意的是,镜像不包含 mail transport
服务,需要这个功能的话,单独部署下。d
使用 GitLab
镜像之前,需要已经安装 Docker
工具,并且需要一个有效可访问主机名,所有就不能使用 localhost
了。并且,GitLab
默认使用 SSH 22
端口号与 Git
进行交互。如果要使用不同的端口,可要通过修改 sshd
的端口(推荐)或 GitLab Shell
的 SSH
端口,进行跳转。
# 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