Git & Jenkins: शाखा में नवीनतम ग्रीन कमिट प्राप्त करें


10

हम केवल CI-CD के लिए पुश करना शुरू कर रहे हैं और एक बच्चे के कदम के रूप में हम हर घंटे में एक बार नवीनतम ग्रीन डेवलप के साथ एक स्टैक को अपडेट करने का प्रयास करने जा रहे हैं। मैं Git / Bitbucket के लिए काफी नया हूं, और यह पता लगाने का तरीका नहीं बता सकता कि जेनकींस द्वारा किए गए चेकआउट को यह सुनिश्चित करने के लिए कैसे किया जाता है कि जेनकिन्स द्वारा हरी को चिह्नित किया गया है, बजाय केवल "अंतिम वचन" के एक कंबल बयान के रूप में।

हमारे पास बिटबकेट बिल्ड स्टेटस नोटिफ़ायर प्लगइन स्थापित है, इसलिए बिटबकेट ट्रैक करता है जो हमारे यूनिट परीक्षणों के चलने के बाद कमिट करता है। क्या यह सुनिश्चित करने के लिए इस जानकारी का लाभ उठाने का एक तरीका है कि सही प्रतिबद्ध उठाया गया है?

जवाबों:


6

आप उस स्क्रिप्टिंग भाषा का कोई उल्लेख नहीं करते हैं जिसका आप उपयोग करना चाहते हैं, इसलिए मैं विशेष रूप से बिटकॉइन के HTTP अनुरोधों के बारे में बात करूंगा:

मान्यताओं

यदि आपके पास एक बिटबकेट रिपॉजिटरी है, जिसमें तीन कमिट हैं, तो पहला और आखिरी बिल्ड फेल हो रहा है, मध्य गुजर रहा है:

  • 4768815 ❌
  • 49d7110 ✅
  • 42d357f ❌

कमिट की सूची प्राप्त करें

आप निम्नलिखित एपीआई विधि को कॉल करके कमिट्स की सूची प्राप्त कर सकते हैं:

https://api.bitbucket.org/2.0/repositories/{{owner}}/{{repo_slug}}/commits

  • owner: रिचर्डस्लेटर
  • repo_slug: हरितकंपनीप्रतिरोध

प्रतिक्रिया इस तरह दिखती है:

{
  "pagelen": 30,
  "values": [
    {
      "hash": "4768815fdc27abf4be17096e7c460f7f68f5d39b",
      "repository": { ... },
      "links": {
        ...
        "statuses": {
          "href": "https://api.bitbucket.org/2.0/repositories/RichardSlater/greencommitproofofconcept/commit/4768815fdc27abf4be17096e7c460f7f68f5d39b/statuses"
        }
      },
      "author": { ... },
      "parents": [ ... ],
      "date": "2017-04-10T11:38:18+00:00",
      "message": "README.md edited online with Bitbucket",
      "type": "commit"
    },
    {
      "hash": "49d7110b98616358d16055960a4abdf2926b890d",
      ...
    },
    {
      "hash": "42d357f1df7a7d7bcf1f10a9f3a5a40d85d5b11c",
      ...
    }
  ]
}

यदि आप JSON को पार्स करते हैं और उन प्रतिक्रियाओं पर लूप करते हैं जिनसे आप स्टेटस निकाल सकते हैं:

values[n].links.statuses.href

nसूचकांक कहां है 0, 1या 2उपरोक्त उदाहरण में। यदि आप इसे स्क्रैच से बनाना चाहते हैं तो यह निम्नलिखित प्रारूप में होगा।

समितियों की सूची प्राप्त करें

https://api.bitbucket.org/2.0/repositories/{{owner}}/{{repo_slug}}/commit/{{sha}}/statuses"

  • owner: रिचर्डस्लेटर
  • repo_slug: हरितकंपनीप्रतिरोध
  • sha: 4768815fdc27abf4be17096e7c460f7f68f5d39b

नोट: यह एक हाइपरमीडिया एपीआई है जिसका अर्थ है कि यूआरएल बदल सकता है इसलिए मैं उन्हें खरोंच से उत्पन्न करने की कोशिश करने के बजाय पिछली प्रतिक्रिया के लिंक का उपयोग करने की सलाह दूंगा।

उपरोक्त HTTP अनुरोध से प्रतिक्रिया कुछ इस तरह होगी:

{
  "pagelen": 10,
  "values": [
    {
      "key": "POC-01",
      "name": "Build #1",
      "repository": { ... },
      "url": "http://devops.stackexchange.com/q/809/397",
      "links": { ... },
      "refname": null,
      "state": "FAILED",
      "created_on": "2017-04-10T13:04:28.261734+00:00",
      "updated_on": "2017-04-10T13:04:28.261759+00:00",
      "type": "build",
      "description": "Changes by Richard Slater"
    }
  ],
  "page": 1,
  "size": 1
}

इस प्रतिक्रिया से आप निम्नलिखित stateका उपयोग कर सकते हैं :

values[n].state

फिर जहां nहै status- वहाँ अगर उनमें से कई प्रतिबद्धताओं के परिणामस्वरूप कई बिल्ड हो सकते हैं।

यदि आप जिस बिल्ड की परवाह करते हैं SUCCESSFULउसके लिए राज्य है तो आपके पास आपका जवाब है और आप तुरंत shaकमिट के लिए वापस आ सकते हैं।

पहले चरण से सभी कमियों पर लूप करें, यदि आप कमिट्स से बाहर निकलते हैं, तो उस nextपृष्ठ का अनुसरण linkकरें जो कॉल में शामिल है /commits

पूर्ण प्रवाह आरेख

उच्च स्तर पर प्रवाह इस तरह दिखेगा:

प्रवाह आरेख

यह मत भूलो कि यह एक हाइपरमेडिया एपीआई है इसलिए जहाँ भी संभव हो आपके कोड को "उन्हें अनुमान लगाने" की कोशिश करने के बजाय एपीआई में लिंक का पालन करना चाहिए।


1
हाँ, यह करता है, यह शायद एसई पर मेरा अब तक का सबसे लंबा जवाब है।
रिचर्ड स्लेटर

मैं उस समय की सराहना करता हूं जो आपने इसे समझाने के लिए लिया था, भले ही आपको लगता है कि मैं इसे चाहने के लिए पूरी तरह पागल हूं। स्वीकृत
एलेक्स

पूरी तरह से पागल नहीं, बस अपने पहले कुछ कदम उठाते हुए - जब आप सीआई / सीडी आर्किटेक्चर के बारे में सोच रहे हैं तो मेरे दूसरे जवाब को ध्यान में रखें।
रिचर्ड स्लेटर

3

एक विशिष्ट सतत वितरण / परिनियोजन पाइपलाइन में आपको निम्न कार्य करने होंगे:

  1. डेवलपर एक या एक से अधिक हिट करता है, या, एक पुल अनुरोध मर्ज किया जाता है।
  2. जेनकिंस स्वचालित रूप से परीक्षणों का निर्माण और निष्पादन करता है।
  3. यदि सफल जेनकिंस एक तैनाती पैकेज को एक आर्टेक्टैक्ट रिपॉजिटरी में प्रकाशित करता है; यदि विफलता कुछ नहीं प्रकाशित करती है और डेवलपर्स को सूचित करती है।
  4. तैनाती स्वचालन Artefact रिपोजिटरी से संकुल का उपयोग करता है और उन्हें तैनात करता है।

सरल सीआई / सीडी पाइपलाइन

लक्ष्य दो बार स्रोत से समाधान के निर्माण से बचना है , आप इसे एक बार बनाते हैं और इसे कई बार तैनात करते हैं। आप पर्यावरण अनुमोदन प्रक्रिया को परिभाषित करने के लिए सोनटाइप नेक्सस में अनुमोदन लागू कर सकते हैं , अर्थात देव → टेस्ट → यूएटी → स्टेज → प्रोडक्शन।

उस ने कहा ... यदि आपने पिछले सभी पढ़ा है और अभी भी स्रोत नियंत्रण से नवीनतम ग्रीन बिल्ड प्राप्त करना चाहते हैं तो आप दो तकनीकों में से एक का उपयोग कर सकते हैं:

  1. जेनकींस ने शाखा को उपयुक्त रूप से नामित टैग के साथ टैग किया है, यानी master-greenतब उपयोग करें masterजब आप नवीनतम ग्रीन बिल्ड चाहते हैं।
  2. हरित स्थिति के साथ कमिटमेंट खोजने के लिए कमिट और लिस्ट / {sha} / स्टेटस पाने के लिए BitBucket कमिट्स का उपयोग करें । मैंने एक अन्य उत्तर में इस समाधान पर विस्तार किया है ।

ऊपर दिए गए दृष्टिकोणों का उपयोग करने के तरीके के बारे में विशिष्ट विवरण चाहते हैं, तो एक अनुवर्ती प्रश्न पोस्ट करने के लिए स्वतंत्र महसूस करें।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.