从源码安装 GitLab 你或许听说过,但是从源码安装 GitLab Runner ,或许这将是你听到的第一篇相关博客。

最近遇到一个问题,需要手动编译构建 GitLab Runner,而官方文档陈旧、命令过时,如果按照官方错误的指引搞下去,难免会浪费很多时间,而且得不到你想要的结果。

如果你也有类似需求,跟随本篇文章,大概十分钟左右就能折腾出一个属于你自己的 GitLab Runner。

前置准备

这次的前置准备真的不多,大概就需要两样:

  • 一台虚拟机,我选择的操作系统是 Ubuntu 18.04 64位
  • 一颗耐心

在编译 GitLab Runner 之前,我们需要制作编译工具,而编译工具依赖定制的系统环境,所以第一步就是简单折腾一个系统环境。

准备系统环境

安装基础环境的第一步,无非是升级系统环境、安装必要依赖。

这里推荐安装 git 依赖,而非官方文档中注明的 git-core ,详细原因见这篇文章

与其他软件不同的是,这里必须安装 Docker ,因为后面的构建过程中会使用到 Docker (哪怕你编译的不是 Runner 的 Docker 镜像)。

截止文章发布,使用 Docker version 19.03.1 并无任何异常。如果你使用的是阿里云,可以使用下面的命令进行安装,更详细的内容,可以参考之前的文章

由于软件是使用 Go 语言编写,所以安装 Go 语言运行时必不可少。但可惜的是,我们无法使用最新的 Go 1.12,必须老老实实使用 2017 年推出的 1.8.7

接下来需要做的事情是获取软件包源码、以及开发需要使用的依赖包。

准备编译工具

在上述命令都执行完毕,且没有报错的情况下,继续执行下面的语句,就能获得可用的编译工具啦。

如果你比较顺利,将会看到类似下面的日志:

开始构建软件

当上面的步骤都就绪后,就可以正式开始编译构建 GitLab Runner 啦。

-osarch 参数支持同时填写多个平台,来达到输出多个平台的可执行文件,比如填写 linux/amd64 darwin/amd64,将输出64位的Linux、OSx 系统的应用软件。

目前支持的平台有:

  • darwin/386 / darwin/amd64
  • freebsd/386 / freebsd/amd64 / freebsd/arm
  • linux/386 / linux/amd64 / linux/arm
  • windows/386 / windows/amd64

如果我们只构建 Linux 64 位系统下的应用,将看到类似下面的日志输出:

命令执行完毕后,我们可以在 ./out/binaries/ 目录内看到我们想要的二进制程序。试着运行一下吧:

如果你也能看到类似的输出,那么源码编译 GitLab Runner 的任务,就这么愉快的结束啦。

上述问题解决方案来自项目 .gitlab-ci.yml 持续集成配置文件,感兴趣的同学可以了解下。

最后

《编程匠艺》曾提过不应把过时错误的信息提供给你的伙伴,要维护良好的文档。然而现实中充满了过时错误的信息,就像本例中一样,作为一款开源软件,这些错误的信息难免会浇灭外部贡献者的热情。

下一篇文章,我将讲讲我为什么要编译 GitLab。

—EOF