如何更新 Gitlab.com CI 中使用的 docker 镜像

Posted

技术标签:

【中文标题】如何更新 Gitlab.com CI 中使用的 docker 镜像【英文标题】:How to update docker image used in Gitlab.com CI 【发布时间】:2022-01-06 19:04:41 【问题描述】:

我在 gitlab.com CI 中有一个使用 the php:8.0 image on dockerhub 的项目构建,我可以看到它是最新的 PHP 8.0.13。但是,当我的 CI 在 gitlab.com 上运行时,它使用的过时版本会破坏我的构建:

Your requirements could not be resolved to an installable set of packages.
Problem 1
  - Installation request for symfony/event-dispatcher v6.0.0 -> satisfiable by symfony/event-dispatcher[v6.0.0].
  - symfony/event-dispatcher v6.0.0 requires php >=8.0.2 -> your PHP version (8.0.1) does not satisfy that requirement.

您可以在这里看到它使用的是 PHP 8.0.1,而不是任何更新的版本。

我没有直接使用php:8.0 图像,而是通过使用php:8.0 图像作为其基本图像in its dockerfile 的edbizarro/gitlab-ci-pipeline-php 图像。我猜问题出在这里,因为这个包已经有一段时间没有更新了。

如何让 gitlab 使用更新版本的图像?

【问题讨论】:

能否请您发布有关工作的 gitlab-ci.yml 以便我们查看它是如何配置的?另外,您是否使用自托管运行器? 正如您所提到的,问题在于 edbizarro/gitlab-ci-pipeline-php 尚未随着 php:8.0 中的上游更改而更新和重新发布。不幸的是,这个问题在构建该镜像后无法解决——镜像edbizarro/gitlab-ci-pipeline-php 已经过时,必须更新。你不能以任何实际的方式处理事后的事......也许在你的工作中安装一个新版本的 PHP 内联(我怀疑这会很好用)?你只需要上游维护者来更新镜像——或者 fork 并自己更新并发布你自己的镜像。 【参考方案1】:

您可以根据来自 gitlab-ci-pipeline-php 的原始 8.0 Dockerfile 创建自己的 docker 映像。

为此,只需克隆 git 存储库,创建新的 Dockerfile 并构建它。您可以将其推送到 docker hub,也可以使用 Gitlab 的 docker 注册表来存储您的 docker 镜像并将其用作项目的基础。

【讨论】:

【参考方案2】:

所以问题是图像已经过时了,除了创建自己的图像之外我无能为力,这真的不是我想做的事情。

幸运的是,我找到了一个解决方案——一个不同的图像可以直接替换,而且效果很好。所以我更新了我的.gitlab-ci.yml 文件说:

image: lorisleiva/laravel-docker:8.0

所有测试都在运行并再次通过。

【讨论】:

以上是关于如何更新 Gitlab.com CI 中使用的 docker 镜像的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 CodeceptJS 在 GitLab CI 中实现自动测试阶段?

如何构建Kubernetes CI/CD流水线

使用来自 Gitlab Registry 的私有 Docker 镜像作为 CI 的基础镜像

关于gitlab ci在include中使用变量

如何在 gitlab.com 上的 PHP 项目的作业列表中启用代码覆盖率输出

gitlab-ci实际中需要注意几点