In gitlab-ci
有一个选项.gitlab-ci.yml http://doc.gitlab.com/ce/ci/yaml/README.html文件在任何实际脚本运行之前执行命令,称为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 映像,该映像可以构建我的软件而无需任何其他安装,然后在image
yaml 文件的部分。这样做的缺点是,每当我想添加依赖项时,我都需要登录到运行器机器并更新映像,然后构建才能成功。如果我只需将依赖项添加到末尾就更好了apt-get install
并让 docker / gitlab-ci 处理适当的缓存。
还有一个cache
命令输入.gitlab-ci.yml
,我尝试设置为untracked: true
,我认为这会缓存所有不是我的项目副产品的内容,但它似乎没有任何效果。
有什么办法可以得到我想要的行为吗?
您可以首先添加一个阶段来构建图像。如果图像没有任何变化,这个阶段会很短,不到1秒。
您可以在以下阶段使用该图像,从而加快整个过程。
这是一个例子.gitlab-ci.yml
:
stages:
- build_test_image
- test
build_test:
stage: build_test_image
script:
- docker login -u gitlab-ci-token -p $CI_BUILD_TOKEN $CI_REGISTRY
- docker build -t $CI_REGISTRY_IMAGE:test -f dockerfiles/test/Dockerfile .
- docker push $CI_REGISTRY_IMAGE:test
tags:
- docker_build
test_syntax:
image: $CI_REGISTRY_IMAGE:test
stage: test
script:
- pip install flake8
- flake8 --ignore=E501,E265 app/
看标签docker_build
。该标签用于强制在具有该标签的运行器上执行阶段。该跑步者的执行者是shell
,并且它仅用于构建 Docker 映像。所以,运行者所在的主机应该已经安装了Docker Engine。我发现这个解决方案比 docker 中的 docker 更适合我的需求,另一种解决方案 https://jpetazzo.github.io/2015/09/03/do-not-use-docker-in-docker-for-ci/.
另外,我正在使用私人注册表,这就是我使用的原因$CI_REGISTRY*
变量,但您可以使用 DockerHub 而无需指定注册表。不过,问题在于在 DockerHub 上进行身份验证。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)