【Gitlab ci】 缓存

缓存用途

在gitlab-ci中,缓存分为两种

  • artifacts:称作"制品",一般是构建阶段生成的产物,比如C程序编译后的可执行文件,很可能是之后需要拿去测试发布。制品可以在不同的stage间传递。
  • cache:缓存一般用于存储项目的依赖,比如pipnpmvendor,项目依赖变动不大的情况下使用缓存可以极大地加速构建过程。

缓存存放位置:

缓存可以指定存储到
不同executor存放cache的位置如下:

  • shell:Locally, stored under the gitlab-runner user’s home directory: /home/gitlab-runner/cache/<user>/<project>/<cache-key>/cache.zip
  • docker/docker machine:Locally, stored under Docker volumes: /var/lib/docker/volumes/<volume-id>/_data/<user>/<project>/<cache-key>/cache.zip

这里以docker为例

$ docker ps -a
CONTAINER ID        IMAGE                         COMMAND                  CREATED             STATUS                        PORTS               NAMES
9cea7d5079ca        0cc85081e891                  "gitlab-runner-helpe…"   4 minutes ago       Exited (0) 4 minutes ago                          runner-BKHmmDWP-project-612-concurrent-0-cache-c33bcaa1fd2c77edfc3893b41966cea8
728e17ed6ad2        0cc85081e891                  "gitlab-runner-helpe…"   4 minutes ago       Exited (0) 4 minutes ago                          runner-BKHmmDWP-project-612-concurrent-0-cache-3c3f060a0374fc8bc39395164f415a70
0c855de03b08        0cc85081e891                  "bash"                   26 minutes ago      Exited (127) 25 minutes ago                       pensive_banzai
639d15c4db90        gitlab/gitlab-runner:latest   "/usr/bin/dumb-init …"   5 weeks ago         Up 10 days                                        gitlab-runner


# 9cea这个container是用来保存artifacts的

$ docker inspect 9cea | grep volume
 "Type": "volume",
 "Source": "/var/lib/docker/volumes/f375877b31044f7ebd0542408b4a118d481f6a7439f6c80200fe693a2baad3ab/_data"
 
$ docker inspect 9cea | grep com.gitlab.gitlab-runner.cache.dir
"com.gitlab.gitlab-runner.cache.dir": "/builds",


# 728e这个container是用来保存cache的
$docker inspect 728e17ed6ad2 | grep volume
"Type": "volume",
"Source": "/var/lib/docker/volumes/e8bd577e7737a8001487f6e509814f315cf85a41de47abfa0460258656893d73/_data",       

docker inspect 728e | grep com.gitlab.gitlab-runner.cache.dir
"com.gitlab.gitlab-runner.cache.dir": "/cache",

# 搜索cache.zip的位置
$ find /var/lib/docker -name cache.zip
/var/lib/docker/volumes/e8bd577e7737a8001487f6e509814f315cf85a41de47abfa0460258656893d73/_data/yl2121/npm_module_test/default/cache.zip
  • 查看两个容器的详细信息
docker inspect 9cea7d5079ca
[
    {
        "Id": "9cea7d5079cab30e5cc65cb600a5659924265e1c432206222eac935c35059296",
        "Created": "2019-09-20T08:45:41.244822667Z",
        "Path": "gitlab-runner-helper",
        "Args": [
            "cache-init",
            "/builds"
        ],
        "State": {
            "Status": "exited",
            "Running": false,
            "Paused": false,
            "Restarting": false,
            "OOMKilled": false,
            "Dead": false,
            "Pid": 0,
            "ExitCode": 0,
            "Error": "",
            "StartedAt": "2019-09-20T08:45:41.8873507Z",
            "FinishedAt": "2019-09-20T08:45:41.882976815Z"
        },
        "Image": "sha256:0cc85081e89120d42ec6943bca0033664d387d7dee1b8d323ca32a2547506d3d",
        "Mounts": [
            {
                "Type": "volume",
                "Name": "f375877b31044f7ebd0542408b4a118d481f6a7439f6c80200fe693a2baad3ab",
                "Source": "/var/lib/docker/volumes/f375877b31044f7ebd0542408b4a118d481f6a7439f6c80200fe693a2baad3ab/_data",
                "Destination": "/builds",
                "Driver": "local",
                "Mode": "",
                "RW": true,
                "Propagation": ""
            }
        ],
        "Config": {
            "Hostname": "9cea7d5079ca",
            "Domainname": "",
            "User": "",
            "AttachStdin": false,
            "AttachStdout": false,
            "AttachStderr": false,
            "Tty": false,
            "OpenStdin": false,
            "StdinOnce": false,
            "Env": null,
            "Cmd": [
                "gitlab-runner-helper",
                "cache-init",
                "/builds"
            ],
            "Image": "sha256:0cc85081e89120d42ec6943bca0033664d387d7dee1b8d323ca32a2547506d3d",
            "Volumes": {
                "/builds": {}
            },
            "WorkingDir": "",
            "Entrypoint": null,
            "OnBuild": null,
            "Labels": {
                "com.gitlab.gitlab-runner.cache.dir": "/builds",
                "com.gitlab.gitlab-runner.job.before_sha": "0000000000000000000000000000000000000000",
                "com.gitlab.gitlab-runner.job.id": "59503",
                "com.gitlab.gitlab-runner.job.ref": "develop-2222",
                "com.gitlab.gitlab-runner.job.sha": "3b5d33683230bfb34bc2d22bad4304adcf63b912",
                "com.gitlab.gitlab-runner.project.id": "612",
                "com.gitlab.gitlab-runner.runner.id": "BKHmmDWP",
                "com.gitlab.gitlab-runner.runner.local_id": "0",
                "com.gitlab.gitlab-runner.type": "cache"
            }
        },

]
docker inspect 728e17ed6ad2
[
    {
        "Id": "728e17ed6ad2098b6642f1ff81daf4bd5a67beaa70e15ced3775c3e4d8c4da87",
        "Created": "2019-09-20T08:45:39.395724588Z",
        "Path": "gitlab-runner-helper",
        "Args": [
            "cache-init",
            "/cache"
        ],
        "State": {
            "Status": "exited",
            "Running": false,
            "Paused": false,
            "Restarting": false,
            "OOMKilled": false,
            "Dead": false,
            "Pid": 0,
            "ExitCode": 0,
            "Error": "",
            "StartedAt": "2019-09-20T08:45:40.20530802Z",
            "FinishedAt": "2019-09-20T08:45:40.201265468Z"
        },
        "Image": "sha256:0cc85081e89120d42ec6943bca0033664d387d7dee1b8d323ca32a2547506d3d",
        "Mounts": [
            {
                "Type": "volume",
                "Name": "e8bd577e7737a8001487f6e509814f315cf85a41de47abfa0460258656893d73",
                "Source": "/var/lib/docker/volumes/e8bd577e7737a8001487f6e509814f315cf85a41de47abfa0460258656893d73/_data",
                "Destination": "/cache",
                "Driver": "local",
                "Mode": "",
                "RW": true,
                "Propagation": ""
            }
        ],
        "Config": {
            "Hostname": "728e17ed6ad2",
            "Domainname": "",
            "User": "",
            "AttachStdin": false,
            "AttachStdout": false,
            "AttachStderr": false,
            "Tty": false,
            "OpenStdin": false,
            "StdinOnce": false,
            "Env": null,
            "Cmd": [
                "gitlab-runner-helper",
                "cache-init",
                "/cache"
            ],
            "Image": "sha256:0cc85081e89120d42ec6943bca0033664d387d7dee1b8d323ca32a2547506d3d",
            "Volumes": {
                "/cache": {}
            },
            "WorkingDir": "",
            "Entrypoint": null,
            "OnBuild": null,
            "Labels": {
                "com.gitlab.gitlab-runner.cache.dir": "/cache",
                "com.gitlab.gitlab-runner.job.before_sha": "0000000000000000000000000000000000000000",
                "com.gitlab.gitlab-runner.job.id": "59503",
                "com.gitlab.gitlab-runner.job.ref": "develop-2222",
                "com.gitlab.gitlab-runner.job.sha": "3b5d33683230bfb34bc2d22bad4304adcf63b912",
                "com.gitlab.gitlab-runner.project.id": "612",
                "com.gitlab.gitlab-runner.runner.id": "BKHmmDWP",
                "com.gitlab.gitlab-runner.runner.local_id": "0",
                "com.gitlab.gitlab-runner.type": "cache"
            }
        },
...
            }
        }
    }
]

缓存覆盖问题

如果不使用key,不同stage的缓存都会存在default下,生成cache.zip覆盖原来的缓存。
推荐使用以下方式:

stages:
- build
- test

job A:
  stage: build
  script: make build
  cache:
    key: same-key
    paths:
    - public/

job B:
  stage: test
  script: make test
  cache:
    key: same-key
    paths:
    - vendor/

清除所有项目的cache

set -e
docker version >/dev/null 2>/dev/null

echo Clearing docker cache...

CONTAINERS=$(docker ps -a -q \
             --filter=status=exited \
             --filter=status=dead \
             --filter=label=com.gitlab.gitlab-runner.type=cache)

if [ -n "${CONTAINERS}" ]; then
    docker rm -v ${CONTAINERS}
fi
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,921评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,635评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,393评论 0 338
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,836评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,833评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,685评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,043评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,694评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 42,671评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,670评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,779评论 1 332
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,424评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,027评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,984评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,214评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,108评论 2 351
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,517评论 2 343