deployment সকল আপনি কিভাবে উন্নয়ন কোড এবং উত্পাদন কোড বজায় রাখা?




ট্রেস এলিমেন্ট (10)

শাখাগুলিতে ডেভেলপমেন্ট কোড, ট্রাঙ্কে ট্যাগ করা লাইভ কোড।

কোনও "নিখুঁত কোডটি কার্যকর করতে হবে" রুলের প্রয়োজন নেই - বিকাশকারীর যেকোনো কিছু চারটি স্থানে বাছাই করা উচিত: কোড পর্যালোচনা, শাখা পরীক্ষা, প্রতিক্রিয়া পরীক্ষা, চূড়ান্ত QA পরীক্ষার।

এখানে আরো বিস্তারিত ধাপে ধাপে ব্যাখ্যা রয়েছে:

  1. আপনি যেতে হিসাবে নিয়মিত সঞ্চালন, একটি শাখা উপর সব উন্নয়ন করুন।
  2. একবার সমস্ত উন্নয়ন সম্পন্ন হলে স্বাধীন কোড সংশোধনের পর্যালোচনা।
  3. তারপর পরীক্ষার উপর শাখা পাস।
  4. একবার শাখা পরীক্ষা সম্পূর্ণ, রিলিজ প্রার্থী শাখা মধ্যে কোড মার্জ।
  5. রিলিজ প্রার্থী শাখা প্রতিটি পৃথক মার্জ পরে পরীক্ষিত হয়।
  6. সব dev শাখা একত্রিত করার পর চূড়ান্ত QA এবং UA পরীক্ষা RC সঞ্চালিত।
  7. একবার QA এবং UAT পাস হয়ে গেলে MAIN / TRUNK শাখায় রিলিজ শাখাটি মার্জ করুন।
  8. অবশেষে, সেই বিন্দুতে ট্রাঙ্কটি ট্যাগ করুন এবং সেই ট্যাগটি লাইভতে স্থাপন করুন।

কোড বজায় রাখার সময় অনুসরণ করার জন্য সর্বোত্তম অনুশীলনী এবং নিয়ম-বিধি কী? বিকাশ শাখায় কেবলমাত্র উত্পাদন প্রস্তুত কোড থাকতে ভাল অভ্যাস, নাকি সর্বশেষ শাখাটি বিকাশের শাখায় পাওয়া যাবে?

আপনি কিভাবে আপনার উন্নয়ন কোড এবং উত্পাদন কোড বজায় রাখা?

সম্পাদনা করুন - সম্পূরক প্রশ্ন - আপনার ডেভেলপমেন্ট টিম "অনুসরণ-যত তাড়াতাড়ি-সম্ভব-এবং-প্রায়ই-এমনকি-যদি-কোড-অন্তর্ভুক্ত-ক্ষুদ্র-বাগ-বা-অসম্পূর্ণ হয়" কেবলমাত্র নিখুঁত কোড "প্রোটোকল ডেভেলপমেন্ট শাখায় কোড করার সময়?


ওহ হ্যাঁ - এক অন্য জিনিস - আমরা সিভিএস HEAD মধ্যে অ উত্পাদন কোড রাখা (অর্থাত্ যা যা কখনও মুক্তি হবে না - যেমন টুল স্ক্রিপ্ট, টেস্টিং ইউটিলিটি) রাখা। সাধারণত এটি পরিষ্কারভাবে চিহ্নিত করা দরকার যাতে কেউ "ঘটনাক্রমে" এটি প্রকাশ করে না।


আমরা ব্যাবহার করি:

  • বিশেষভাবে উন্নয়ন শাখা

প্রকল্পটির সমাপ্তি শেষ না হওয়া পর্যন্ত, অথবা আমরা একটি মাইলফলক সংস্করণ তৈরি করছি (উদাহরণস্বরূপ পণ্য ডেমো, উপস্থাপনা সংস্করণ), তারপরে আমরা (নিয়মিত) আমাদের বর্তমান বিকাশ শাখাকে বন্ধ করে দিই:

  • শাখা মুক্তি

কোন নতুন বৈশিষ্ট্য রিলিজ শাখা যেতে। রিলিজ শাখাটিতে কেবলমাত্র গুরুত্বপূর্ণ বাগ সংশোধন করা হয় এবং এই বাগগুলি ঠিক করার জন্য কোডটি বিকাশ শাখায় পুনঃনির্মিত করা হয়।

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

ঘটনাক্রমে আমরা একটি নতুন এবং অপ্রচলিত প্রযুক্তির উপর কাজ করে এমন একটি বিকাশকারীর জন্য শাখাও বা ধারণাটির প্রমাণ তৈরি করি। কিন্তু সাধারণত এটি কেবল তখনই সম্পন্ন হয় যখন কোডবেজের অনেক অংশ প্রভাবিত হয়। এটি প্রতি 3-4 মাসে গড়ে ওঠে এবং এই ধরনের একটি শাখা সাধারণত এক বা দুই মাসের মধ্যে পুনরায় বিভাজিত (বা স্ক্র্যাপড) হয়।

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

চেক ইন প্রাথমিক প্রশ্ন:

যদি আপনার কেবলমাত্র নিখুঁত কোডটি পরীক্ষা করা প্রয়োজন হয় তবে আসলে কোনও চেক ইন করতে হবে না। কোনও কোড নিখুঁত নয় এবং QA যাচাই এবং পরীক্ষা করার জন্য এটি উন্নয়ন শাখায় থাকতে হবে যাতে নতুন এক্সিকিউটেবলটি তৈরি করা যেতে পারে।

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

নতুন কোডটি তৈরি না হওয়া পর্যন্ত প্রতিটি এখন এবং তারপর একটি অপরিহার্য সংযুক্ত কোড এবং ডেটা চেকইন প্রোগ্রামটিকে অব্যবহারযোগ্য করে তুলবে। অন্তত আমরা যা করতে পারি তা চেক ইন মন্তব্য এবং / অথবা একটি ই-মেইল পাঠাতে "তৈরি করার জন্য অপেক্ষা করুন" যোগ করতে হয়।


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


আমরা ট্রাঙ্ক উপর বিকশিত হয়, তারপর প্রতিটি দুই সপ্তাহের branched এবং উত্পাদন করা হয়। শুধুমাত্র সমালোচনামূলক বাগ শাখা মধ্যে সংশোধন করা হয়, বাকিরা দুই সপ্তাহ অপেক্ষা করতে পারেন।

ট্রাঙ্কের জন্য একমাত্র নিয়ম হল যে একটি কমিটি কিছু ভাঙ্গতে পারে না। উইপ-কোড এবং অনির্বাচিত কোড পরিচালনা করতে আমরা স্ট্যাটাসগুলিকে টগল করতে এবং বন্ধ করা সহজ করে তুলতে যথাযথ যুক্ত করি।

মূলত এটি যে কোন সময়ে ট্রাঙ্ক শাখা এবং উত্পাদন এটি করা সম্ভব হবে।


আমি গিট ব্যবহার এবং আমি 2 শাখা আছে: মাস্টার এবং রক্ষণাবেক্ষণ

  • মাস্টার - উন্নয়ন কোড
  • রক্ষণাবেক্ষণ - উত্পাদন কোড

যখন আমি উৎপাদন কোডটি প্রকাশ করি, তখন আমি এটি ট্যাগ করি এবং শাখা বজায় রাখার জন্য মাস্টারকে মার্জ করি। আমি সবসময় রক্ষণাবেক্ষণ শাখা থেকে স্থাপন। উন্নয়ন শাখা থেকে প্যাচ আমি চেরি-শাখা বজায় রাখার জন্য এবং প্যাচ স্থাপন স্থাপন তাদের বাছাই।


dev ট্রাঙ্ক যায় (svn শৈলী) এবং রিলিজ (উত্পাদন কোড) তাদের নিজস্ব শাখা পেতে

এটি "শাখা দ্বারা উদ্দেশ্যমূলক মডেল" (চিত্র 3 শাখার মডেল /! \ Pdf এর গুরুত্ব )


আমাদের একটি "রিলিজ" শাখা রয়েছে যা বর্তমানে উৎপাদনের জন্য রয়েছে বা খুব শীঘ্রই স্থাপন করা হবে (ইতিমধ্যে সর্বাধিক QA পাস করেছে)

প্রতিটি প্রকল্প, অথবা কিছু ক্ষেত্রে অন্যান্য ইউনিট, তার নিজস্ব শাখা রয়েছে যা মুক্তির জন্য ছড়িয়ে পড়ে।

পরিবর্তনগুলি প্রকল্পে ডেভেলপারদের দ্বারা, তাদের প্রকল্পের নিজস্ব শাখায় প্রতিশ্রুতিবদ্ধ হয়। পর্যায়ক্রমে, রিলিজ একটি বিকাশ শাখা মধ্যে ফিরে মার্জ করা হয়।

একবার শাখায় কাজ প্যাকেজগুলি সব QA'd (ইউনিট পরীক্ষা, সিস্টেম পরীক্ষা, কোড পর্যালোচনা, QA পর্যালোচনা ইত্যাদি) একবার, শাখাটি মুক্তির শাখায় একত্রিত হয়। নতুন বিল্ডগুলি রিলিজ শাখা থেকে তৈরি করা হয়েছে এবং সেই সংস্করণে চূড়ান্ত বৈধতা ঘটে।

একটি বিভাজন সম্পন্ন হওয়ার পরে একটি সমস্যা আবিষ্কৃত না হওয়া পর্যন্ত প্রক্রিয়া মূলত ঠিক আছে। একটি WP যদি এটি মার্জ হওয়ার পরে "আটকে যায়" পায়, এটি ঠিক না হওয়া পর্যন্ত এটির পরে সবকিছু আপ রাখে (আটকে থাকা না হওয়া পর্যন্ত আমরা অন্য রিলিজ করতে পারি না)।

এটি কিছুটা নমনীয় - খুব ছোট পরিবর্তনটি সরাসরি রিলিজ শাখায় ঘটতে পারে যদি এটি খুব কম সময়ের স্কেলে (1-2 দিন বা তার মত) প্রকাশ করা হয়।

যদি কোনো কারণে কোনও কারণে সরাসরি কোনও কারণে উৎপাদন করা হয় (একটি গুরুতর গ্রাহক-প্রভাবিত উত্পাদন সমস্যা যার জন্য একটি তাত্ক্ষণিক কোড সংশোধন করার প্রয়োজন হয়), সেই পরিবর্তনগুলি BRANCH_RELEASE এ ফিরিয়ে আনা হবে। যে কদাচিৎ কখনও ঘটে।


2019 আপডেট করুন:

এই দিন, প্রশ্নটি গিট ব্যবহার করে প্রেক্ষাপটে দেখানো হবে এবং distributed বিকাশ workflow (প্রধানত গিথহাবের মাধ্যমে সহযোগিতা) ব্যবহার করে 10 বছর সাধারণ সর্বোত্তম অনুশীলনগুলি দেখায়:

  • master যে কোনও সময়ে প্রস্তুত হওয়ার জন্য প্রস্তুত শাখা: পরবর্তী রিলিজ, বৈশিষ্ট্যযুক্ত শাখার একটি নির্বাচিত সেট master
  • dev (বা ইন্টিগ্রেশন শাখা, বা ' next ') হল এমন একটি যেখানে পরবর্তী রিলিজের জন্য নির্বাচিত বৈশিষ্ট্য শাখাটি একসাথে পরীক্ষা করা হয়
  • maintenance (বা hot-fix ) শাখা বর্তমান রিলিজ বিবর্তন / বাগ ফিক্সগুলির জন্য একটি, সম্ভবত সম্ভব dev এবং master

যে ধরনের কার্যপ্রবাহ (যেখানে আপনি master dev de merge না করেন, তবে যেখানে আপনি শুধুমাত্র বৈশিষ্ট্য শাখাটি ডিভতে মার্জ করবেন, তারপরে নির্বাচিত হলে, master , যাতে সহজে ড্রপ করতে সক্ষম হবেন বৈশিষ্ট্য শাখার পরবর্তী রিলিজের জন্য প্রস্তুত না) Git repo নিজেই বাস্তবায়িত, gitworkflow ( এখানে একটি শব্দ, এখানে চিত্রিত )।
rocketraman/gitworkflow এ আরও দেখুন।

(উত্স: গিটওয়ার্কফ্লো: একটি টাস্ক ওরিয়েন্টেড প্রাইমার )

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

মূল উত্তর (অক্টোবর 2008, 10+ বছর আগে)

এটি সব আপনার রিলিজ পরিচালনার ক্রমবর্ধমান প্রকৃতির উপর নির্ভর করে

প্রথম, আপনার ট্রাঙ্ক সবকিছু সত্যিই পরবর্তী রিলিজের জন্য ? আপনি বর্তমানে আবিষ্কার করা কিছু ফাংশন খুঁজে বের করতে পারেন:

  • খুব জটিল এবং এখনও পরিমার্জিত করা প্রয়োজন
  • সময় প্রস্তুত না
  • আকর্ষণীয় কিন্তু এই পরবর্তী রিলিজের জন্য নয়

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

যখন এটি উত্পাদনের কোড আসে, তখন আপনার প্যাচ শাখা পরিচালনা করতে হবে, মনে রাখবেন যে:

  • প্যাচগুলির প্রথম সেটটি প্রকৃতপক্ষে উত্পাদনে প্রথম প্রকাশের আগে শুরু হতে পারে (অর্থাত আপনি জানেন যে আপনি কিছু সময়ের মধ্যে সংশোধন করতে পারবেন না এমন কিছু বাগ নিয়ে আপনি উত্পাদন করতে পারবেন তবে আপনি সেগুলির জন্য একটি পৃথক শাখার জন্য কাজ শুরু করতে পারেন)
  • অন্যান্য প্যাচ শাখা বিলাসিতা একটি ভাল সংজ্ঞায়িত উত্পাদন লেবেল থেকে শুরু করতে হবে

যখন এটি ডেভ শাখার কাছে আসে, তখন আপনার এক ট্রাঙ্ক থাকতে পারে, যদি না আপনার অন্য উন্নয়ন প্রচেষ্টা থাকে তবে আপনাকে সমান্তরাল করতে হবে:

  • বৃহদায়তন refactoring
  • একটি নতুন প্রযুক্তিগত লাইব্রেরির পরীক্ষা যা অন্য ক্লাসগুলিতে আপনি যেভাবে কল করেন সেটি পরিবর্তন করতে পারে
  • একটি গুরুত্বপূর্ণ রিলিজ চক্র শুরু যেখানে গুরুত্বপূর্ণ স্থাপত্য পরিবর্তন অন্তর্ভুক্ত করা প্রয়োজন।

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

উইল এম এর মন্তব্যের উত্তর দিতে:

  • মনে রাখবেন যে ডেভ শাখাটি 'প্রতি বিকাশকারীর একটি শাখা' এর অর্থ নয় (যা 'বিকাশকারী পাগলতা' ট্রিগার করবে, প্রতিটি বিকাশকারীকে তাদের কাজ দেখতে / পেতে অন্য কাজটি একত্রিত করতে হবে), তবে প্রতি বিকাশের জন্য একটি ডিভ শাখা প্রচেষ্টা.
  • যখন সেই প্রচেষ্টাকে ট্রাঙ্কে (অথবা অন্য কোন "প্রধান" বা আপনি প্রকাশ করা মুক্তির শাখায়) মার্জ করার প্রয়োজন হয়, এটি বিকাশকারীর কাজ নয় - আমি পুনরাবৃত্তি করি না, না - SC ব্যবস্থাপক (যিনি সমাধান করবেন তা জানেন না) কোন দ্বন্দ্ব একত্রিত)। প্রকল্পের নেতা মার্জ তত্ত্বাবধান করতে পারে, যার মানে এটি সময় শুরু / শেষ হয় তা নিশ্চিত করুন।
  • আপনি যে কোনটি একত্রীকরণ করার জন্য চয়ন করেন, তা সবচেয়ে গুরুত্বপূর্ণ:
    • ইউনিট পরীক্ষা এবং / অথবা সমাবেশ পরিবেশ যা আপনি একত্রিত ফলাফল নিযুক্ত / পরীক্ষা করতে পারেন।
    • একত্রিত হওয়ার আগে একটি বিন্যাস সংজ্ঞায়িত করার জন্য যদি পূর্বের অবস্থায় ফিরে যেতে সক্ষম হয়ে থাকে তবে বলেছে যে মার্জ নিজেই খুব জটিল বা সমাধান করার জন্য দীর্ঘ সময় প্রমাণ করে।

এটা কি মূল্য জন্য, আমরা এটা কিভাবে হয়।

বেশিরভাগ উন্নয়ন ট্রাঙ্কে সঞ্চালিত হয়, তবে পরীক্ষামূলক বৈশিষ্ট্যগুলি বা সিস্টেমগুলি ভাঙ্গতে পারে এমন জিনিসগুলি উল্লেখযোগ্যভাবে তাদের নিজস্ব শাখা পেতে থাকে। এটি প্রত্যেকটি বিকাশকারীর সর্বদা তাদের কাজ কপি সবকিছু সর্বশেষ সংস্করণ আছে মানে এটি বেশ ভাল কাজ করে।

এটি অর্থহীনভাবে ক্রমান্বয়ে ক্রমান্বয়ে কাজ করা গুরুত্বপূর্ণ, কারণ এটি পুরোপুরি এটি সম্পূর্ণভাবে ভাঙ্গা সম্ভব। অভ্যাস যে প্রায়ই ঘটবে না, এবং খুব কমই একটি উল্লেখযোগ্য সমস্যা।

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

রক্ষণাবেক্ষণটি প্রয়োজনীয় হিসাবে রিলিজ শাখায় সম্পাদন করা যেতে পারে এবং সেই সংশোধনগুলি সহজেই ট্রাঙ্কে আবার মেশানো যায়।

আমি এটি একটি নিখুঁত সিস্টেম হিসাবে দাবি করি না (এবং এটি এখনও কিছু গর্ত আছে - আমি মনে করি না আমাদের রিলিজ পরিচালন এখনও একটি শক্ত পর্যাপ্ত প্রক্রিয়া), তবে এটি যথেষ্ট ভাল কাজ করে।





project-management