रिमोट एक्ज़ीक्यूशन की जांच के नियमों के लिए, 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

इसे सीधे 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

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

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

कस्टम कंटेनर को 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 के लिए अप-टू-डेट दस्तावेज़ पढ़ें.