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

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

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

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

टेस्टिंग के लिए Baze CI को सेट अप करना

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

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

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

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

load("@bazel_toolchains//rules:rbe_repo.bzl", "rbe_autoconfig")
rbe_autoconfig(name = "buildkite_config")
  1. presubmit.yml फ़ाइल में किए गए बदलावों के साथ, एक पुश अनुरोध भेजें. (पुल अनुरोध का उदाहरण देखें.)

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

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

  3. (ज़रूरी नहीं) bazel test (RBE (Ubuntu 16.04)) जांच को टेस्ट के तौर पर सेट करें. यह जांच, शाखा की सुरक्षा के नियम में मर्ज करने से पहले पास करना ज़रूरी है. यह सेटिंग, GitHub में सेटिंग > शाखाएं > शाखा की सुरक्षा के नियम में होती है, जैसा कि नीचे दिए गए चित्र में दिखाया गया है.

    ब्रांच की सुरक्षा के नियमों की सेटिंग

असफल बिल्ड और टेस्ट से जुड़ी समस्या हल करना

अगर आपका बिल्ड या टेस्ट फ़ेल हो जाता है, तो ऐसा इन वजहों से हो सकता है:

  • डिफ़ॉल्ट कंटेनर में, ज़रूरी बिल्ड या टेस्ट टूल इंस्टॉल नहीं हैं. इसे rbe-ubuntu16-04 कंटेनर में, डिफ़ॉल्ट रूप से चलने वाले rbe_ubuntu1604 कॉन्फ़िगरेशन का इस्तेमाल करके बनाया जाता है. इसमें कई बेज़ल बिल्ड के लिए आम तौर पर इस्तेमाल किए जाने वाले टूल शामिल हैं. हालांकि, अगर आपके नियमों के लिए ऐसे टूल ज़रूरी हैं जो डिफ़ॉल्ट कंटेनर में मौजूद नहीं हैं, तो आपको rbe-ubuntu16-04 कंटेनर के आधार पर कस्टम कंटेनर बनाना होगा. साथ ही, उन टूल को शामिल करना होगा जिनके बारे में आगे बताया गया है.

  • बनाएं या टेस्ट टारगेट उन नियमों का इस्तेमाल कर रहे हैं जो रिमोट तौर पर एक्ज़ीक्यूट करने की सुविधा के साथ काम नहीं करते. रिमोट एक्ज़ीक्यूशन के साथ काम करने के बारे में जानकारी के लिए, रिमोट एक्ज़ीक्यूशन के लिए बेज़ल रूल इस्तेमाल करना देखें.

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

कस्टम कंटेनर को कंटेनर रजिस्ट्री में भेजना

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

  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. सार्वजनिक तौर पर इमेज दिखाना में बताए गए तरीके के मुताबिक, कंटेनर को सार्वजनिक ऐक्सेस के लिए कॉन्फ़िगर करें.

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

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

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