41

巨大で時間がかかる texlive-full パッケージのインストールから始まる Dockerfile があります。ローカルで実行docker buildすると、インストール後に作成された中間イメージがキャッシュされ、その後のビルドが高速になります。

ただし、自分の GitLab インストールにプッシュして GitLab-CI ビルド ランナーが開始すると、これは常に最初から開始され、FROMイメージを再ダウンロードして、apt-get インストールを再度実行するように見えます。これは私にとって大きな無駄のように思えるので、GitLab DinD イメージを取得してビルド間の中間イメージをキャッシュする方法を見つけようとしていますが、これまでのところ運が悪いです。

コマンドに--cache-dirand--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、すべて同じ結果になりました:キャッシュはまったくありません)

4

3 に答える 3

3

現在、GitLab Docker-in-Docker で中間層をキャッシュすることはできません。それを追加する計画はありますが(以下のリンクに記載されています)。DinD ビルドを高速化するために今日できることは、オーバーレイ ファイルシステムを使用することです。これを行うには、liunx カーネル >=3.18 を実行し、オーバーレイ カーネル モジュールをロードする必要があります。次に、この変数を gitlab-ci.yml に設定します。

variables:
  DOCKER_DRIVER: overlay

詳細については、この問題、特に「Docker ビルドの最適化の状態!」に関するこのコメントを参照してください。「dind で docker executor を使用する」セクションを参照してください。

https://gitlab.com/gitlab-org/gitlab-ce/issues/17861#note_12991518

于 2016-08-29T21:26:37.493 に答える