আমাদের কোডটিকে পুনঃব্যবহারযোগ্য বিটগুলিতে ভাঙার পরে, আমরা কীভাবে পরীক্ষা করব এবং মোতায়েন করব?


9

আমরা একজন বিকাশকারী এবং একটি এসএনএন রেপো দিয়ে শুরু করেছি যাতে আমাদের সমস্ত কোড রয়েছে:

^/foo/trunk/module-a
^/foo/trunk/module-b
^/foo/trunk/module-b/submodule-b1
^/foo/trunk/website1

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

কোড বেসটি মডুলারাইজ করতে এবং আমাদের শিগগিরই গিটের দিকে এগিয়ে যাওয়ার প্রত্যাশা করা হয়েছে (এবং কোথাও পড়ে যে গিটটি এসএনএন মেগা-রেপো পছন্দ করে না), আমরা আরও অনেক গ্রানুলার স্ট্রাকচারে স্থানান্তরিত করেছি:

^/module-a/trunk/
^/module-b/trunk/
^/module-b/trunk/sumbmodule-b1
^/earlier-sub-sub-sub-module-c/trunk
etc. (about 120 such modules)

এটি ধারণাগতভাবে দুর্দান্ত ছিল। আরও মডিউলার কোড, আরও দ্রুত টেস্ট-স্যুট, ডকুমেন্টে সহজতর ইত্যাদি We আমরা আমাদের আরও কিছু জেনেরিক উপাদান ওপেন-সোর্স করেছি এবং সমস্ত মডিউলগুলিকে পাইপ ইনস্টলযোগ্য pip install -e .করে developmentতুলছি ( সেগুলি ভার্চুয়ালেনভে ইনস্টল করতে ব্যবহার করে )।

আমরা ^/srv/trunkরানটাইম এনভায়রনমেন্টের ফোল্ডার স্ট্রাকচার সম্বলিত একটি সংগ্রহস্থল তৈরি করেছি , অর্থাৎ। ^/srv/trunk/libমডিউলগুলির /srv/trunk/srcজন্য, অবশেষের জন্য ^/foo/trunk, ^/srv/trunk/wwwওয়েবসাইটগুলি ইত্যাদির জন্য

এবং অবশেষে (অভিনয়শক্তিগুলির কাছ থেকে একটি ধারণা নেওয়া, যা আমি অনেক দিন আগে [ https://www.perforce.com/perforce/r12.1/manual/Cddf/client.html] নিয়ে কাজ করেছি ) আমরা একটি "ভিসিএস- "প্রাসঙ্গিক ফাইলগুলি তালিকাভুক্ত করুন যা সমস্ত প্রাসঙ্গিক রেপো তালিকাভুক্ত করে এবং যেখানে সেগুলি পরিবেশ পরিবেশে পরীক্ষা করা উচিত, এবং এটি করার জন্য একটি অনুরূপ কমান্ড। যেমন একটি ভিসিএস-ফেটেক লাইন:

svn srv/lib/module-a ^/module-a/trunk

হয় প্রথম কারণ (প্রথমবার)

cd /srv/lib && svn co ^/module-a/trunk module-a

বা (পরে)

cd /srv/lib/module-a && svn up

এবং অনুরূপভাবে গিথুব রেপসের জন্য (আমাদের নিজস্ব এবং পরিবর্তিত / আনল্টারযুক্ত ভেন্ডর প্যাকেজ উভয়)।

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

মেগা-রেপো দিয়ে, আমরা ট্রাঙ্ক থেকে প্রোড আপডেট করার আগে সংশোধন নম্বরটি কেবল নোট করতে পারি এবং ফিরে svn -r nnn up .যাওয়া সহজ সরল was এসএনএন এবং গিট উভয় ক্ষেত্রে কোড (এবং এইচজি-তে একটি মডিউল) - এবং ~ 120 রেপগুলি, কীভাবে এটি করা যায় তা সুস্পষ্ট নয় ..

আমি আজ http://12factor.net/ পড়েছি , এবং প্রথম ফ্যাক্টরটি "ওয়ান কোডবেস" তাই আমিও ভাবছি যে আমি এখানেই সঠিক পথটি বন্ধ করছি কিনা?

আমার একটি ধারণা ছিল একটি মোতায়েনকারী স্ক্রিপ্ট তৈরি করা যা পাইপ-ইনস্টলযোগ্য "ডিপ্লোয়মেন্ট" -হুইলগুলি তৈরি করে এবং একটি requirements.txtফাইলে তাদের "বান্ডেল" তৈরি করে । একটি স্থাপনার পরে একটি নতুন ভার্চুয়ালেনভ তৈরি করা, প্রয়োজনীয়তাগুলি পিপ-ইনস্টল করা আবশ্যক t টেক্সট ফাইল স্থাপনার চাকার তালিকাভুক্ত করা এবং সক্রিয় ভার্চুয়ালেনভ পরিবর্তন করা। পূর্বের দিকে ফিরে যাওয়া কেবল ভার্চুয়ালেনভকে ফিরিয়ে আনার সাথে জড়িত (তবে আমরা যদি সেই কালামকে চিরকাল ধরে রাখতে না চাই তবে এটি আমাদের সময়মতো কোনও পর্যায়ে ফিরে যেতে দেয় না - আমার অভিজ্ঞতায় যা এর আগে কখনও প্রয়োজন হয়নি)।

এই মুহুর্তে আমি ভাবছি আমি যদি ভুল পথে হাঁটছি, বা আমি যদি কেবল সঠিক পথে হাঁটতে পারি না ..? (আমি যা কিছু পড়ছি তা "আপনার অ্যাপ্লিকেশন" সম্পর্কে কথা বলতে থাকে এবং আমি জানি না যে এটি কীভাবে একই কোড বেসের বাইরে 14 টি ওয়েবসাইট চালনাতে অনুবাদ করে ...)


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

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

1
@ প্রোগ্রামার400 কোডবেসটি হ'ল: .py 670 কিলোক, .জেএস: 135 কিলোক, .বিহীন: 25 কিলোক,। এইচটিএমএল: 130 কিলোক। এত বড়, তবে বিশাল নয়। আমি গিটটি যা পড়েছি তা থেকে এই আকারের রেপোস সত্যিই পছন্দ হয় না, তাই আমি ভেবে দেখছি গিটে স্যুইচ করার আগে আমাদের আরও ছোট ভাণ্ডারে বিভক্ত হতে হবে ..?
thejjorn

উত্তর:


2

দেখে মনে হচ্ছে আপনি শাখা হারিয়েছেন (বা বরং 'ট্যাগ' বা 'রিলিজ' শাখা)।

আপনি কোন সংস্করণ ইনস্টল করছেন তা নির্ধারণের জন্য আপনার এসভিএন রেভেনামটিকে রেফারেন্স হিসাবে ব্যবহার করার পরিবর্তে, আপনাকে সেই প্রকাশিত সংশোধনীতে একটি শাখা তৈরি করা উচিত। তারপরে আপনি সেই শাখার নাম স্থাপন করুন।

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

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

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


1

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

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

যেহেতু আমি নিশ্চিত না যে আপনার মডিউলগুলি কীভাবে বিচ্ছিন্ন, বা আপনি কীভাবে আপনার সংস্করণ রূপান্তরিত হতে চান, তাই আমি কয়েকটি বিকল্পের পরামর্শ দেব।


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

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

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

তবে আমি এই প্যাটার্নটি ব্যাপকভাবে ব্যবহার করি নি, তাই আপনার মতো কোনও বড় প্রকল্পের জন্য এটি কতটা সমস্যা হতে পারে তা আমি জানি না।


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

আপনি ইতিমধ্যে পাইপটির পরামর্শ দিচ্ছেন এবং যা আপনার পরামর্শ থেকে অনুপস্থিত মনে হচ্ছে ফলাফলের প্রয়োজনীয়তাগুলি সংরক্ষণ করুন t নির্মাণের সাথে বা মূল প্রকল্পের রেপোতে, যাতে আপনি সংরক্ষণ না করে পরে আবার ভার্চুয়ালেনভকে পুনরায় তৈরি করতে পারবেন you এটি ডিস্কে

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

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