यह पेज, Bazel नियम रिपॉज़िटरी के मालिकों और रखरखाव करने वालों के लिए है. इसमें बताया गया है कि रिमोट एक्ज़ीक्यूशन के किसी उदाहरण के साथ काम करने से जुड़े नियमों की जांच करने के लिए, अपनी रिपॉज़िटरी के लिए Bazel Continuous Integration (CI) सिस्टम को कैसे कॉन्फ़िगर करें. इस पेज पर दिए गए निर्देश, GitHub रिपॉज़िटरी में सेव किए गए प्रोजेक्ट पर लागू होते हैं.
ज़रूरी शर्तें
इस पेज पर दिए गए चरणों को पूरा करने से पहले, पक्का करें कि आपने ये काम कर लिए हों:
- आपकी GitHub रिपॉज़िटरी, Bazel GitHub संगठन का हिस्सा हो.
- आपने अपनी रिपॉज़िटरी के लिए Buildkite को कॉन्फ़िगर किया हो. इसके बारे में Bazel Continuous Integration में बताया गया है.
जांच के लिए Bazel CI सेट अप करना
अपनी
.bazelci/presubmit.yml
फ़ाइल में, यह तरीका अपनाएं:a.
rbe_ubuntu1604
नाम का कॉन्फ़िगरेशन जोड़ें.b.
rbe_ubuntu1604
कॉन्फ़िगरेशन में, वे बिल्ड और टेस्ट टारगेट जोड़ें जिनकी आपको रिमोट एक्ज़ीक्यूशन के ख़िलाफ़ जांच करनी है.bazel-toolchains
GitHub रिपॉज़िटरी को अपनीWORKSPACE
फ़ाइल में जोड़ें. यह फ़ाइल, सबसे नए वर्शन पर पिन की गई है. साथ ही,rbe_autoconfig
नाम काbuildkite_config
टारगेट भी जोड़ें. इस उदाहरण में, BuildKite CI के साथ रिमोट एक्ज़ीक्यूशन के लिए टूलचेन कॉन्फ़िगरेशन बनाया गया है. यहrbe_ubuntu1604
के लिए है.
load("@bazel_toolchains//rules:rbe_repo.bzl", "rbe_autoconfig")
rbe_autoconfig(name = "buildkite_config")
presubmit.yml
फ़ाइल में किए गए बदलावों के साथ पुल अनुरोध भेजें. (पुल अनुरोध का उदाहरण देखें.)बिल्ड के नतीजे देखने के लिए, GitHub में RBE (Ubuntu 16.04) पुल अनुरोध की जांच के लिए, जानकारी पर क्लिक करें. जैसा कि यहां दी गई इमेज में दिखाया गया है. यह लिंक तब उपलब्ध होता है, जब पुल अनुरोध को मर्ज कर दिया जाता है और सीआई टेस्ट पूरे हो जाते हैं. (उदाहरण के तौर पर दिए गए नतीजे देखें.)
(ज़रूरी नहीं) अपनी ब्रांच की सुरक्षा से जुड़े नियम में मर्ज करने से पहले, bazel test (RBE (Ubuntu 16.04)) की जांच को पास करना ज़रूरी है. यह सेटिंग, GitHub में सेटिंग > ब्रांच > ब्रांच को सुरक्षित रखने के नियम में मौजूद होती है. इसे नीचे दिए गए डायग्राम में दिखाया गया है.
बिल्ड और टेस्ट के पूरा न होने से जुड़ी समस्या हल करना
अगर आपकी बिल्ड या जांचें पूरी नहीं होती हैं, तो इसकी ये वजहें हो सकती हैं:
डिफ़ॉल्ट कंटेनर में, ज़रूरी बिल्ड या टेस्ट टूल इंस्टॉल नहीं किए गए हैं.
rbe_ubuntu1604
कॉन्फ़िगरेशन का इस्तेमाल करके बनाए गए बिल्ड, डिफ़ॉल्ट रूप सेrbe-ubuntu16-04
कंटेनर में चलते हैं. इस कंटेनर में, Bazel के कई बिल्ड में इस्तेमाल होने वाले टूल शामिल होते हैं. हालांकि, अगर आपके नियमों के लिए ऐसे टूल की ज़रूरत है जो डिफ़ॉल्ट कंटेनर में मौजूद नहीं हैं, तो आपकोrbe-ubuntu16-04
कंटेनर के आधार पर एक कस्टम कंटेनर बनाना होगा. साथ ही, उन टूल को शामिल करना होगा. इसके बारे में बाद में बताया गया है.बिल्ड या टेस्ट टारगेट, ऐसे नियमों का इस्तेमाल कर रहे हैं जो रिमोट एक्ज़ीक्यूशन के साथ काम नहीं करते. रिमोट एक्ज़ीक्यूशन के साथ काम करने की सुविधा के बारे में ज़्यादा जानने के लिए, रिमोट एक्ज़ीक्यूशन के लिए Bazel नियमों को अडैप्ट करना लेख पढ़ें.
rbe_ubuntu1604 CI कॉन्फ़िगरेशन में कस्टम कंटेनर का इस्तेमाल करना
rbe-ubuntu16-04
कंटेनर, इस यूआरएल पर सार्वजनिक तौर पर उपलब्ध है:
http://gcr.io/cloud-marketplace/google/rbe-ubuntu16-04
इसे सीधे Container Registry से पुल किया जा सकता है या सोर्स से बनाया जा सकता है. अगले सेक्शन में, दोनों विकल्पों के बारे में बताया गया है.
शुरू करने से पहले, पक्का करें कि आपने gcloud
, docker
, और git
इंस्टॉल कर लिया हो.
अगर आपको सोर्स से कंटेनर बनाना है, तो आपको Bazel का नया वर्शन भी इंस्टॉल करना होगा.
Container Registry से rbe-ubuntu16-04 को पुल किया जा रहा है
Container Registry से rbe-ubuntu16-04
कंटेनर को पुल करने के लिए, यह कमांड चलाएं:
gcloud docker -- pull gcr.io/cloud-marketplace/google/rbe-ubuntu16-04@sha256:sha256-checksum
sha256-checksum को सबसे नए कंटेनर के SHA256 चेकसम की वैल्यू से बदलें.
सोर्स से rbe-ubuntu16-04 कंटेनर बनाया जा रहा है
सोर्स से rbe-ubuntu16-04
कंटेनर बनाने के लिए, यह तरीका अपनाएं:
bazel-toolchains
रिपॉज़िटरी को क्लोन करें:git clone https://github.com/bazelbuild/bazel-toolchains
टूलचेन कंटेनर में बताए गए तरीके से, टूलचेन कंटेनर के टारगेट सेट अप करें और कंटेनर बनाएं.
नया कंटेनर पुल करें:
gcloud docker -- pull gcr.io/project-id/custom-container-namesha256-checksum
कस्टम कंटेनर चलाना
कस्टम कंटेनर चलाने के लिए, इनमें से कोई एक काम करें:
अगर आपने कंटेनर को Container Registry से पुल किया है, तो यह कमांड चलाएं:
docker run -it gcr.io/cloud-marketplace/google/rbe-ubuntu16-04@sha256:sha256-checksum/bin/bash
sha256-checksum
को नवीनतम कंटेनर के SHA256 चेकसम की वैल्यू से बदलें.अगर आपने कंटेनर को सोर्स से बनाया है, तो यह कमांड चलाएं:
docker run -it gcr.io/project-id/custom-container-name@sha256:sha256sum /bin/bash
कस्टम कंटेनर में संसाधन जोड़ना
rbe-ubuntu16-04
कंटेनर में संसाधन या ओरिजनल संसाधनों के वैकल्पिक वर्शन जोड़ने के लिए, Dockerfile
या rules_docker
का इस्तेमाल करें.
अगर आपने Docker का इस्तेमाल पहले कभी नहीं किया है, तो यह लेख पढ़ें:
उदाहरण के लिए, यहां दिया गया Dockerfile
स्निपेट, my_tool_package
इंस्टॉल करता है:
FROM gcr.io/cloud-marketplace/google/rbe-ubuntu16-04@sha256:sha256-checksum
RUN apt-get update && yes | apt-get install -y my_tool_package
कस्टम कंटेनर को Container Registry में पुश करना
कंटेनर को पसंद के मुताबिक बनाने के बाद, कंटेनर इमेज बनाएं और उसे Container Registry में पुश करें. इसके लिए, यह तरीका अपनाएं:
कंटेनर इमेज बनाएं:
docker build -t custom-container-name.
docker tag custom-container-name gcr.io/project-id/custom-container-name
कंटेनर इमेज को Container Registry में पुश करें:
gcloud docker -- push gcr.io/project-id/custom-container-name
कंटेनर को पुश किया गया है या नहीं, यह देखने के लिए इस यूआरएल पर जाएं:
https://console.cloud.google.com/gcr/images/project-id/GLOBAL/custom-container-name
अपने कस्टम कंटेनर के SHA256 चेकसम को नोट करें. आपको इसे बाद में, अपने बिल्ड प्लैटफ़ॉर्म की परिभाषा में देना होगा.
सार्वजनिक ऐक्सेस के लिए कंटेनर को कॉन्फ़िगर करें. इसके बारे में इमेज को सार्वजनिक तौर पर उपलब्ध कराना लेख में बताया गया है.
ज़्यादा जानकारी के लिए, इमेज को पुश और पुल करना लेख पढ़ें.
बिल्ड प्लैटफ़ॉर्म की परिभाषा तय करना
आपको अपने कस्टम टूलचेन कॉन्फ़िगरेशन में Bazel प्लैटफ़ॉर्म कॉन्फ़िगरेशन शामिल करना होगा. इससे Bazel को, हार्डवेयर/सॉफ़्टवेयर प्लैटफ़ॉर्म के हिसाब से सही टूलचेन चुनने में मदद मिलती है. मान्य प्लैटफ़ॉर्म को अपने-आप जनरेट करने के लिए, अपने WORKSPACE
में rbe_autoconfig
टारगेट जोड़ें. इसका नाम buildkite_config
होना चाहिए. इसमें कस्टम कंटेनर चुनने के लिए, अतिरिक्त एट्रिब्यूट शामिल होने चाहिए. इस सेटअप के बारे में ज़्यादा जानने के लिए, rbe_autoconfig
का अप-टू-डेट दस्तावेज़ पढ़ें.