【问题标题】:Custom Gitlab CI docker image for job用于作业的自定义 Gitlab CI docker 映像
【发布时间】:2020-01-09 16:03:58
【问题描述】:

我在 Django 中有应用程序。需求由许多库组成。在 Gitlab CI 的 linting 阶段之后,我想运行一些我编写的测试。为了能够运行 Postgres 和 Django,我必须安装要求,这需要一些时间。

是否有一些简单的方法可以缓存该映像以及所有已安装的要求,或者每次我想运行该测试时都必须重新安装它?在我看来这是不切实际的。

我可以在测试之前根据要求和上次构建的图像构建自定义图像作为缓存图像。我可以将自定义图像保存在个人注册表中,并在下一个工作中使用它进行测试。

linting --> build_job_image --> 测试 --> staging --> 生产

看起来比每次都安装更好,但仍然不是最好的主意。

我是 DevOps 的新手,所以我正在努力寻找最佳方法,但不知道最佳实践是什么。

我正在使用 python:3.7-alpine 图像来完成这项工作。

【问题讨论】:

  • 使用您需要的工具构建映像,将其推送到公共/私有注册表并在 CI 管道中使用该映像。你甚至可以为这个镜像创建一个特定的 gitlab 存储库,添加一个 ci 来自动构建该镜像并将其推送到它自己的 gitlab docker 注册表中,然后从你的其他作业中提取它。
  • 虽然它使用 github、travis ci 和 dockerhub 来代替完全集成的 gitlab 解决方案,但如果它可以帮助您,这里有一个示例:github.com/docker-ThoTeam/molecule_apache_openjdk8(免责声明:这是我自己维护的图像) .
  • 要从 gitlab 构建 docker 镜像,以下链接可能会有所帮助:docs.gitlab.com/ee/ci/docker/using_docker_build.html

标签: django python-3.x docker gitlab-ci


【解决方案1】:

我用 gitlab cache 解决了这个问题:

  1. 指定应缓存的目录(包含 python 包的目录)。
  2. Job 将尝试提取缓存(基本上只是 zip 文件)并解压缩。
  3. 安装 requirements.txt 中所有必要的包(如果您不向 requirements.txt 添加更多新包,则所有内容都已在缓存中)。
  4. 作业结束时,作业会压缩缓存目录并推送。

在下一次运行中,一切都快了很多,因为已经安装了更多的需求包。

Zeitounator提到的第二个选项也是一种方式。

【讨论】:

    猜你喜欢
    • 2019-12-15
    • 1970-01-01
    • 2022-07-27
    • 1970-01-01
    • 2019-08-03
    • 2021-11-18
    • 2018-11-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多