मैं कलाकृतियों को दूसरे चरण में कैसे पारित कर सकता हूं?


107

मैं अलग स्क्रिप्ट के साथ विभिन्न चरणों को चलाने के लिए .itlab-ci.yml फ़ाइल के साथ GitLab CI का उपयोग करना चाहता हूं। पहला चरण एक उपकरण का निर्माण करता है जिसे परीक्षण करने के लिए बाद के चरण में उपयोग किया जाना चाहिए। मैंने जनरेट किए गए टूल को कलाकृतियों के रूप में घोषित किया है।

अब मैं बाद के चरण की नौकरी में उस टूल को कैसे निष्पादित कर सकता हूं? सही रास्ता क्या है, और इसके आसपास कौन सी फाइलें होंगी?

उदाहरण के लिए पहला चरण कलाकृतियों / बिन / TestTool / TestTool.exe बनाता है और उस निर्देशिका में अन्य आवश्यक फाइलें (DLL और अन्य) शामिल हैं। मेरा .itlab-ci.yml फ़ाइल इस तरह दिखता है:

releasebuild:
  script:
    - chcp 65001
    - build.cmd
  stage: build
  artifacts:
    paths:
      - artifacts/bin/TestTool/

systemtests:
  script:
    - chcp 65001
    - WHAT TO WRITE HERE?
  stage: test

अगर यह प्रासंगिक है, तो निर्माण और परीक्षण विंडोज पर चलते हैं।

जवाबों:


102

का उपयोग करें dependencies। इस कॉन्फ़िगरेशन परीक्षण चरण के साथ बिल्ड चरण के दौरान बनाई गई अनट्रैक की गई फ़ाइलों को डाउनलोड करेगा:

build:
  stage: build
  artifacts:
    untracked: true
  script:
    - ./Build.ps1

test:
  stage: test
  dependencies: 
    - build
  script:
    - ./Test.ps1

9
अंत में यह काम करने के लिए मिल गया! यहाँ मुख्य बिंदु निर्भरताएँ हैं जिन्हें कलाकृतियों के साथ प्रयोग किया जाना चाहिए। केवल उन कलाकृतियों को शामिल किया गया जो बाद के चरण में उपभोग के लिए उपलब्ध होंगी। यह कहने की आवश्यकता नहीं है कि जो अपलोड किया जा रहा है, उस पर रूढ़िवादी रहें। मैं कहूंगा कि एक्सपायर_इन का उपयोग करें। अन्यथा हम बहुत सारे भंडारण को बर्बाद कर सकते हैं। इन कलाकृतियों को बिल्ड जॉब / स्टेज / स्टेप में gitlab पर अपलोड किया गया और परीक्षण में डाउनलोड किया गया।
रविकांत 16

18
क्या आपको वास्तव में निर्भरता का उपयोग करना है? Gitlab प्रलेखन राज्यों Note that artifacts from all previous stages are passed by default.। सवाल यह है कि आपको निर्भरता का उपयोग करने की आवश्यकता कब है।

2
प्रलेखन इसे काफी अच्छी तरह से साफ करता है: docs.gitlab.com/ee/ci/yaml/#d डिपेंडेंसी
chetbox

3
पिछले सभी चरणों से @Josef कलाकृतियों को डिफ़ॉल्ट रूप से पारित किया जाता है (पिछली नौकरियों से नहीं)
विवेक

1
@ जॉज़ जब आपको वर्तमान नौकरी के लिए पिछले सभी चरणों से सभी कलाकृतियों की आवश्यकता नहीं है। मान लीजिए कि आपके पास बिल्ड स्टेज द्वारा उत्पन्न 10 जीबी की बायनेरी है, लेकिन आपका अंतिम चरण बस सफल बिल्ड के बारे में कुछ ईमेल भेजता है - आपको इस नौकरी के लिए सभी 10 जीबी डाउनलोड करने की आवश्यकता नहीं है
Ezh

49

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

image: ubuntu:18.04

stages:
  - build_stage
  - test_stage
  - deploy_stage

build:
  stage: build_stage
  script:
    - echo "building..." >> ./build_result.txt
  artifacts:
    paths:
    - build_result.txt
    expire_in: 1 week

unit_test:
  stage: test_stage
  script:
    - ls
    - cat build_result.txt
    - cp build_result.txt unittest_result.txt
    - echo "unit testing..." >> ./unittest_result.txt
  artifacts:
    paths:
    - unittest_result.txt
    expire_in: 1 week

integration_test:
  stage: test_stage
  script:
    - ls
    - cat build_result.txt
    - cp build_result.txt integration_test_result.txt
    - echo "integration testing..." >> ./integration_test_result.txt
  artifacts:
    paths:
    - integration_test_result.txt
    expire_in: 1 week

deploy:
  stage: deploy_stage
  script:
    - ls
    - cat build_result.txt
    - cat unittest_result.txt
    - cat integration_test_result.txt

यहां छवि विवरण दर्ज करें

और विभिन्न चरणों में नौकरियों के बीच कलाकृतियों को पारित करने के मामले में, हम कलाकृतियों के साथ कलाकृतियों के साथ निर्भरता का उपयोग कर सकते हैं , जैसा कि दस्तावेज़ से वर्णित है ।

और एक और सरल उदाहरण:

image: ubuntu:18.04

build:
  stage: build
  script:
    - echo "building..." >> ./result.txt
  artifacts:
    paths:
    - result.txt
    expire_in: 1 week

unit_test:
  stage: test
  script:
    - ls
    - cat result.txt
    - echo "unit testing..." >> ./result.txt
  artifacts:
    paths:
    - result.txt
    expire_in: 1 week

deploy:
  stage: deploy
  script:
    - ls
    - cat result.txt

बहुत स्पष्ट स्पष्टीकरण, धन्यवाद। यदि एक मंच पिछले चरण से एक विरूपण साक्ष्य के रूप में उसी नाम से एक कलाकृतियों का नाम देता है, तो क्या मूल कलाकृतियों को अधिलेखित किया जाता है?
माइकल ओस्फोस्की

1
@MichaelOsofsky आप एक ही नाम से कलाकृतियों का नाम रख सकते हैं, मूल कलाकृतियों को एक ही नाम के साथ अगले चरण से ओवरराइट नहीं किया जाएगा। अगला चरण केवल पूर्व चरण से कलाकृतियों को डाउनलोड करता है, यह इसकी एक प्रति है। मैं उन्हें उदाहरण में अलग-अलग नाम देता हूं मुख्य रूप से इकाई परीक्षण और एकीकरण के कारण समानांतर में निष्पादित किया जाएगा। यदि हम .eg एकीकरण परीक्षण नौकरी को हटा देते हैं, तो सभी नौकरियां अनुक्रम में निष्पादित होंगी, फिर हम बिना किसी भ्रम के सभी कलाकृतियों के लिए एक ही नाम का उपयोग कर सकते हैं। FYI करें, मैं एक और उदाहरण के साथ उत्तर को अपडेट करता हूं।
चुआन

आपके उदाहरण में मैं देख रहा हूँ कि आप result.txt से जुड़ रहे हैं। यदि आप job.t_estest में result.txt को ओवरराइड करते हैं, तो मुझे लगता है कि जॉब परिनियोजित होने पर जॉब बिल्ड से परिणाम.txt की सामग्री तक कभी पहुंच नहीं होगी। मैं सिर्फ यह सुनिश्चित करने के लिए कह रहा हूं कि मैं अपनी स्क्रिप्ट में इस प्रकार के बग का कारण कभी न बनूं।
माइकल ओसोफ्स्की

1
लॉग के अनुसार, तैनाती चरण दोनों build.txt को निर्माण और परीक्षण चरणों से डाउनलोड करेगा, लेकिन बाद में एक पूर्व को अधिलेखित कर देगा।
चुआन

1
BTW, मूल विरूपण साक्ष्य को छुआ और हमेशा CI / CD -> पाइपलाइनों से डाउनलोड करने के लिए उपलब्ध नहीं है, फिर दाईं ओर कलाकृतियों के लिए ड्रॉपडाउन बटन पर क्लिक करें, आपको सभी चरणों की सभी कलाकृतियां मिलेंगी।
चुआन
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.