হারমেটিসিটি

এই পৃষ্ঠাটি হারমেটিসিটি, হারমেটিক বিল্ডগুলি ব্যবহারের সুবিধা এবং আপনার বিল্ডগুলিতে অ-হারমেটিক আচরণ সনাক্ত করার কৌশলগুলি কভার করে।

ওভারভিউ

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

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

হারমেটিসিটির দুটি গুরুত্বপূর্ণ দিক হল:

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

সুবিধা

হারমেটিক বিল্ডগুলির প্রধান সুবিধাগুলি হল:

  • গতি : একটি কর্মের আউটপুট ক্যাশে করা যেতে পারে, এবং ইনপুট পরিবর্তন না হলে ক্রিয়াটি পুনরায় চালানোর প্রয়োজন হয় না।
  • সমান্তরাল সঞ্চালন : প্রদত্ত ইনপুট এবং আউটপুটের জন্য, বিল্ড সিস্টেম দক্ষ এবং সমান্তরাল সম্পাদন গণনা করার জন্য সমস্ত কর্মের একটি গ্রাফ তৈরি করতে পারে। বিল্ড সিস্টেম নিয়মগুলি লোড করে এবং ক্যাশে দেখার জন্য একটি অ্যাকশন গ্রাফ এবং হ্যাশ ইনপুট গণনা করে।
  • একাধিক বিল্ড : আপনি একই মেশিনে একাধিক হারমেটিক বিল্ড তৈরি করতে পারেন, প্রতিটি বিল্ড বিভিন্ন সরঞ্জাম এবং সংস্করণ ব্যবহার করে।
  • প্রজননযোগ্যতা : হারমেটিক বিল্ডগুলি সমস্যা সমাধানের জন্য ভাল কারণ আপনি বিল্ডটি তৈরি করার সঠিক অবস্থা জানেন।

অ-হারমেটিসিটি সনাক্তকরণ

আপনি যদি Bazel-এ স্যুইচ করার প্রস্তুতি নিচ্ছেন, আপনি যদি আপনার বিদ্যমান বিল্ডের হার্মেটিসিটি আগে থেকে উন্নত করেন তাহলে মাইগ্রেশন সহজ হয়। বিল্ডগুলিতে নন-হার্মেটিসিটির কিছু সাধারণ উত্স হল:

  • .mk ফাইলে নির্বিচারে প্রক্রিয়াকরণ
  • ক্রিয়া বা টুলিং যা ফাইলগুলি অ-নির্ধারকভাবে তৈরি করে, সাধারণত বিল্ড আইডি বা টাইমস্ট্যাম্প জড়িত থাকে
  • সিস্টেম বাইনারি যা হোস্ট জুড়ে আলাদা (যেমন /usr/bin বাইনারি, পরম পাথ, নেটিভ C++ নিয়ম স্বয়ংক্রিয় কনফিগারেশনের জন্য সিস্টেম C++ কম্পাইলার)
  • নির্মাণের সময় উৎস গাছে লেখা। এটি একই উত্স গাছকে অন্য লক্ষ্যের জন্য ব্যবহার করা থেকে বাধা দেয়। প্রথম বিল্ড সোর্স ট্রিতে লেখে, টার্গেট A-এর জন্য সোর্স ট্রি ঠিক করে। তারপর লক্ষ্য B তৈরির চেষ্টা ব্যর্থ হতে পারে।

অ-হারমেটিক বিল্ডের সমস্যা সমাধান করা

স্থানীয় সম্পাদনের সাথে শুরু করে, স্থানীয় ক্যাশে হিটগুলিকে প্রভাবিত করে এমন সমস্যাগুলি নন-হর্মেটিক ক্রিয়াগুলি প্রকাশ করে৷

  • নাল ক্রমিক বিল্ডগুলি নিশ্চিত করুন: আপনি যদি make চালান এবং একটি সফল বিল্ড পান, বিল্ডটি আবার চালানোর ফলে কোনো লক্ষ্য পুনর্নির্মাণ করা উচিত নয়। আপনি যদি প্রতিটি বিল্ড স্টেপ দুইবার বা বিভিন্ন সিস্টেমে চালান, ফাইলের বিষয়বস্তুর একটি হ্যাশের তুলনা করুন এবং ভিন্ন ফলাফল পান, বিল্ডটি পুনরুত্পাদনযোগ্য নয়।
  • বিভিন্ন সম্ভাব্য ক্লায়েন্ট মেশিন থেকে স্থানীয় ক্যাশে হিটগুলি ডিবাগ করার জন্য পদক্ষেপগুলি চালান যাতে আপনি ক্লায়েন্ট পরিবেশের যে কোনও ঘটনাকে অ্যাকশনগুলিতে ফাঁস করতে পারেন তা নিশ্চিত করুন৷
  • একটি ডকার কন্টেইনারের মধ্যে একটি বিল্ড এক্সিকিউট করুন যাতে চেক-আউট সোর্স ট্রি এবং হোস্ট টুলের সুস্পষ্ট তালিকা ছাড়া কিছুই থাকে না। বিল্ড ব্রেকেজ এবং ত্রুটি বার্তা অন্তর্নিহিত সিস্টেম নির্ভরতা ধরবে।
  • রিমোট এক্সিকিউশন নিয়মগুলি ব্যবহার করে হারমেটিসিটি সমস্যাগুলি আবিষ্কার করুন এবং ঠিক করুন।
  • প্রতি-অ্যাকশন স্তরে কঠোর স্যান্ডবক্সিং সক্ষম করুন, যেহেতু একটি বিল্ডের ক্রিয়াগুলি রাষ্ট্রীয় হতে পারে এবং বিল্ড বা আউটপুটকে প্রভাবিত করতে পারে।
  • ওয়ার্কস্পেস নিয়মগুলি ডেভেলপারদের বাহ্যিক ওয়ার্কস্পেসগুলিতে নির্ভরতা যোগ করার অনুমতি দেয়, তবে সেগুলি প্রক্রিয়ায় নির্বিচারে প্রক্রিয়াকরণের অনুমতি দেওয়ার জন্য যথেষ্ট সমৃদ্ধ। আপনি আপনার Bazel কমান্ডে ফ্ল্যাগ --experimental_workspace_rules_log_file= PATH যোগ করে Bazel ওয়ার্কস্পেস নিয়মে কিছু সম্ভাব্য নন-হারমেটিক অ্যাকশনের একটি লগ পেতে পারেন।

Bazel সঙ্গে Hermeticity

বাজেলের সাথে হারমেটিক বিল্ডগুলি ব্যবহার করে অন্যান্য প্রকল্পগুলি কীভাবে সাফল্য পেয়েছে সে সম্পর্কে আরও তথ্যের জন্য, এই BazelCon আলোচনাগুলি দেখুন: