Uzaktan Yürütme Kurallarını Test Etmek için Bazel CI'yı Yapılandırma

Sorun bildir Kaynağı görüntüle Nightly · 8.3 · 8.2 · 8.1 · 8.0 · 7.6

Bu sayfa, Bazel kuralı depolarının sahipleri ve bakımcıları içindir. Bu dokümanda, kurallarınızın uzak yürütme senaryosuyla uyumluluğunu test etmek için Bazel Sürekli Entegrasyon (CI) sistemini deponuzda nasıl yapılandıracağınız açıklanmaktadır. Bu sayfadaki talimatlar, GitHub depolarında depolanan projeler için geçerlidir.

Ön koşullar

Bu sayfadaki adımları tamamlamadan önce aşağıdakilerden emin olun:

Test için Bazel CI'yı ayarlama

  1. .bazelci/presubmit.yml dosyanızda aşağıdakileri yapın:

    a. rbe_ubuntu1604 adlı bir yapılandırma ekleyin.

    b. rbe_ubuntu1604 yapılandırmasında, uzaktan yürütmeye karşı test etmek istediğiniz derleme ve test hedeflerini ekleyin.

  2. bazel-toolchains GitHub deposunu, WORKSPACE dosyanıza ekleyin. Bu dosya, en son sürüme sabitlenir. Ayrıca rbe_autoconfig adlı bir hedef buildkite_config ekleyin. Bu örnek, rbe_ubuntu1604 için BuildKite CI ile uzaktan yürütme için araç zinciri yapılandırması oluşturur.

load("@bazel_toolchains//rules:rbe_repo.bzl", "rbe_autoconfig")
rbe_autoconfig(name = "buildkite_config")
  1. presubmit.yml dosyasında yaptığınız değişiklikleri içeren bir çekme isteği gönderin. (Örnek çekme isteğine bakın.)

  2. Derleme sonuçlarını görüntülemek için aşağıdaki şekilde gösterildiği gibi GitHub'daki RBE (Ubuntu 16.04) çekme isteği kontrolü için Ayrıntılar'ı tıklayın. Bu bağlantı, çekme isteği birleştirildikten ve CI testleri çalıştırıldıktan sonra kullanılabilir. (Örnek sonuçlara bakın.)

    Örnek sonuçlar

  3. (İsteğe bağlı) bazel test (RBE (Ubuntu 16.04)) kontrolünü, dal koruma kuralınızda birleştirme yapmadan önce geçilmesi gereken bir test olarak ayarlayın. Bu ayar, aşağıdaki şekilde gösterildiği gibi GitHub'da Settings > Branches > Branch protection rules (Ayarlar > Dallar > Dal koruma kuralları) bölümünde bulunur.

    Branch protection rules settings

Başarısız derleme ve testlerle ilgili sorunları giderme

Derlemeniz veya testleriniz başarısız olursa bunun nedeni muhtemelen aşağıdakilerden biridir:

  • Gerekli derleme veya test araçları varsayılan kapsayıcıya yüklenmemiş. rbe_ubuntu1604 yapılandırması kullanılarak oluşturulan derlemeler, varsayılan olarak birçok Bazel derlemesinde ortak olan araçları içeren bir rbe-ubuntu16-04 kapsayıcısında çalışır. Ancak kurallarınız varsayılan kapsayıcıda bulunmayan araçlar gerektiriyorsa rbe-ubuntu16-04 kapsayıcısına dayalı özel bir kapsayıcı oluşturmanız ve bu araçları daha sonra açıklanacağı şekilde eklemeniz gerekir.

  • Derleme veya test hedefleri, uzaktan yürütmeyle uyumlu olmayan kurallar kullanıyor. Uzaktan yürütmeyle uyumluluk hakkında ayrıntılı bilgi için Adapting Bazel Rules for Remote Execution (Uzaktan Yürütme İçin Bazel Kurallarını Uyarlama) başlıklı makaleye bakın.

rbe_ubuntu1604 CI yapılandırmasında özel container kullanma

rbe-ubuntu16-04 kapsayıcısı, aşağıdaki URL'de herkese açık olarak kullanılabilir:

http://gcr.io/cloud-marketplace/google/rbe-ubuntu16-04

Doğrudan Container Registry'den çekebilir veya kaynaktan oluşturabilirsiniz. Aşağıdaki bölümlerde her iki seçenek de açıklanmaktadır.

Başlamadan önce gcloud, docker ve git uygulamalarını yüklediğinizden emin olun. Container'ı kaynaktan oluşturuyorsanız Bazel'in en yeni sürümünü de yüklemeniz gerekir.

Container Registry'den rbe-ubuntu16-04'ü çekme

Container Registry'den rbe-ubuntu16-04 kapsayıcısını çekmek için aşağıdaki komutu çalıştırın:

gcloud docker -- pull gcr.io/cloud-marketplace/google/rbe-ubuntu16-04@sha256:sha256-checksum

sha256-checksum yerine en son kapsayıcının SHA256 sağlama toplamı değerini girin.

rbe-ubuntu16-04 container'ını kaynaktan derleme

rbe-ubuntu16-04 container'ını kaynaktan oluşturmak için aşağıdakileri yapın:

  1. bazel-toolchains deposunu klonlayın:

    git clone https://github.com/bazelbuild/bazel-toolchains
  2. Toolchain Containers (Araç Zinciri Kapsayıcıları) bölümünde açıklandığı gibi araç zinciri kapsayıcı hedeflerini ayarlayın ve kapsayıcıyı oluşturun.

  3. Yeni oluşturulan kapsayıcıyı çekin:

    gcloud docker -- pull gcr.io/project-id/custom-container-namesha256-checksum

Özel container'ı çalıştırma

Özel kapsayıcıyı çalıştırmak için aşağıdakilerden birini yapın:

  • Container'ı Container Registry'den çektiyseniz aşağıdaki komutu çalıştırın:

    docker run -it gcr.io/cloud-marketplace/google/rbe-ubuntu16-04@sha256:sha256-checksum/bin/bash

    sha256-checksum yerine en son kapsayıcının SHA256 sağlama toplamı değerini girin.

  • Container'ı kaynaktan oluşturduysanız aşağıdaki komutu çalıştırın:

    docker run -it gcr.io/project-id/custom-container-name@sha256:sha256sum /bin/bash

Özel kapsayıcıya kaynak ekleme

rbe-ubuntu16-04 kapsayıcısına kaynak veya orijinal kaynakların alternatif sürümlerini eklemek için Dockerfile veya rules_docker kullanın. Docker'ı kullanmaya yeni başladıysanız aşağıdakileri okuyun:

Örneğin, aşağıdaki Dockerfile snippet'i my_tool_package yükler:

FROM gcr.io/cloud-marketplace/google/rbe-ubuntu16-04@sha256:sha256-checksum
RUN apt-get update && yes | apt-get install -y my_tool_package

Özel container'ı Container Registry'ye gönderme

Container'ı özelleştirdikten sonra container görüntüsünü oluşturun ve aşağıdaki gibi Container Registry'ye aktarın:

  1. Container görüntüsünü oluşturun:

    docker build -t custom-container-name.
    docker tag custom-container-name gcr.io/project-id/custom-container-name
  2. Container görüntüsünü Container Registry'ye aktarın:

    gcloud docker -- push gcr.io/project-id/custom-container-name
  3. Kapsayıcının gönderildiğini doğrulamak için aşağıdaki URL'ye gidin:

    https://console.cloud.google.com/gcr/images/project-id/GLOBAL/custom-container-name

  4. Özel container'ınızın SHA256 sağlamasını not edin. Bu bilgiyi daha sonra derleme platformu tanımınızda sağlamanız gerekir.

  5. Herkese açık resim sunma bölümünde açıklandığı gibi, herkese açık erişim için kapsayıcıyı yapılandırın.

    Daha fazla bilgi için Resimleri gönderme ve çekme başlıklı makaleyi inceleyin.

Derleme platformu tanımını belirtme

Özel araç zinciri yapılandırmanıza Bazel platformu yapılandırması eklemeniz gerekir. Bu yapılandırma, Bazel'in istenen donanım/yazılım platformuna uygun bir araç zinciri seçmesine olanak tanır. Geçerli bir platformu otomatik olarak oluşturmak için WORKSPACE öğenize rbe_autoconfig adında bir hedef ekleyebilirsiniz. Bu hedef, özel kapsayıcınızı seçmek için ek özellikler içerir.buildkite_config Bu kurulumla ilgili ayrıntılar için rbe_autoconfig ile ilgili güncel belgeleri okuyun.