【发布时间】:2016-04-21 14:50:58
【问题描述】:
在gitlab-ci 中,.gitlab-ci.yml 文件中有一个选项可以在任何实际脚本运行之前执行命令,称为before_script。 .gitlab-ci.yml 示例说明了在此处安装辅助程序。但是,我注意到的是,在使用 docker 执行程序时,这些更改不会缓存在 Docker 中。我天真地假设在运行这些命令后,docker 会缓存图像,所以在下一次运行或测试时,docker 只会加载在before_script 之后生成的缓存图像。这将大大加快构建速度。
例如,我的.gitlab-ci.yml 看起来有点像:
image: ubuntu
before_script:
- apt-get update -qq && apt-get install -yqq make ...
build:
script:
- cd project && make
一个可能的解决方案是转到运行器机器并创建一个 docker 映像,该映像可以构建我的软件而无需任何其他安装,然后在 yaml 文件的image 部分中引用它。这样做的缺点是,每当我想添加依赖项时,我都需要登录到运行器机器并在构建成功之前更新映像。如果我只需将依赖项添加到 apt-get install 的末尾并让 docker / gitlab-ci 处理适当的缓存,那就更好了。
.gitlab-ci.yml 中还有一个cache 命令,我尝试将其设置为untracked: true,我认为它会缓存不是我项目副产品的所有内容,但它似乎没有任何内容效果。
有什么方法可以得到我想要的行为吗?
【问题讨论】:
-
我希望有像“image:dockerfile”或“image:build”这样的选项,可以内联或作为文件参考,类似于 docker-compose 允许自定义图像的方式。有了 runner 的这种支持,如果我们唯一需要的是可重现的构建环境,我们甚至可以忘记 docker-in-docker。
标签: docker gitlab gitlab-ci gitlab-ci-runner