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

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

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

इस पेज पर दिए गए तरीके को पूरा करने से पहले, पक्का करें कि ये शर्तें पूरी हों:

टेस्टिंग के लिए, Bazel के सीआई को सेट अप करना

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

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

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

  2. अपनी WORKSPACE फ़ाइल में bazel-toolchains GitHub डेटाबेस जोड़ें. इसे सबसे नए वर्शन पर पिन करें. साथ ही, rbe_autoconfig टारगेट को buildkite_config नाम से जोड़ें. इस उदाहरण में, rbe_ubuntu1604 के लिए BuildKite सीआई की मदद से, रिमोट एक्ज़ीक्यूशन के लिए टूलचेन कॉन्फ़िगरेशन बनाया गया है.

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 सीआई कॉन्फ़िगरेशन में कस्टम कंटेनर का इस्तेमाल करना

rbe-ubuntu16-04 कंटेनर, सार्वजनिक तौर पर इस यूआरएल पर उपलब्ध है:

http://gcr.io/cloud-marketplace/google/rbe-ubuntu16-04

इसे सीधे कंटेनर रजिस्ट्री से पुल किया जा सकता है या सोर्स से बनाया जा सकता है. अगले सेक्शन में, दोनों विकल्पों के बारे में बताया गया है.

शुरू करने से पहले, पक्का करें कि आपने gcloud, docker, और git इंस्टॉल कर लिया हो. अगर कंटेनर को सोर्स से बनाया जा रहा है, तो आपको Bazel का सबसे नया वर्शन भी इंस्टॉल करना होगा.

कंटेनर रजिस्ट्री से rbe-ubuntu16-04 को पुल करना

कंटेनर रजिस्ट्री से 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

कस्टम कंटेनर को रन करना

कस्टम कंटेनर को रन करने के लिए, इनमें से कोई एक तरीका अपनाएं:

  • अगर आपने कंटेनर को कंटेनर रजिस्ट्री से पुल किया है, तो यह कमांड चलाएं:

    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

कस्टम कंटेनर में संसाधन जोड़ना

Dockerfile या rules_docker का इस्तेमाल करके, संसाधन या ओरिजनल संसाधनों के दूसरे वर्शन rbe-ubuntu16-04 कंटेनर में जोड़ें. अगर आपने 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

कस्टम कंटेनर को कंटेनर रजिस्ट्री में पुश करना

कंटेनर को पसंद के मुताबिक बनाने के बाद, कंटेनर इमेज बनाएं और उसे कंटेनर रजिस्ट्री में पुश करें. इसके लिए, यह तरीका अपनाएं:

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

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

    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.