gitlab 8.2.1, gitlab-ci.yml में कैश का उपयोग कैसे करें

मैं .gitlab-ci.yml में 'कैश' का उपयोग करने की कोशिश कर रहा हूं ( http://doc.gitlab.com/ce/ci/yaml/README.html#cache )। मेरा गिटलैब संस्करण 8.2.1 है और मेरा रनर है:

$ docker exec -it gitlab-runner gitlab-runner -v 
gitlab-runner version 0.7.2 (998cf5d)

तो डॉक्टर के अनुसार, सबकुछ अद्यतित है, लेकिन मैं कैश का उपयोग करने में असमर्थ हूं ;-(। मेरी सभी फाइलें हमेशा हटा दी जाती हैं। क्या मैं कुछ गलत कर रहा हूं?

एक कैश संग्रह बनाया जाता है, लेकिन अगली नौकरियों तक नहीं पारित किया जाता है।

यहाँ मेरा .gitlab-ci.yml है

$ 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'

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.

नौकरी 'टेस्ट कैश' का आउटपुट

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

मेरा कामकाज

मेरा कामकाज is to manually untar what's in the /cache directory ... I'm pretty sure that's not the correct way to use cache ...

$ 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
20

3 उत्तर

https://gitlab.com/gitlab-org/gitlab-ci-multi-runner/ मुद्दों/327

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
16
जोड़ा
मेरे साथ ही होता है, यह कैश बचाता है और इसे लागू करता है लेकिन ग्रैडल अभी भी डाउनलोड कर रहा है, इस पर कोई खबर है?
जोड़ा लेखक nilsi, स्रोत
मुझे कहना है कि मैंने @SailAvid के समान परिणाम देखे हैं। मैंने हर संभव स्नातक निर्देशिका के बारे में भी कैश करने का प्रयास किया जो कि पहले नौकरी (जैसे निर्माण) से अस्तित्व में हो सकता है और दूसरी निर्भरता में सभी निर्भरताओं को फिर से खींचा जा रहा था।
जोड़ा लेखक user376327, स्रोत
मैंने उपरोक्त कॉन्फ़िगरेशन का उपयोग किया लेकिन ग्रेडल रैपर अभी भी फ़ाइलों को .gradle/wrapper में डाउनलोड कर रहा था। शायद यह कुछ अन्य संबंधित मुद्दा है।
जोड़ा लेखक SailAvid, स्रोत
मुझे भी। फ़ाइल पढ़ने पर, ऐसा लगता है कि हम GRADLE_USER_HOME को पथ अंदर बिल्ड-फ़ोल्डर (इसलिए हम इसे कैश कर सकते हैं) पर सेट कर रहे हैं और कैश को बनाया जा रहा है और निम्नलिखित नौकरियों पर लागू होता है लेकिन धीरे-धीरे डाउनलोड करना जारी रहता है। इस पर कोई नया विचार?
जोड़ा लेखक hardysim, स्रोत

8.2 केवल प्रति-नौकरी कैश का समर्थन करता है, और 8.3 "समूह" कैश पेश करेगा जो @ Ayufan की टिप्पणी निर्माण निर्देशिका में फ़ोल्डरों को कैश करने की संभावना में टिप्पणी (# 9 7)

हालांकि, हालांकि, मैं 100% निश्चित नहीं हो सकता, गिटलाब-सीआई-म्यूट-रनर के स्रोत कोड को त्वरित रूप से खोदकर, डॉकर निष्पादक कैश कार्यक्षमता के साथ काम नहीं कर रहा है। चूंकि प्रत्येक नौकरी में एक नया नया कंटेनर बनाया और नष्ट हो जाता है, इसलिए cache.tgz संग्रह अब अगले निर्माण में मौजूद नहीं होगा।

Errata:

The above description is incorrect due to testing in a misconfigured environment. By default, gitlab-ci-multi-runner creates a dedicated data volume container as a cache storage for each concurrent build. The cache container is mounted to directory /cache in the application container and those cache.tgz tarballs are placed under /cache by default. So caches are actually reusable among independent builds.

अद्यतन 2015/12/11:

बस पता चला है कि "समूह" कैश gitlab-runner @ 7dc9524f6ef0144b3797fc07c9035f38a8ad0512 में पहले से ही लागू किया जा चुका है , शायद अभी तक जारी नहीं किया गया है और दस्तावेज किया गया है। आप इसे सक्षम कर सकते हैं

cache:
  paths:
    - doc/
  group: sharedcache

The result is one cache tarball being placed under path //sharedcache/ instead of two cache tarballs being placed separately under path //createcache/ and //testcache/.

अपडेट 2017/12/04:

"समूह" कैश को कैश: कुंजी द्वारा प्रतिस्थापित किया गया है। नौकरियों या गिट संदर्भों के बीच कैश साझा करने के लिए कुंजी कुंजी का उपयोग करें। डिफ़ॉल्ट रूप से, सभी नौकरियों के बीच एक कैश साझा किया जाता है। तो, बस नौकरी करने के लिए निम्नलिखित लिखें

cache:
  paths:
    - doc/

चेकआउट गिटलैब सीआई कैश: कुंजी और gitlab-runner @ d34f76f86a7c2fc4d399e9922175bcc614434016

10
जोड़ा
सीआई लिटर का कहना है test: कैश कॉन्फ़िगरेशन में अज्ञात कुंजी हैं: समूह
जोड़ा लेखक Kyslik, स्रोत
@Kyslik इसे कैश: कुंजी द्वारा प्रतिस्थापित किया गया है। gitlab.com/gitlab-org/gitlab-runner/commit/&hellip देखें; और docs.gitlab.com/ee/ci/yaml/ # कैश-कुंजी
जोड़ा लेखक Lance Chen, स्रोत

ऐसा लगता है कि साझा धावकों के साथ कंटेनर स्थानीय फ़ाइलों को कैश करना संभव नहीं है। आपको अपनी फाइलें उदा। कैश फ़ोल्डर:

before_script:
  - export GRADLE_USER_HOME=/cache/.gradle

...

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

कड़ाई से इसे कैश में फ़ाइलों के रूप में/कैश फ़ोल्डर डालने की आवश्यकता नहीं है, क्योंकि यह स्वचालित रूप से होता है, लेकिन मैं इसे स्पष्टता के लिए छोड़ देता हूं (जब भी मैं ग्रेडल कैश को स्थानांतरित करना चाहता हूं)

2
जोड़ा
मुझे याद है कि यह कहीं कहीं पढ़ रहा है, शायद उन्होंने व्यवहार को बदल दिया है और/या इसे दस्तावेज़ों से हटा दिया है?
जोड़ा लेखक for3st, स्रोत
क्या /cache कहीं दस्तावेज है? मैंने केवल कैश: का उल्लेख करने वाले दस्तावेज़ देखे हैं
जोड़ा लेखक bitek, स्रोत