원격 실행을 위한 B-z CI 구성 테스트 규칙

컬렉션을 사용해 정리하기 내 환경설정을 기준으로 콘텐츠를 저장하고 분류하세요.
문제 신고 소스 보기

이 페이지는 Bazel 규칙 저장소의 소유자 및 유지관리 담당자를 위한 페이지입니다. 원격 실행 시나리오에 대한 규칙 호환성을 테스트하기 위해 저장소의 Bazel 지속적 통합 (CI) 시스템을 구성하는 방법을 설명합니다. 이 페이지의 안내는 GitHub 저장소에 저장된 프로젝트에 적용됩니다.

기본 요건

이 페이지의 단계를 완료하기 전에 다음 사항을 확인하세요.

테스트를 위한 Bazel CI 설정

  1. .bazelci/presubmit.yml 파일에서 다음을 수행합니다.

    a. rbe_ubuntu1604라는 구성을 추가합니다.

    b. rbe_ubuntu1604 구성에서 원격 실행에 대해 테스트할 빌드와 테스트 대상을 추가합니다.

  2. 최신 출시 버전에 고정된 WORKSPACE 파일에 bazel-toolchains GitHub 저장소를 추가합니다. 또한 이름이 buildkite_configrbe_autoconfig 타겟을 추가합니다. 이 예시에서는 rbe_ubuntu1604용 BuildKite CI를 사용하여 원격 실행을 위한 도구 모음 구성을 만듭니다.

load("@bazel_toolchains//rules:rbe_repo.bzl", "rbe_autoconfig")
rbe_autoconfig(name = "buildkite_config")
  1. presubmit.yml 파일의 변경사항과 함께 pull 요청을 보냅니다. (풀 요청 예시 참고)

  2. 빌드 결과를 보려면 아래 그림과 같이 GitHub에서 RBE (Ubuntu 16.04) pull 요청 검사에 대한 세부정보를 클릭합니다. pull 요청이 병합되고 CI 테스트가 실행된 후에 이 링크를 사용할 수 있습니다. 결과 예를 참고하세요.

    결과 예시

  3. (선택사항) bazel 테스트 (RBE (Ubuntu 16.04)) 검사를 브랜치 보호 규칙에서 병합하기 전에 통과해야 하는 테스트로 설정합니다. 이 설정은 다음 그림과 같이 GitHub의 설정 > 브랜치 > 브랜치 보호 규칙에 있습니다.

    브랜치 보호 규칙 설정

실패한 빌드 및 테스트 문제 해결

빌드 또는 테스트가 실패하는 이유는 다음과 같습니다.

  • 필수 빌드 또는 테스트 도구가 기본 컨테이너에 설치되어 있지 않습니다. rbe_ubuntu1604 구성을 사용하는 빌드는 기본적으로 여러 Bazel 빌드에 공통되는 도구가 포함된 rbe-ubuntu16-04 컨테이너 내에서 실행됩니다. 하지만 규칙에 기본 컨테이너에 없는 도구가 필요한 경우 rbe-ubuntu16-04 컨테이너를 기반으로 커스텀 컨테이너를 만들고 나중에 설명하는 대로 이러한 도구를 포함해야 합니다.

  • 빌드 또는 테스트 대상이 원격 실행과 호환되지 않는 규칙을 사용합니다. 원격 실행과의 호환성에 대한 자세한 내용은 원격 실행을 위한 Bazel 규칙 조정을 참조하세요.

rbe_ubuntu1604 CI 구성에서 커스텀 컨테이너 사용

rbe-ubuntu16-04 컨테이너는 다음 URL에서 공개적으로 사용할 수 있습니다.

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. 다음 URL로 이동하여 컨테이너가 푸시되었는지 확인합니다.

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

  4. 커스텀 컨테이너의 SHA256 체크섬을 기록합니다. 나중에 빌드 플랫폼 정의에 이를 제공해야 합니다.

  5. 이미지 공개 제공의 설명처럼 공개 액세스에 설명된 대로 컨테이너를 공개 액세스용으로 구성합니다.

    자세한 내용은 이미지 푸시 및 가져오기를 참고하세요.

빌드 플랫폼 정의 지정

커스텀 도구 모음 구성에 Bazel 플랫폼 구성을 포함해야 Bazel이 원하는 하드웨어/소프트웨어 플랫폼에 적합한 도구 모음을 선택할 수 있습니다. 유효한 플랫폼을 자동으로 생성하려면 이름이 buildkite_configrbe_autoconfig 타겟을 WORKSPACE에 추가하면 커스텀 컨테이너를 선택할 수 있는 추가 대상이 포함됩니다. 이 설정에 관한 자세한 내용은 rbe_autoconfig의 최신 문서를 참고하세요.