准备构建环境
Docker 镜像包含构建 omnibus-gitlab
软件包所需的构建工具,这些镜像在 极狐GitLab Omnibus Builder
项目的 容器镜像仓库 中。
- 安装 Docker Engine。
- Docker Engine 是必需的,而不是 Docker Desktop。
-
拉取要构建软件包的操作系统的 Docker 镜像。
omnibus-gitlab
官方使用的镜像的当前版本在 CI 配置 的BUILDER_IMAGE_REVISION
环境变量中引用。docker pull registry.gitlab.com/gitlab-org/gitlab-omnibus-builder/debian_10:${BUILDER_IMAGE_REVISION}
-
克隆
omnibus-gitlab
源代码并切换到克隆的目录:git clone https://gitlab.com/gitlab-org/omnibus-gitlab.git ~/omnibus-gitlab cd ~/omnibus-gitlab
-
启动容器并进入其 shell,同时在容器中挂载
omnibus-gitlab
目录:docker run -v ~/omnibus-gitlab:/omnibus-gitlab -it registry.gitlab.com/gitlab-org/gitlab-omnibus-builder/debian_10:${BUILDER_IMAGE_REVISION} bash
-
默认情况下,
omnibus-gitlab
选择公共极狐GitLab 仓库来获取各种极狐GitLab 组件的源代码。设置环境变量ALTERNATIVE_SOURCES
为false
以从dev.gitlab.org
构建。export ALTERNATIVE_SOURCES=false
组件源信息在
.custom_sources.yml
文件中。 -
默认情况下,
omnibus-gitlab
代码库经过优化用于 CI 环境。这种优化之一是重用由极狐GitLab CI 流水线构建的预编译 Rails 资产。要了解如何在构建中利用这一点,请查看 获取上游资产 部分。或者,您可以选择在软件包构建期间编译资产,通过设置COMPILE_ASSETS
环境变量。export COMPILE_ASSETS=true
-
默认情况下,XZ 压缩用于生成最终的 DEB 软件包,与 Gzip 相比,软件包大小减少了近 30%,几乎不增加构建时间,并稍微增加安装(解压缩)时间。然而,系统的软件包管理器也必须支持该格式。如果您的系统的软件包管理器不支持 XZ 软件包,设置
COMPRESS_XZ
环境变量为false
:export COMPRESS_XZ=false
-
安装库和其他依赖项:
cd /omnibus-gitlab bundle install bundle binstubs --all
获取上游资产
极狐GitLab 和 GitLab-FOSS 项目上的流水线创建一个包含预编译资产的 Docker 镜像,并将该镜像发布到容器镜像仓库。在构建软件包时,为了节省时间,您可以重用这些镜像,而不是再次编译资产:
-
获取与您正在构建的极狐GitLab 或 GitLab-FOSS 的引用对应的资产 Docker 镜像。例如,要拉取与最新 master 引用对应的资产镜像,请运行以下命令:
docker pull registry.gitlab.com/gitlab-org/gitlab/gitlab-assets-ee:master
-
使用该镜像创建一个容器:
docker create --name gitlab_asset_cache registry.gitlab.com/gitlab-org/gitlab/gitlab-assets-ee:master
-
将资产目录从容器复制到主机:
docker cp gitlab_asset_cache:/assets ~/gitlab-assets
-
在启动构建环境容器时,在其中挂载资产目录:
docker run -v ~/omnibus-gitlab:/omnibus-gitlab -v ~/gitlab-assets:/gitlab-assets -it registry.gitlab.com/gitlab-org/gitlab-omnibus-builder/debian_10:${BUILDER_IMAGE_REVISION} bash
-
不要设置
COMPILE_ASSETS
为 true,而是设置可以找到资产的路径:export ASSET_PATH=/gitlab-assets
构建软件包
准备好构建环境并进行必要的更改后,您可以使用提供的 Rake 任务构建软件包:
-
为了使构建正常工作,Git 工作目录应该是干净的。所以,将您的更改提交到一个新分支。
-
运行 Rake 任务以构建软件包:
bundle exec rake build:project
软件包被构建并在 ~/omnibus-gitlab/pkg
目录中可用。
构建 EE 软件包
默认情况下,omnibus-gitlab
构建一个 CE 软件包。如果您想构建一个 EE 软件包,在运行 Rake 任务之前设置 ee
环境变量:
export ee=true
清理构建期间创建的文件
您可以使用 omnibus
的 clean
命令清理构建过程中生成的所有临时文件:
bin/omnibus clean gitlab
添加 --purge
选项可以删除 所有 在构建过程中生成的文件,包括项目安装目录(/opt/gitlab
)和软件包缓存目录(/var/cache/omnibus/pkg
):
bin/omnibus clean --purge gitlab
获取 Omnibus 帮助
要获得 Omnibus 命令行界面的帮助,请运行 help
命令:
bin/omnibus help