首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >gitlab 8.2.1,如何在.gitlab-ci.yml中使用缓存

gitlab 8.2.1,如何在.gitlab-ci.yml中使用缓存
EN

Stack Overflow用户
提问于 2015-11-26 21:50:08
回答 3查看 33.9K关注 0票数 27

我正在尝试使用.gitlab-ci.yml (http://doc.gitlab.com/ce/ci/yaml/README.html#cache)中的“缓存”。我的gitlab版本是8.2.1,我的Runner是:

代码语言:javascript
复制
$ docker exec -it gitlab-runner gitlab-runner -v 
gitlab-runner version 0.7.2 (998cf5d)

因此,根据文档,一切都是最新的,但我无法使用缓存;-(。我的所有文件都会被删除。我做错了什么吗?

将创建缓存存档,但不会将其传递给下一个作业。

这是我的.gitlab-ci.yml

代码语言:javascript
复制
$ cat .gitlab-ci.yml
    stages:
    - createcache
    - testcache

    createcache:
      type: createcache
      cache:
        untracked: true
        paths:
          - doc/
      script:
        - touch doc/cache.txt

    testcache:
      type: testcache
      cache:
        untracked: true
        paths:
          - doc/
      script:
        - find .
        - ls doc/cache.txt

作业'createcache‘的输出

代码语言:javascript
复制
Running on runner-141d90d4-project-2-concurrent-0 via 849d416b5994...
Fetching changes...
HEAD is now at 2ffbadb MUST BE REVERTED
[...]
$ touch doc/cache.txt
[...]
Archiving cache...
INFO[0000] Creating archive cache.tgz ...              
INFO[0000] Done!                                        

Build succeeded.

作业'testcache‘的输出

代码语言:javascript
复制
Running on runner-141d90d4-project-2-concurrent-0 via 849d416b5994...
Fetching changes...
Removing doc/cache.txt
[...]
$ ls doc/cache.txt
ls: cannot access doc/cache.txt: No such file or directory

ERROR: Build failed with: exit code 1

我的解决方法

我的变通方法是手动解压/cache目录中的内容...我很确定这不是使用缓存的正确方式...

代码语言:javascript
复制
$ cat .gitlab-ci.yml
    stages:
    - build
    - test
    - deploy

    image: ubuntu:latest

    before_script:
      - export CACHE_FILE=`echo ${CI_PROJECT_DIR}/createcache/${CI_BUILD_REF_NAME}/cache.tgz | sed -e "s|/builds|/cache|"`

    createcache:
      type: build
      cache:
        untracked: true
        paths:
          - doc/
      script:
        - find . | grep -v ".git"
        - mkdir -p doc
        - touch doc/cache.txt

    testcache:
      type: test
      script:
        - env
        - find . | grep -v ".git"
        - tar xvzf ${CACHE_FILE}
        - ls doc/cache.txt
EN

回答 3

Stack Overflow用户

发布于 2016-02-18 18:34:03

https://gitlab.com/gitlab-org/gitlab-ci-multi-runner/issues/327

代码语言:javascript
复制
image: java:openjdk-8-jdk

before_script:
    - export GRADLE_USER_HOME=`pwd`/.gradle

cache:
  paths:
    - .gradle/wrapper
    - .gradle/caches

build:
  stage: build
  script:
     - ./gradlew assemble

test:
  stage: test
  script:
     - ./gradlew check
票数 20
EN

Stack Overflow用户

发布于 2017-04-27 19:53:19

使用共享运行器缓存容器本地文件似乎是不可能的。你必须把你的文件放在缓存文件夹中:

代码语言:javascript
复制
before_script:
  - export GRADLE_USER_HOME=/cache/.gradle

...

cache:
  paths:
    - $GRADLE_USER_HOME/caches/
    - $GRADLE_USER_HOME/wrapper/
    - $GRADLE_USER_HOME/build-cache/

严格来说,不需要将/cache文件夹作为文件放入缓存,因为这是自动发生的,但为了清楚起见,我将其保留下来(当我想要移动gradle缓存时也是如此)

票数 4
EN

Stack Overflow用户

发布于 2019-12-09 20:54:23

我们发现,缓存整个.gradle-folder会更好。这应该在每个项目中只使用一次。如果k8s用于gitlab-runner,那么您应该关闭该守护进程。

gitlab-ci.yaml

代码语言:javascript
复制
variables:
  GRADLE_OPTS: "-Dorg.gradle.daemon=false" # no gradle-daemon on k8s

# ...

buildJar:
  stage: build
  image: gradle:5.6.4-jdk11
  before_script:
    - export GRADLE_USER_HOME=`pwd`/.gradle
  script:
    - gradle assemble
  cache:
    key: "gradleCache"
    paths:
      - .gradle
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33940384

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档