প্রতিটি পরিবেশে আমাদের কোডটির কোন সংস্করণ রয়েছে তা আমরা কীভাবে ট্র্যাক রাখতে পারি?


14

আমার দল বর্তমানে দেখতে দেখতে মোটামুটি সহজ শাখা / স্থাপন প্রক্রিয়া ব্যবহার করে:

                ┌────────┐ ┌────┐ ┌──────┐
 Environments:  │  DEV   │ │ QA │ │ PROD │
                └────────┘ └────┘ └──────┘

                     ▲       ▲       ▲
                     │       │       │

                ┌────────┐ ┌────┐ ┌──────┐
 Builds:        │  DEV   │ │ QA │ │ PROD │
                └────────┘ └────┘ └──────┘

                     ▲       ▲       ▲
                     │       │       │

                ┌────────┐ ┌────┐ ┌──────┐
 Branches:      │ master │ │ qa │ │ prod │
                └────────┘ └────┘ └──────┘

প্রতিটি পরিবেশের নিজস্ব শাখা থাকে (আমরা গিট ব্যবহার করি ) এবং তার নিজস্ব বিল্ড যা সেই শাখাটি ব্যবহার করে। যখন আমরা এক পরিবেশ থেকে অন্য পরিবেশে প্রচার করতে চাই, উদাহরণস্বরূপ, ডিইভি থেকে কিউএতে, আমরা masterশাখাটি একীভূত করি qaএবং একটি নতুন কিউ বিল্ড (যা পরে স্বয়ংক্রিয়ভাবে QA পরিবেশে স্থাপন করা হয়) বন্ধ করি।

আমরা একটি নতুন প্রক্রিয়াতে যাওয়ার বিষয়ে বিবেচনা করছি যা একটি নিবেদিত শাখা রেখে প্রতিটি পরিবেশের জন্য তৈরি করবে। পরিবর্তে, একটি একক রিলিজ বিল্ড একটি "ডিপ্লোয়মেন্ট প্যাকেজ" তৈরি করবে যা পরে যে কোনও পরিবেশে স্থাপন করা যেতে পারে। আমরা একটি আদর্শ ওয়ার্কফ্লোটি এরকম দেখতে দেখতে কিছুটা কল্পনা করছি:

                ┌────────┐     ┌────┐     ┌──────┐
 Environments:  │  DEV   │ ──► │ QA │ ──► │ PROD │
                └────────┘     └────┘     └──────┘

                      ▲ 
                       \ 

                        ┌───────────────┐
 Builds:                │ release build │
                        └───────────────┘

                                ▲
                                │

                ┌────────┐ ┌─────────┐
 Branches:      │ master │ │ release │
                └────────┘ └─────────┘

এক পরিবেশ থেকে অন্য পরিবেশে প্রচার করা আর উত্স নিয়ন্ত্রণে পরিচালিত হবে না; পরিবর্তে, আমরা কেবল ইতিমধ্যে নির্মিত-বাইনারিগুলি ("ডিপ্লোয়মেন্ট প্যাকেজ") নেব এবং এটি নতুন পরিবেশে ফেলে দেব।

এই নতুন সিস্টেমটি আমাদের যে কোনও পরিবেশে যে কোনও বিল্ড স্থাপনের অনুমতি দেবে, যার বিভিন্ন সুবিধা রয়েছে। উদাহরণস্বরূপ, ডিইভি এবং কিউএতে প্রোড বাগ ত্রুটি সংশোধন করা তুচ্ছ। আমাদের বর্তমান সিস্টেমটি কোনও শাখাটি ঘুরিয়ে না ফেলে এটি করার সহজ উপায় সরবরাহ করে না, যা আমরা অবশ্যই এড়াতে চাই।

এই নতুন সিস্টেমে সবচেয়ে বড় অসুবিধা হ'ল আমাদের কাছে কোন পরিবেশে কোন কোড রয়েছে তা ট্র্যাক করার একটি স্বয়ংক্রিয় পদ্ধতি নেই। যদি আমাদের পিআরডি-তে একটি সংশোধন করা দরকার, বর্তমান প্রোডাকশন কোডবেসের সাথে আমাদের আর একটি ডেডিকেটেড ব্রাঞ্চ নেই in একইরকম QA- এর ক্ষেত্রেও - যদি আমরা অগ্রগতির কাজটি ড্রেজিং না করে QA তে দ্রুত পরিবর্তনের দিকে এগিয়ে যেতে চাই তবে আমাদের masterআর আর শাখা নেই যা কিউএ পরিবেশের বর্তমান অবস্থাকে প্রতিফলিত করে।

প্রতিটি পরিবেশে কী কোড রয়েছে তা আমরা কীভাবে ট্র্যাক রাখতে পারি?

কিছু বিকল্প যা আমরা বিবেচনা করছি:

  • কোন পরিবেশে কোন প্রতিশ্রুতিবদ্ধ তা ট্র্যাক রাখতে গিট ট্যাগ ব্যবহার করে
  • প্রতিটি স্থাপনা প্যাকেজের মধ্যে বিল্ড দ্বারা ব্যবহৃত গিট কমিট এম্বেড করা

আপনার কি হডসন বা জেনকিনসের মতো সিআই সিস্টেম আছে? এটি কি গিটে ফিরে তৈরি করেছে তার ট্যাগগুলি ঠেকাতে সক্ষম? (আমি জানি হাডসন এবং জেনকিন্সের জন্য এমন প্লাগইন রয়েছে যেগুলি পারে ... - অন্যদের সম্পর্কে নিশ্চিত নয়)।

@ মিশেলটি আমরা আমাদের বিল্ডগুলির জন্য এমএসবিল্ড এবং আমাদের স্থাপনার জন্য অক্টোপাস মোতায়েন করি। আমি যথেষ্ট আত্মবিশ্বাসী আমরা কাস্টম পাওয়ারশেল ডিপ্লোয়মেন্ট স্ক্রিপ্টের সাহায্যে অক্টোপাসকে আমাদের গিট রিপোজিটরির কৌশলগত করতে পারি।
নাথান বন্ধু

উত্তর:


14

গিট ট্যাগগুলি হ'ল রিলিজ নির্ধারণের জন্য আপনি যা ব্যবহার করতে চান তা সত্য। কারণটি হ'ল এগুলির আপনার কাছে অর্থ রয়েছে এবং রাষ্ট্রীয় মোতায়েন কোড এবং বিল্ড সার্ভারে থাকা কোনও তথ্যের (যেমন বিল্ড নম্বর) এর মধ্যে লিঙ্কেজটি দ্রুত সনাক্ত করতে ব্যবহার করা যেতে পারে।

আপনি যে উত্তরটি খুঁজছেন তা হ'ল এটি কেবলমাত্র অর্ধেক সমস্যা সমাধান করে। অন্যটি হলেন "আরে, এখানে .[wje]arসার্ভারে মোতায়েন রয়েছে , এটি কোন বিল্ড থেকে এসেছে?" আমরা জানি যে আপনি কখনই অ্যাপ্লিকেশনটির বিভিন্ন সংস্করণ ডিভ এবং কিএ বা প্রোডের উপর স্থাপন করে রাখতে পারবেন না। রাইট?

প্রশ্নের সেই অংশটির সমাধান হ'ল বিল্ড সার্ভারটি তথ্যটি ম্যানিফেস্টে রাখে। আমার সামনে আমার কাছে যে এক উন্মুক্ত এবং এসএনএন উদাহরণ রয়েছে তা থেকে:

<manifestEntries>
    <Specification-Title>${project.name}</Specification-Title>
    <Specification-Version>${project.version}</Specification-Version>
    <Build-Number>${build.number}</Build-Number>
    <Build-Id>${build.id}</Build-Id>
    <Svn-Revison>${svn.revision}</Svn-Revison>
</manifestEntries>

এটি ম্যাভেন-ওয়ার-প্লাগইন সংরক্ষণাগার কনফিগারেশনে রয়েছে। তবে আপনি এটি অন্য প্লাগইনগুলিতেও খুঁজে পেতে পারেন। তারপরে হডসনে, মাভেন বিল্ডের অনুরোধের অংশটি হ'ল:

-Dbuild.number=${BUILD_NUMBER}
-Dsvn.revision=${SVN_REVISION}
-Dbuild.id=${BUILD_ID}

যা সেগুলি সংজ্ঞায়িত করে যে পরে মেভেন পিক আপ করে। এবং তারপরে এটি MANIFEST.MF ফাইলটি অনুসন্ধান করার বিষয় যা এটি সার্ভারে স্থাপন করা হয়েছে এটি কী সংস্করণ তা দেখতে।

এখানে একটি গিট প্লাগইন রয়েছে , এটি পরিবেশগত ভেরিয়েবলগুলির সমান একটি সেট সরবরাহ করে:

  • GIT_COMMIT - বর্তমানের এসএএএ
  • GIT_BRANCH - দূরবর্তী সংগ্রহস্থলের নাম (উত্সের ডিফল্ট) এবং বর্তমানে ব্যবহৃত শাখার নাম যেমন, "উত্স / মাস্টার" বা "উত্স / ফু"

এই দুটি অনুশীলনের সংমিশ্রণটি আপনাকে সহজেই বিল্ডটি সনাক্ত করতে দেয় (কারণ বিল সংখ্যাগুলি এগিয়ে যায়, এবং শ চেকসামগুলির বিপরীতে এর অর্থ রয়েছে) এবং নির্দিষ্ট গিট কমিট যে এটি থেকে নির্মিত।


3

সম্পূর্ণ ভিন্ন ধারণাটি হ'ল versionsসম্পূর্ণরূপে ধারণাটি খারিজ করা । আপনার কাছে কেবলমাত্র "একটি সংস্করণ" রয়েছে যার একটি আলাদা কনফিগারযোগ্য আচরণ রয়েছে। পার্থক্যটি কেবল হ'ল, আপনার একটি সাধারণ কোডবেস রয়েছে - এমনকি উত্পাদনেও আপনি কাজ অগ্রগতিতে নিযুক্ত করবেন : তবে সক্রিয় নয়।

পার্থক্যটি কেবলমাত্র আপনার পণ্যটিতে সক্ষম হওয়া বৈশিষ্ট্যের বিভিন্ন সেট থেকে কেবলমাত্র সেদ্ধ হয়।

ডি-অ্যাক্টিভেশন বৈশিষ্ট্য টগলসের মাধ্যমে সম্পন্ন করা হয় ।

Psর্ধ্বমুখী: পুরো প্রকাশের প্রক্রিয়াটি সরল করা হয়েছে: আপনি সর্বদা আপনার সফ্টওয়্যারটির একটি সংহত সংস্করণ সরবরাহ করছেন। প্রতিটি বৈশিষ্ট্য সর্বদা পাওয়া যায় master। কোনও অতিরিক্ত শাখার প্রয়োজন নেই।

একত্রিত হওয়ার বৈশিষ্ট্যগুলির সাথে কোনও ব্যথা নেই, কারণ: কোনও শাখায় মার্জ করার প্রয়োজন নেই। কোন শাখায় কোন বৈশিষ্ট্য এবং সম্ভবত নির্ভরশীল বা অন্যান্য শাখাগুলির বৈশিষ্ট্যগুলির সাথে সংঘর্ষ রয়েছে তা নিয়ে কোনও বিভ্রান্তি নেই। প্রতিটি অংশ ইচ্ছায় সক্রিয় করা যেতে পারে। এমনকি রোলব্যাক আর প্রয়োজন হয় না: এটি কেবল একটি স্যুইচ এর ফ্লিপ

আমি জানি না, যদি তা আপনার কোডবাসের জন্য কাজ করে: কোড মানের এবং বিকাশকারী শৃঙ্খলার ক্ষেত্রে পূর্বশর্তগুলি যথেষ্ট উচ্চ - কোনও বৈশিষ্ট্য মূল কার্যকারিতা হয়ে ওঠার পরে আপনাকে "ক্লিনআপ" মোকাবেলা করতে হবে এবং আপনাকে টগলসের একটি গুচ্ছ পরিচালনা করতে হবে একটি বড় জগাখিচির প্রতিরোধ ।

সম্ভবত এটি আপনার জন্য কাজ করে।


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

1
প্রশ্নটি পৃথকভাবে জিজ্ঞাসা করতে হবে: একটি বিশেষ কনফিগারেশন সহ বাগ এখন "এখন" প্রজননযোগ্য যদি হ্যাঁ, আপনি এটি ঠিক করতে পারেন। যদি না - ত্রুটি কি ব্যাপার? আপনি সর্বদা কাজের (এবং সংহত কোড) চাপ দিন।
থমাস জাঙ্ক

-1

ম্যানিফেস্ট ফাইলটিতে সংস্করণটি রাখার জন্য আমরা মাভেন ব্যবহার করি। তারপরে অ্যাপ্লিকেশনটির কোনও ওয়েব অ্যাপ্লিকেশন সংস্করণটি প্রদর্শন করুন, বা ওয়েব পরিষেবাদির জন্য একটি / সংস্করণের শেষ পয়েন্ট রয়েছে।

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