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

समस्या की शिकायत करें सोर्स देखें

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

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

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

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

टेस्टिंग के लिए Bazel 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 में RBE (Ubuntu 16.04) के पुल के अनुरोध की जांच के लिए जानकारी पर क्लिक करें, जैसा कि नीचे दिए गए चित्र में दिखाया गया है. पुल के अनुरोध को मर्ज करने और सीआई टेस्ट शुरू होने के बाद, यह लिंक उपलब्ध हो जाता है. (उदाहरण के तौर पर, नतीजे देखें.)

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

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

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

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

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

  • ज़रूरी बिल्ड या टेस्ट टूल, डिफ़ॉल्ट कंटेनर में इंस्टॉल नहीं किए जाते हैं. यह फ़ंक्शन, rbe-ubuntu16-04 कंटेनर में डिफ़ॉल्ट रूप से चलने वाले rbe_ubuntu1604 कॉन्फ़िगरेशन का इस्तेमाल करके बनाता है. इसमें ऐसे टूल शामिल होते हैं जो 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 को निकालना

कंटेनर रजिस्ट्री से 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 में पुश करना

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

  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 में buildkite_config नाम के साथ rbe_autoconfig टारगेट जोड़ा जा सकता है. इसमें कस्टम कंटेनर चुनने के लिए अतिरिक्त अटैच शामिल होते हैं. इस सेटअप के बारे में ज़्यादा जानकारी के लिए, rbe_autoconfig से जुड़ा अप-टू-डेट दस्तावेज़ पढ़ें.