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

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

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

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

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

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

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

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

  2. bazel-toolchains GitHub डेटाबेस को अपनी WORKSPACE फ़ाइल में जोड़ें. साथ ही, इसे सबसे नए वर्शन पर पिन करें. इसके अलावा, 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 के लिए अप-टू-डेट दस्तावेज़ पढ़ें.