গিট ও জেনকিনস: শাখায় সর্বশেষ সবুজ কমিট পান


10

আমরা কেবল সিআই-সিডির জন্য চাপ দিতে শুরু করছি এবং শিশুর পদক্ষেপ হিসাবে আমরা প্রতি কয়েক ঘন্টা পরে সর্বশেষ সবুজ বিকাশের সাথে একটি স্ট্যাক আপডেট করার চেষ্টা করব। আমি গিট / বিটবকেটে মোটামুটি নতুন, এবং জেনকিনস যে চেকআউটটি "কমেন্ট স্টেটমেন্ট" হিসাবে স্রেফ "শেষ প্রতিশ্রুতি" না দিয়ে, জেনকিন্সকে সবুজ হিসাবে চিহ্নিত করার জন্য সর্বশেষ প্রতিশ্রুতি দেয় তা কীভাবে নিশ্চিত করা যায় তা বুঝতে পারি না।

আমাদের বিটবকেট বিল্ড স্ট্যাটাস নোটিফায়ার প্লাগইন ইনস্টল আছে, সুতরাং আমাদের ইউনিট পরীক্ষা চালানোর পরে কোন কমিটটি কমেন্ট হয় তা বিটবকেট ট্র্যাক করে। সঠিক প্রতিশ্রুতি বাছাই করা হয়েছে কি না তা নিশ্চিত করার জন্য এই তথ্যটি কীভাবে উপার্জনের কোনও উপায় আছে?

উত্তর:


6

আপনি যে স্ক্রিপ্টিং ভাষাটি ব্যবহার করতে চান সে সম্পর্কে আপনি কোনও উল্লেখ করবেন না, তাই আমি বিটবকেট API এ 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",
      ...
    }
  ]
}

আপনি যদি জেএসএনকে পার্স করেন এবং প্রতিক্রিয়াগুলিতে লুপ করেন তবে আপনি এর থেকে স্ট্যাটাসগুলি বের করতে পারেন:

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

দ্রষ্টব্য: এটি একটি হাইপারমিডিয়া এপিআই যার অর্থ ইউআরএলগুলি পরিবর্তিত হতে পারে তাই আমি লিঙ্কগুলি স্ক্র্যাচ থেকে উত্পন্ন করার পরিবর্তে আগের প্রতিক্রিয়া থেকে ব্যবহার করার পরামর্শ দেব।

উপরের এইচটিটিপি অনুরোধের প্রতিক্রিয়া এমন হবে:

{
  "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. ডিপ্লোমেন্ট অটোমেশন আর্টেফ্যাক্ট রিপোজিটরি থেকে প্যাকেজগুলি ব্যবহার করে এবং তাদের স্থাপন করে।

সাধারণ সিআই / সিডি পাইপলাইন

লক্ষ্য এড়াতে হয় বিল্ডিং উৎস থেকে সমাধান দুইবার, আপনি এটি একবার গড়ে তোলা এবং এটা স্থাপন অনেকবার। আপনি পরিবেশ অনুমোদনের প্রক্রিয়াটি সংজ্ঞায়িত করার জন্য সোনারটাইপ নেক্সাসে অনুমোদনগুলি বাস্তবায়ন করতে পারেন , যেমন দেব → টেস্ট → ইউএটি → পর্যায় → উত্পাদন।

এটি বলেছিল ... আপনি যদি পূর্বের সমস্তগুলি পড়ে থাকেন এবং এখনও উত্স নিয়ন্ত্রণ থেকে সর্বশেষ সবুজ বিল্ড পেতে চান তবে আপনি দুটি কৌশলগুলির মধ্যে একটি ব্যবহার করতে পারেন:

  1. জেনকিন্সকে উপযুক্ত নামযুক্ত ট্যাগ দিয়ে শাখাটি ট্যাগ করুন, master-greenতারপরে masterআপনি সর্বশেষতম সবুজ বিল্ড চাইলে তার পরিবর্তে এটি ব্যবহার করুন ।
  2. সবুজ স্ট্যাটাসের সাথে প্রতিশ্রুতি সন্ধানের জন্য কমিটের তালিকা পেতে এবং প্রতিটির / / {sha} / স্ট্যাটাসের প্রতিশ্রুতিবদ্ধ করার জন্য বিটবকেট কমিটগুলি ব্যবহার করুন । আমি অন্য উত্তরে এই সমাধানটি প্রসারিত করেছি ।

উপরোক্ত পদ্ধতিগুলি কীভাবে ব্যবহার করতে হবে তার সুনির্দিষ্ট বিবরণ চাইলে নিখরচায় একটি ফলোআপ প্রশ্ন পোস্ট করুন।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.