2016-03-23 14 views
9

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

version: '2' 

services: 
    gitlab: 
    image: sameersbn/gitlab:8.5.1 
    links: 
     - redis:redisio 
     - postgresql:postgresql 
    ports: 
     - "10080:80" 
     - "10022:22" 
    environment: 
     ... 
    volumes: 
     - gitlab_data:/home/git/data 

    gitlab-ci-runner: 
    restart: always 
    image: gitlab/gitlab-runner 
    volumes: 
     - gitlab_runner_config_data:/etc/gitlab-runner 
     - /var/run/docker.sock:/var/run/docker.sock 
     - /etc/nginx/ssl/gitlab.crt:/etc/gitlab-runner/certs/ca.crt 
     - /etc/ssh:/ssh 
    links: 
     - gitlab:gitlab 

    redis: 
    ... 
    postgresql: 
    ... 


volumes: 
    postgresql_data: 
    redis_data: 
    gitlab_data: 
    gitlab_runner_config_data: 

धावक विन्यास (config.toml) है:

concurrent = 1 

[[runners]] 
    name = "docker" 
    url = <public gitlab url>/ci 
    token = <gitlab token> 
    tls-ca-file = "/etc/gitlab-runner/certs/ca.crt" 
    executor = "docker" 
    [runners.docker] 
    image = "docker-bash" 
    volumes = ["/var/run/docker.sock:/var/run/docker.sock", "/cache"] 

docker-bash छवि के लिए भेजा सिर्फ आधिकारिक docker:1.10 बैश के साथ छवि है मैं संक्षिप्तता के लिए डेटाबेस config और कुछ वातावरण चर बाहर छोड़ दिया है स्थापित।

  1. भागो npm install और सरकारी node:5 छवि में परीक्षण:

    मेरे निर्माण प्रक्रिया 3 चरणों के होते हैं। अभी के लिए, मैंने तैनाती का परीक्षण करने के लिए इस चरण को छोड़ दिया है।

  2. कोड
  3. युक्त डॉकर छवि बनाएं, निर्मित सर्वर पर निर्मित छवि को तैनात करने के लिए एक custome निर्मित उत्तरदायी डॉकर छवि के माध्यम से उत्तरदायी का उपयोग करें।

.gitlab-ci.yml फ़ाइल इस तरह दिखता है:

variables: 
    FULL_IMAGE_TAG: deploy-$CI_BUILD_REF_NAME:$CI_BUILD_ID-$CI_BUILD_REF 
    IMAGE_FILE: deploy-$CI_BUILD_REF_NAME.tar.gz 

cache: 
    paths: 
    - $IMAGE_FILE 

build: 
    stage: build 
    script: 
    - docker build -t $FULL_IMAGE_TAG . 
    - docker save $FULL_IMAGE_TAG | gzip -cf - > $IMAGE_FILE 
    artifacts: 
    paths: 
     - $IMAGE_FILE 

deploy: 
    stage: deploy 
    image: ansible-ssh 
    script: 
    - ls 
    - ansible-playbook -e image_file=$IMAGE_FILE -e branch=$CI_BUILD_REF_NAME -e full_image_name=$FULL_IMAGE_TAG deploy-playbook.yml 
    only: 
    - develop 
    - master 

आप देख सकते हैं, संकुचित डोकर छवि दोनों कैश और कलाकृतियों वर्गों में यहां के लिए जाना जाता है, लेकिन नहीं वास्तव में तैनाती चरण में उपलब्ध है , जहां जवाब को दूरस्थ मशीन पर कॉपी करना है। मैंने ls कमांड को शामिल करने का प्रयास किया है, इसलिए फ़ोल्डर सामग्री की जांच करें और फ़ाइल स्पष्ट रूप से वहां नहीं है, लेकिन यह निश्चित रूप से बनाया गया है और मैं इसे गिटलैब यूआई से डाउनलोड कर सकता हूं।

gitlab-ci-multi-runner 1.0.4 (014aa8c) 
Using Docker executor with image ansible-ssh ... 
Pulling docker image ansible-ssh ... 
WARNING: Cannot pull the latest version of image ansible-ssh : Error: image library/ansible-ssh not found 
WARNING: Locally found image will be used instead. 

Running on runner-59d43cf3-project-8-concurrent-0 via 381c2ea97744... 
Fetching changes... 
Removing artifacts.zip 
Removing deploy-develop.tar.gz 
HEAD is now at 6009bd0 test 
Checking out 6009bd0f as develop... 
HEAD is now at 6009bd0... test 

$ ls 
Dockerfile 
deploy-playbook.yml 
server 
$ ansible-playbook -e image_file=$IMAGE_FILE -e branch=$CI_BUILD_REF_NAME -e full_image_name=$FULL_IMAGE_TAG deploy-playbook.yml 
Using /etc/ansible/ansible.cfg as config file 
1 plays in deploy-playbook.yml 

PLAY *************************************************************************** 

TASK [setup] ******************************************************************* 
ok: [deploy-host] 

TASK [copy docker image] ******************************************************* 
task path: /builds/test/test/deploy-playbook.yml:44 
fatal: [deploy-host]: FAILED! => {"changed": false, "failed": true, "msg": "could not find src=/builds/test/test/deploy-develop.tar.gz"} 

NO MORE HOSTS LEFT ************************************************************* 
    to retry, use: --limit @deploy-playbook.retry 

PLAY RECAP ********************************************************************* 
deploy-host   : ok=1 changed=0 unreachable=0 failed=1 


ERROR: Build failed with: exit code 1 

मुझे लगता है कि मैं की स्थापना कर रहा हूँ नहीं या धावक सही ढंग से उपयोग है, लेकिन मैं वास्तव में साधारण मामलों परे कुछ भी करने के लिए दस्तावेज में ज्यादा नहीं मिल रहा है और मैं डॉन ': यहाँ तैनाती नौकरी से लॉग है इस उपकरण को अच्छी तरह से पता नहीं है कि यह सब कैसे हुड के नीचे एक साथ फिट बैठता है।

+0

यकीन चरणों एक को क्रियान्वित कर रहे हैं के बाद अन्य आप चरणों को जोड़ने का प्रयास किया जा करने के लिए: - निर्माण - तैनात – Pascal

+0

मैंने किया, लेकिन मैं जिस क्रम में वे में चलाने के देख सकते हैं और यह ठीक है। – aquavitae

+0

क्या होगा यदि आप 'तैनाती' नौकरी के लिए चरण 'कलाकृतियों' जोड़ते हैं? या इसे 'कैश' से नीचे ले जाएं ताकि यह सभी नौकरियों को प्रभावित करेगा? दूसरा सवाल यह है कि, क्या आप सुनिश्चित हैं कि 'कैश' और 'कलाकृतियों' दोनों एक ही पथ पर इंगित कर सकते हैं? मुझे नहीं पता, मैं सिर्फ तर्क के साथ आपकी मदद करने की कोशिश कर रहा हूं। ;) –

उत्तर

5

कैशिंग को किसी भवन के चरणों के बीच फ़ाइलों को पास करने के लिए डिज़ाइन नहीं किया गया है।

doc

कैश से: फ़ाइलों की परिभाषित सूची है कि बाद में रन के बीच कैश्ड किया जाना चाहिए

मुझे लगता है कि आपको क्या चाहिए प्रगति में वास्तव में है: WIP: Download build artifacts from previous stages and restore them in context of the build (Technology Preview)

+0

हां, यही वही है जो मैं चाहता हूं और जो मैं करने की कोशिश कर रहा हूं, लेकिन काम नहीं कर रहा है। मैंने उन दोनों लिंक को पढ़ा है, और केवल यह देखने के लिए कैश जोड़ा है कि इससे कोई फर्क पड़ता है या नहीं। हालांकि दस्तावेज कहता है कि बावजूद, दूसरी नौकरी में कलाकृतियों को बहाल नहीं किया जा रहा है। – aquavitae

+0

बिल्ड: और तैनाती: दो नौकरियां नहीं हैं, यह एक ही नौकरी के केवल दो कदम हैं – Pascal

+0

ठीक है, शायद अर्थशास्त्र बहस योग्य हैं, लेकिन क्या? क्या इससे कोई फर्क पड़ता है? – aquavitae

1

किया आप gitlab.rb

में कलाकृतियों को सक्षम करते हैं

जैसा कि Build Artifacts documentation में वर्णित है?

0

सबसे पहले, गिटलैब और गिटलैब रनर अपडेट करें, खासकर 1.0.4 धावक शांत प्रयोगात्मक था।

दूसरे कैश परिभाषा, आप जोड़ना एक महत्वपूर्ण https://docs.gitlab.com/ce/ci/yaml/README.html#cache-key

cache: 
    key: "$CI_BUILD_REF_NAME" 
    paths: 
    - .. 

देख https://gitlab.com/gitlab-org/gitlab-ci-multi-runner/blob/master/docs/configuration/advanced-configuration.md#the-runners-section से करना चाहिए, आप config.toml को संशोधित करना चाहिए और एक कैश निर्देशिका

cache_dir जोड़ें:

निर्देशिका जहां कैश का निर्माण चयनित निष्पादक (स्थानीय रूप से, डॉकर, एसएसएच) के संदर्भ में संग्रहीत किया जाएगा। यदि डॉकर निष्पादक का उपयोग किया जाता है, तो इस निर्देशिका को इसके वॉल्यूम पैरामीटर में शामिल करने की आवश्यकता है।

0

कैशिंग थोड़ा अजीब है, लेकिन अनिवार्य रूप से: जबकि <dir path> कलाकृतियों आप एक ही काम के अंदर इसका इस्तेमाल करने की अनुमति देगा

<dir path> कैश के तहत निर्माण नौकरियों के बीच उपलब्ध हैं।

तो:

cache: 
    untracked: true 
    key: "$CI_BUILD_REF_NAME" 
    paths: 
    - cache-dir/ 

setup: 
    stage: setup 
    [snip] 
    artifacts: 
    paths: 
    - cache-dir/ #notice that the path above is the same 

यह आप अपनी फ़ाइलों को कैश करने के लिए के बीच हर काम का निर्माण करते समय आप एक ही काम के अंदर है कि एक ही कैश उपयोग करने की अनुमति की अनुमति देगा।

प्रत्येक बिल्ड चरण पर कलाकृतियों के लिए आवश्यक फ़ाइलों को जोड़ने के लिए मत भूलना।