रिमोट एक्ज़ीक्यूशन की जांच के नियमों के लिए, Bazel CI को कॉन्फ़िगर करना

समस्या की शिकायत करें सोर्स देखें Nightly · 8.4 · 8.3 · 8.2 · 8.1 · 8.0 · 7.6

यह पेज, Bazel नियम रिपॉज़िटरी के मालिकों और रखरखाव करने वालों के लिए है. इसमें बताया गया है कि रिमोट एक्ज़ीक्यूशन के किसी उदाहरण के साथ काम करने से जुड़े नियमों की जांच करने के लिए, अपनी रिपॉज़िटरी के लिए Bazel Continuous Integration (CI) सिस्टम को कैसे कॉन्फ़िगर करें. इस पेज पर दिए गए निर्देश, GitHub रिपॉज़िटरी में सेव किए गए प्रोजेक्ट पर लागू होते हैं.

ज़रूरी शर्तें

इस पेज पर दिए गए चरणों को पूरा करने से पहले, पक्का करें कि आपने ये काम कर लिए हों:

  • आपकी GitHub रिपॉज़िटरी, Bazel GitHub संगठन का हिस्सा हो.
  • आपने अपनी रिपॉज़िटरी के लिए Buildkite को कॉन्फ़िगर किया हो. इसके बारे में Bazel Continuous Integration में बताया गया है.

जांच के लिए Bazel CI सेट अप करना

  1. अपनी .bazelci/presubmit.yml फ़ाइल में, यह तरीका अपनाएं:

    a. rbe_ubuntu1604 नाम का कॉन्फ़िगरेशन जोड़ें.

    b. rbe_ubuntu1604 कॉन्फ़िगरेशन में, वे बिल्ड और टेस्ट टारगेट जोड़ें जिनकी आपको रिमोट एक्ज़ीक्यूशन के ख़िलाफ़ जांच करनी है.

  2. 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")
  1. presubmit.yml फ़ाइल में किए गए बदलावों के साथ पुल अनुरोध भेजें. (पुल अनुरोध का उदाहरण देखें.)

  2. बिल्ड के नतीजे देखने के लिए, GitHub में RBE (Ubuntu 16.04) पुल अनुरोध की जांच के लिए, जानकारी पर क्लिक करें. जैसा कि यहां दी गई इमेज में दिखाया गया है. यह लिंक तब उपलब्ध होता है, जब पुल अनुरोध को मर्ज कर दिया जाता है और सीआई टेस्ट पूरे हो जाते हैं. (उदाहरण के तौर पर दिए गए नतीजे देखें.)

    परिणामों के उदाहरण

  3. (ज़रूरी नहीं) अपनी ब्रांच की सुरक्षा से जुड़े नियम में मर्ज करने से पहले, 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 कंटेनर बनाने के लिए, यह तरीका अपनाएं:

  1. bazel-toolchains रिपॉज़िटरी को क्लोन करें:

    git clone https://github.com/bazelbuild/bazel-toolchains
  2. टूलचेन कंटेनर में बताए गए तरीके से, टूलचेन कंटेनर के टारगेट सेट अप करें और कंटेनर बनाएं.

  3. नया कंटेनर पुल करें:

    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 में पुश करें. इसके लिए, यह तरीका अपनाएं:

  1. कंटेनर इमेज बनाएं:

    docker build -t custom-container-name.
    docker tag custom-container-name gcr.io/project-id/custom-container-name
  2. कंटेनर इमेज को Container Registry में पुश करें:

    gcloud docker -- push gcr.io/project-id/custom-container-name
  3. कंटेनर को पुश किया गया है या नहीं, यह देखने के लिए इस यूआरएल पर जाएं:

    https://console.cloud.google.com/gcr/images/project-id/GLOBAL/custom-container-name

  4. अपने कस्टम कंटेनर के SHA256 चेकसम को नोट करें. आपको इसे बाद में, अपने बिल्ड प्लैटफ़ॉर्म की परिभाषा में देना होगा.

  5. सार्वजनिक ऐक्सेस के लिए कंटेनर को कॉन्फ़िगर करें. इसके बारे में इमेज को सार्वजनिक तौर पर उपलब्ध कराना लेख में बताया गया है.

    ज़्यादा जानकारी के लिए, इमेज को पुश और पुल करना लेख पढ़ें.

बिल्ड प्लैटफ़ॉर्म की परिभाषा तय करना

आपको अपने कस्टम टूलचेन कॉन्फ़िगरेशन में Bazel प्लैटफ़ॉर्म कॉन्फ़िगरेशन शामिल करना होगा. इससे Bazel को, हार्डवेयर/सॉफ़्टवेयर प्लैटफ़ॉर्म के हिसाब से सही टूलचेन चुनने में मदद मिलती है. मान्य प्लैटफ़ॉर्म को अपने-आप जनरेट करने के लिए, अपने WORKSPACE में rbe_autoconfig टारगेट जोड़ें. इसका नाम buildkite_config होना चाहिए. इसमें कस्टम कंटेनर चुनने के लिए, अतिरिक्त एट्रिब्यूट शामिल होने चाहिए. इस सेटअप के बारे में ज़्यादा जानने के लिए, rbe_autoconfig का अप-टू-डेट दस्तावेज़ पढ़ें.