원격 실행 규칙을 테스트하도록 Bazel CI 구성

문제 신고 소스 보기 Nightly · 7.4 . 7.3 · 7.2 · 7.1 · 7.0 · 6.5

이 페이지는 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 요청을 보냅니다. (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 플랫폼 구성을 포함해야 합니다. 유효한 플랫폼을 자동으로 생성하려면 WORKSPACE에 맞춤 컨테이너를 선택하는 추가 속성이 포함된 이름이 buildkite_configrbe_autoconfig 타겟을 추가하면 됩니다. 이 설정에 대한 자세한 내용은 rbe_autoconfig의 최신 문서를 참조하세요.