准备构建环境

Docker 镜像包含构建 omnibus-gitlab 软件包所需的构建工具,这些镜像在 极狐GitLab Omnibus Builder 项目的 容器镜像仓库 中。

  1. 安装 Docker Engine。
    • Docker Engine 是必需的,而不是 Docker Desktop。
  2. 拉取要构建软件包的操作系统的 Docker 镜像。omnibus-gitlab 官方使用的镜像的当前版本在 CI 配置BUILDER_IMAGE_REVISION 环境变量中引用。

    docker pull registry.gitlab.com/gitlab-org/gitlab-omnibus-builder/debian_10:${BUILDER_IMAGE_REVISION}
    
  3. 克隆 omnibus-gitlab 源代码并切换到克隆的目录:

    git clone https://gitlab.com/gitlab-org/omnibus-gitlab.git ~/omnibus-gitlab
    cd ~/omnibus-gitlab
    
  4. 启动容器并进入其 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
    
  5. 默认情况下,omnibus-gitlab 选择公共极狐GitLab 仓库来获取各种极狐GitLab 组件的源代码。设置环境变量 ALTERNATIVE_SOURCESfalse 以从 dev.gitlab.org 构建。

    export ALTERNATIVE_SOURCES=false
    

    组件源信息在 .custom_sources.yml 文件中。

  6. 默认情况下,omnibus-gitlab 代码库经过优化用于 CI 环境。这种优化之一是重用由极狐GitLab CI 流水线构建的预编译 Rails 资产。要了解如何在构建中利用这一点,请查看 获取上游资产 部分。或者,您可以选择在软件包构建期间编译资产,通过设置 COMPILE_ASSETS 环境变量。

    export COMPILE_ASSETS=true
    
  7. 默认情况下,XZ 压缩用于生成最终的 DEB 软件包,与 Gzip 相比,软件包大小减少了近 30%,几乎不增加构建时间,并稍微增加安装(解压缩)时间。然而,系统的软件包管理器也必须支持该格式。如果您的系统的软件包管理器不支持 XZ 软件包,设置 COMPRESS_XZ 环境变量为 false

    export COMPRESS_XZ=false
    
  8. 安装库和其他依赖项:

    cd /omnibus-gitlab
    bundle install
    bundle binstubs --all
    

获取上游资产

极狐GitLab 和 GitLab-FOSS 项目上的流水线创建一个包含预编译资产的 Docker 镜像,并将该镜像发布到容器镜像仓库。在构建软件包时,为了节省时间,您可以重用这些镜像,而不是再次编译资产:

  1. 获取与您正在构建的极狐GitLab 或 GitLab-FOSS 的引用对应的资产 Docker 镜像。例如,要拉取与最新 master 引用对应的资产镜像,请运行以下命令:

    docker pull registry.gitlab.com/gitlab-org/gitlab/gitlab-assets-ee:master
    
  2. 使用该镜像创建一个容器:

    docker create --name gitlab_asset_cache registry.gitlab.com/gitlab-org/gitlab/gitlab-assets-ee:master
    
  3. 将资产目录从容器复制到主机:

    docker cp gitlab_asset_cache:/assets ~/gitlab-assets
    
  4. 在启动构建环境容器时,在其中挂载资产目录:

    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
    
  5. 不要设置 COMPILE_ASSETS 为 true,而是设置可以找到资产的路径:

    export ASSET_PATH=/gitlab-assets
    

构建软件包

准备好构建环境并进行必要的更改后,您可以使用提供的 Rake 任务构建软件包:

  1. 为了使构建正常工作,Git 工作目录应该是干净的。所以,将您的更改提交到一个新分支。

  2. 运行 Rake 任务以构建软件包:

    bundle exec rake build:project
    

软件包被构建并在 ~/omnibus-gitlab/pkg 目录中可用。

构建 EE 软件包

默认情况下,omnibus-gitlab 构建一个 CE 软件包。如果您想构建一个 EE 软件包,在运行 Rake 任务之前设置 ee 环境变量:

export ee=true

清理构建期间创建的文件

您可以使用 omnibusclean 命令清理构建过程中生成的所有临时文件:

bin/omnibus clean gitlab

添加 --purge 选项可以删除 所有 在构建过程中生成的文件,包括项目安装目录(/opt/gitlab)和软件包缓存目录(/var/cache/omnibus/pkg):

bin/omnibus clean --purge gitlab

获取 Omnibus 帮助

要获得 Omnibus 命令行界面的帮助,请运行 help 命令:

bin/omnibus help