স্ক্রিপ্ট থেকে Bazel কল করা হচ্ছে

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

আউটপুট বেস নির্বাচন করা হচ্ছে

--output_base বিকল্পটি নিয়ন্ত্রণ করে যেখানে Bazel প্রক্রিয়াটি একটি বিল্ডের আউটপুট লিখতে হবে, সেইসাথে Bazel দ্বারা অভ্যন্তরীণভাবে ব্যবহৃত বিভিন্ন কার্যকরী ফাইলগুলি, যার মধ্যে একটি হল একটি লক যা একাধিক Bazel প্রক্রিয়ার দ্বারা আউটপুট বেসের সমবর্তী পরিবর্তন থেকে রক্ষা করে।

আপনার স্ক্রিপ্টের জন্য সঠিক আউটপুট বেস ডিরেক্টরি নির্বাচন করা বিভিন্ন কারণের উপর নির্ভর করে। আপনি যদি একটি নির্দিষ্ট স্থানে বিল্ড আউটপুট রাখতে চান তবে এটি আপনাকে যে আউটপুট বেসটি ব্যবহার করতে হবে তা নির্দেশ করবে। আপনি যদি Bazel-এ "শুধুমাত্র পড়ার" কল করেন (যেমন bazel query ), লকিং ফ্যাক্টরগুলি আরও গুরুত্বপূর্ণ হবে৷ বিশেষ করে, যদি আপনার স্ক্রিপ্টের একাধিক দৃষ্টান্ত একসাথে চালানোর প্রয়োজন হয়, তাহলে আপনাকে প্রতিটিকে আলাদা (বা এলোমেলো) আউটপুট বেস দিতে হবে।

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

সার্ভার মোড সম্পর্কে নোট

ডিফল্টরূপে, Bazel একটি অপ্টিমাইজেশান হিসাবে একটি দীর্ঘ-চলমান সার্ভার প্রক্রিয়া ব্যবহার করে। একটি স্ক্রিপ্টে Bazel চালানোর সময়, আপনি সার্ভারের সাথে শেষ হয়ে গেলে shutdown কল করতে ভুলবেন না, অথবা, --max_idle_secs=5 উল্লেখ করুন যাতে নিষ্ক্রিয় সার্ভারগুলি অবিলম্বে নিজেদের বন্ধ করে দেয়৷

আমি কি প্রস্থান কোড পাব?

Bazel বাহ্যিক ত্রুটিগুলি থেকে বিবেচনাধীন সোর্স কোডের কারণে ব্যর্থতাগুলিকে আলাদা করার চেষ্টা করে যা Bazelকে সঠিকভাবে সম্পাদন করতে বাধা দেয়। Bazel নির্বাহের ফলে নিম্নলিখিত প্রস্থান কোড হতে পারে:

সমস্ত কমান্ডের জন্য সাধারণ প্রস্থান কোড:

  • 0 - সাফল্য
  • 2 - কমান্ড লাইন সমস্যা, খারাপ বা অবৈধ পতাকা বা কমান্ড সমন্বয়, বা খারাপ পরিবেশ ভেরিয়েবল। আপনার কমান্ড লাইন পরিবর্তন করা আবশ্যক.
  • 8 - বিল্ড বাধাগ্রস্ত কিন্তু আমরা একটি সুশৃঙ্খল শাটডাউন সঙ্গে সমাপ্ত.
  • 9 - সার্ভার লক রাখা হয়েছে এবং --noblock_for_lock পাস করা হয়েছে।
  • 32 - বাহ্যিক পরিবেশের ব্যর্থতা এই মেশিনে নয়।

  • 33 - Bazel মেমরি আউট এবং ক্র্যাশ. আপনাকে আপনার কমান্ড লাইন পরিবর্তন করতে হবে।

  • 34 - Google-অভ্যন্তরীণ ব্যবহারের জন্য সংরক্ষিত।

  • 35 - Google-অভ্যন্তরীণ ব্যবহারের জন্য সংরক্ষিত।

  • 36 - স্থানীয় পরিবেশগত সমস্যা, সন্দেহজনক স্থায়ী।

  • 37 - আন-হ্যান্ডেলড ব্যতিক্রম / অভ্যন্তরীণ বেজেল ত্রুটি।

  • 38 - Google-অভ্যন্তরীণ ব্যবহারের জন্য সংরক্ষিত।

  • 41-44 - Google-অভ্যন্তরীণ ব্যবহারের জন্য সংরক্ষিত।

  • 45 - বিল্ড ইভেন্ট সার্ভিসে ফলাফল প্রকাশে ত্রুটি।

  • 47 - Google-অভ্যন্তরীণ ব্যবহারের জন্য সংরক্ষিত।

bazel build , bazel test কমান্ডের জন্য রিটার্ন কোড:

  • 1 - বিল্ড ব্যর্থ হয়েছে.
  • 3 - ঠিক আছে তৈরি করুন, কিন্তু কিছু পরীক্ষা ব্যর্থ হয়েছে বা সময় শেষ হয়েছে।
  • 4 - বিল্ড সফল হয়েছে কিন্তু পরীক্ষার অনুরোধ করা সত্ত্বেও কোনো পরীক্ষা পাওয়া যায়নি।

bazel run জন্য:

  • 1 - বিল্ড ব্যর্থ হয়েছে.
  • যদি বিল্ড সফল হয় কিন্তু নির্বাহিত সাবপ্রসেসটি একটি নন-জিরো এক্সিট কোড প্রদান করে তবে এটি কমান্ডের প্রস্থান কোডও হবে।

bazel query জন্য:

  • 3 - আংশিক সাফল্য, কিন্তু ক্যোয়ারী ইনপুট BUILD ফাইল সেটে 1 বা তার বেশি ত্রুটির সম্মুখীন হয়েছে এবং তাই অপারেশনের ফলাফল 100% নির্ভরযোগ্য নয়৷ কমান্ড লাইনে একটি --keep_going বিকল্পের কারণে এটি সম্ভবত।
  • 7 - কমান্ড ব্যর্থতা।

ভবিষ্যত বেজেল সংস্করণগুলি অতিরিক্ত প্রস্থান কোড যোগ করতে পারে, জেনেরিক ব্যর্থতা প্রস্থান কোড 1 এর পরিবর্তে একটি নির্দিষ্ট অর্থ সহ একটি ভিন্ন অ-শূন্য মান দিয়ে। যাইহোক, সমস্ত অ-শূন্য প্রস্থান মান সবসময় একটি ত্রুটি গঠন করবে।

.bazelrc ফাইল পড়া

ডিফল্টরূপে, Bazel বেস ওয়ার্কস্পেস ডিরেক্টরি বা ব্যবহারকারীর হোম ডিরেক্টরি থেকে .bazelrc ফাইলটি পড়ে। এটি আপনার স্ক্রিপ্টের জন্য পছন্দসই কিনা বা না; যদি আপনার স্ক্রিপ্টটি পুরোপুরি হারমেটিক হতে হয় (যেমন রিলিজ বিল্ড করার সময়), আপনার --bazelrc=/dev/null বিকল্পটি ব্যবহার করে .bazelrc ফাইল পড়া অক্ষম করা উচিত। আপনি যদি ব্যবহারকারীর পছন্দের সেটিংস ব্যবহার করে একটি বিল্ড সঞ্চালন করতে চান তবে ডিফল্ট আচরণটি আরও ভাল।

কমান্ড লগ

Bazel আউটপুট একটি কমান্ড লগ ফাইলে পাওয়া যায় যা আপনি নিম্নলিখিত কমান্ডের সাথে খুঁজে পেতে পারেন:

bazel info command_log

কমান্ড লগ ফাইলে সাম্প্রতিক Bazel কমান্ডের ইন্টারলিভড stdout এবং stderr স্ট্রীম রয়েছে। মনে রাখবেন যে bazel info চলমান এই ফাইলের বিষয়বস্তু ওভাররাইট করবে, যেহেতু এটি সবচেয়ে সাম্প্রতিক Bazel কমান্ড হয়ে যায়। যাইহোক, কমান্ড লগ ফাইলের অবস্থান পরিবর্তন হবে না যদি না আপনি --output_base বা --output_user_root বিকল্পের সেটিং পরিবর্তন করেন।

পার্সিং আউটপুট

Bazel আউটপুট অনেক উদ্দেশ্যে পার্স করা বেশ সহজ. আপনার স্ক্রিপ্টের জন্য সহায়ক হতে পারে এমন দুটি বিকল্প হল --noshow_progress যা প্রগতি বার্তাগুলিকে দমন করে এবং --show_result n , যা "বিল্ড আপ-টু-ডেট" বার্তাগুলি মুদ্রিত হয় কিনা তা নিয়ন্ত্রণ করে; কোন টার্গেট সফলভাবে তৈরি করা হয়েছে এবং তারা তৈরি করা আউটপুট ফাইলগুলির অবস্থান আবিষ্কার করতে এই বার্তাগুলিকে পার্স করা হতে পারে। আপনি যদি এই বার্তাগুলির উপর নির্ভর করেন তবে n- এর একটি খুব বড় মান নির্দিষ্ট করতে ভুলবেন না।

প্রোফাইলিং দ্বারা কর্মক্ষমতা সমস্যা সমাধান

পারফরম্যান্স প্রোফাইলিং বিভাগটি দেখুন।