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

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

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

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

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

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

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

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

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

  2. अपनी WORKSPACE फ़ाइल में, bazel-toolchains GitHub रिपॉज़िटरी जोड़ें, जिसे नई रिलीज़ में पिन किया गया हो. साथ ही, 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 (Ubuntu16.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
    

कस्टम कंटेनर चलाना

कस्टम कंटेनर चलाने के लिए, इनमें से कोई एक काम करें:

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

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

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

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