ওয়ার্কস্পেস নিয়মে অ-হারমেটিক আচরণ খোঁজা

নিম্নলিখিত, একটি হোস্ট মেশিন মেশিন যেখানে Bazel রান.

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

রিমোট এক্সিকিউশনের জন্য Bazel নিয়মগুলিকে অভিযোজিত করার অংশ হিসাবে, আপনাকে এই ধরনের ওয়ার্কস্পেস নিয়মগুলি খুঁজে বের করতে হবে এবং সেগুলি ঠিক করতে হবে। এই পৃষ্ঠাটি বর্ণনা করে কিভাবে ওয়ার্কস্পেস লগ ব্যবহার করে সম্ভাব্য সমস্যাযুক্ত ওয়ার্কস্পেস নিয়ম খুঁজে বের করতে হয়।

অ-হারমেটিক নিয়ম খোঁজা

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

Bazel 0.18 দিয়ে শুরু করে, আপনি আপনার Bazel কমান্ডে ফ্ল্যাগ --experimental_workspace_rules_log_file=[PATH] যোগ করে কিছু সম্ভাব্য নন-হর্মেটিক অ্যাকশনের একটি লগ পেতে পারেন। এখানে [PATH] একটি ফাইলের নাম যার অধীনে লগ তৈরি করা হবে।

উল্লেখ্য বিষয়:

  • লগটি ইভেন্টগুলিকে সঞ্চালিত হওয়ার সাথে সাথে ক্যাপচার করে। যদি কিছু ধাপ ক্যাশে করা থাকে, সেগুলি লগে দেখাবে না, তাই সম্পূর্ণ ফলাফল পেতে, bazel clean --expunge চালাতে ভুলবেন না -- আগে থেকে এক্সপাঞ্জ করুন৷

  • কখনও কখনও ফাংশনগুলি পুনরায় কার্যকর করা হতে পারে, এই ক্ষেত্রে সংশ্লিষ্ট ইভেন্টগুলি লগে একাধিকবার প্রদর্শিত হবে।

  • ওয়ার্কস্পেস নিয়ম বর্তমানে শুধুমাত্র Starlark ইভেন্ট লগ.

ওয়ার্কস্পেস ইনিশিয়ালাইজেশনের সময় কী সম্পাদিত হয়েছিল তা খুঁজে বের করতে:

  1. bazel clean --expunge । এই কমান্ডটি আপনার স্থানীয় ক্যাশে এবং যেকোন ক্যাশে করা সংগ্রহস্থলগুলি পরিষ্কার করবে, নিশ্চিত করে যে সমস্ত প্রারম্ভিকতা পুনরায় চালানো হবে।

  2. আপনার Bazel কমান্ডে --experimental_workspace_rules_log_file=/tmp/workspacelog যোগ করুন এবং বিল্ড চালান।

    এটি ওয়ার্কস্পেস ইভেন্ট ধরনের একটি বাইনারি প্রোটো ফাইল তালিকাভুক্ত বার্তা তৈরি করে

  3. Bazel সোর্স কোড ডাউনলোড করুন এবং নীচের কমান্ড ব্যবহার করে Bazel ফোল্ডারে নেভিগেট করুন। ওয়ার্কস্পেসলগ পার্সারের সাথে ওয়ার্কস্পেস লগ পার্স করতে আপনার সোর্স কোডের প্রয়োজন।

    git clone https://github.com/bazelbuild/bazel.git
    cd bazel
    
  4. Bazel সোর্স কোড রেপোতে, পুরো ওয়ার্কস্পেস লগটিকে টেক্সটে রূপান্তর করুন।

    bazel build src/tools/workspacelog:parser
    bazel-bin/src/tools/workspacelog/parser --log_path=/tmp/workspacelog > /tmp/workspacelog.txt
    
  5. আউটপুটটি বেশ ভার্বোস হতে পারে এবং বিল্ট ইন ব্যাজেল নিয়ম থেকে আউটপুট অন্তর্ভুক্ত করতে পারে।

    আউটপুট থেকে নির্দিষ্ট নিয়ম বাদ দিতে, --exclude_rule বিকল্পটি ব্যবহার করুন। উদাহরণ স্বরূপ:

    bazel build src/tools/workspacelog:parser
    bazel-bin/src/tools/workspacelog/parser --log_path=/tmp/workspacelog \
        --exclude_rule "//external:local_config_cc" \
        --exclude_rule "//external:dep" > /tmp/workspacelog.txt
    
  6. /tmp/workspacelog.txt খুলুন এবং অনিরাপদ অপারেশন পরীক্ষা করুন।

লগটিতে WorkspaceEvent বার্তা রয়েছে যা একটি repository_ctx এ সম্পাদিত কিছু সম্ভাব্য অ-হারমেটিক ক্রিয়াগুলির রূপরেখা দেয়।

সম্ভাব্য নন-হারমেটিক হিসাবে হাইলাইট করা ক্রিয়াগুলি নিম্নরূপ:

  • execute : হোস্ট এনভায়রনমেন্টে একটি নির্বিচারে কমান্ড চালায়। এটি হোস্ট পরিবেশের উপর কোন নির্ভরতা প্রবর্তন করতে পারে কিনা তা পরীক্ষা করুন।

  • download , download_and_extract : হারমেটিক বিল্ড নিশ্চিত করতে, নিশ্চিত করুন যে sha256 নির্দিষ্ট করা আছে

  • file , template : এটি নিজেই নন-হর্মেটিক নয়, তবে এটি সংগ্রহস্থলে হোস্ট পরিবেশের উপর নির্ভরতা প্রবর্তনের একটি প্রক্রিয়া হতে পারে। নিশ্চিত করুন যে আপনি বুঝতে পেরেছেন যে ইনপুটটি কোথা থেকে এসেছে এবং এটি হোস্ট পরিবেশের উপর নির্ভর করে না।

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

  • symlink : এটি সাধারণত নিরাপদ, তবে লাল পতাকাগুলি সন্ধান করুন৷ রিপোজিটরির বাইরে বা পরম পাথে যেকোন সিমলিংক দূরবর্তী কর্মীর সমস্যা সৃষ্টি করবে। হোস্ট মেশিন বৈশিষ্ট্যের উপর ভিত্তি করে সিমলিংক তৈরি করা হলে এটি সম্ভবত সমস্যাযুক্তও হবে।

  • which : হোস্টে ইনস্টল করা প্রোগ্রামগুলি পরীক্ষা করা সাধারণত সমস্যাযুক্ত কারণ কর্মীদের বিভিন্ন কনফিগারেশন থাকতে পারে।