为 GitLab CI 准备亚马逊 Linux 图像

Prepare Amazon Linux image for GitLab CI

我是 运行 自托管的 GitLab CE,有一个 GitLab 运行器和一个 Docker 执行器。我想为 AWS Lambda 构建一个二进制文件,所以我正在为我的 Docker 执行程序使用 amazonlinux:latest 图像。

当然,并非我构建所需的所有软件包都在基础 amazonlinux 映像中可用,因此我通过 yum 安装它们。不幸的是,cmake 不适用于 Amazon Linux,因此我从源代码构建它。

目前,每次管道运行时都会发生这种情况,这不是最佳选择,因为 cmake 需要相对较长的时间来构建(与我实际想要构建的二进制文件相比)。

我的一般问题是:是否有一种干净且可重现的方法来准备构建图像,然后将其用作 GitLab CI 的基础图像?由于我对 Docker 和朋友们比较陌生,在运行器主机上本地创建图像并在我的 gitlab-ci.yml 中使用它是正确的方法吗?或者我应该把它放在注册表中(甚至可能是 GitLab 自己的容器注册表?)

是的。

没有什么可以阻止您通过 Docker 文件创建映像,该文件执行所有 yum 安装,然后将您构建的映像推送到(私有)Docker 注册表。将其视为 'extending' 亚马逊图片并保存以备将来使用。

由于我不希望它退出(它还不包含任何应用程序代码),您也可以免费将其存储在 Docker Hub

自定义图片

举个例子Dockerfile:

FROM amazonlinux:latest

RUN yum install <packages>
RUN <commands for cmake>

然后您构建自定义 amazonlinux-custom 图像:

docker build -t mydockerhubuser/amazonlinux-custom:latest .

并将其推送到 Docker Hub(在 docker login 之后):

docker push mydockerhubuser/amazonlinux-custom:latest

Gitlab CI 用法

在您的 .gitlab-ci.yml 中,您将定义工作图像的 image: amazonlinux:latest 部分替换为 image: mydockerhubuser/amazonlinux-custom:latest,这样您就不必安装所有的部门。

备注

Amazon 经常会重建其 amazonlinux:latest 图像并将其推送到 Docker Hub。使用基于他们的自定义图像,您必须考虑以下因素:

  • 您也需要经常重建映像,以便及时更新补丁等。
  • 使用例如像 FROM: amazonlinux:2017.09 这样的固定版本,以避免您不期望的主要版本更改。