巨大で時間がかかる texlive-full パッケージのインストールから始まる Dockerfile があります。ローカルで実行docker build
すると、インストール後に作成された中間イメージがキャッシュされ、その後のビルドが高速になります。
ただし、自分の GitLab インストールにプッシュして GitLab-CI ビルド ランナーが開始すると、これは常に最初から開始され、FROM
イメージを再ダウンロードして、apt-get インストールを再度実行するように見えます。これは私にとって大きな無駄のように思えるので、GitLab DinD イメージを取得してビルド間の中間イメージをキャッシュする方法を見つけようとしていますが、これまでのところ運が悪いです。
コマンドに--cache-dir
and--docker-cache-dir
を使用しようとしましたが、役に立ちませんでした。gitlab-runner register
これは、gitlab-runner DinD イメージでできるはずのことでもありますか?
私の.gitlab-ci.yml
:
build_job:
script:
- docker build --tag=example/foo .
私のDockerfile
:
FROM php:5.6-fpm
MAINTAINER Roel Harbers <roel.harbers@example.com>
RUN apt-get update && apt-get install -qq -y --fix-missing --no-install-recommends texlive-full
RUN echo Do other stuff that has to be done every build.
私はGitLab CE 8.4.0とgitlab/gitlab-runner:latestをランナーとして使用し、次のように開始しました
docker run -d --name gitlab-runner --restart always \
-v /var/run/docker.sock:/var/run/docker.sock \
-v /usr/local/gitlab-ci-runner/config:/etc/gitlab-runner \
gitlab/gitlab-runner:latest \
; \
ランナーは以下を使用して登録されます。
docker exec -it gitlab-runner gitlab-runner register \
--name foo.example.com \
--url https://gitlab.example.com/ci \
--cache-dir /cache/build/ \
--executor docker \
--docker-image gitlab/dind:latest \
--docker-privileged \
--docker-disable-cache false \
--docker-cache-dir /cache/docker/ \
; \
これにより、次が作成されますconfig.toml
。
concurrent = 1
[[runners]]
name = "foo.example.com"
url = "https://gitlab.example.com/ci"
token = "foobarsldkflkdsjfkldsj"
tls-ca-file = ""
executor = "docker"
cache_dir = "/cache/build/"
[runners.docker]
image = "gitlab/dind:latest"
privileged = true
disable_cache = false
volumes = ["/cache"]
cache_dir = "/cache/docker/"
cache_dir
(私は、 、docker_cache_dir
およびの異なる値を試しましたがdisable_cache
、すべて同じ結果になりました:キャッシュはまったくありません)