이 페이지는 Bazel 규칙 저장소의 소유자 및 유지관리자를 위한 페이지입니다. 원격 실행 시나리오에 대한 호환성을 위해 규칙을 테스트하도록 저장소의 Bazel 지속적 통합 (CI) 시스템을 구성하는 방법을 설명합니다. 이 페이지의 안내는 GitHub 저장소에 저장된 프로젝트에 적용됩니다.
기본 요건
이 페이지의 단계를 완료하기 전에 다음을 확인하세요.
- GitHub 저장소는 Bazel GitHub 조직에 속합니다.
- Bazel 지속적 통합에 설명된 대로 저장소에 Buildkite를 구성했습니다.
테스트를 위한 Bazel CI 설정
- .bazelci/presubmit.yml파일에서 다음을 실행합니다.- a. - rbe_ubuntu1604이라는 구성을 추가합니다.- b. - rbe_ubuntu1604구성에서 원격 실행에 대해 테스트할 빌드 및 테스트 타겟을 추가합니다.
- 최신 출시 버전에 고정된 - WORKSPACE파일에- bazel-toolchainsGitHub 저장소를 추가합니다. 이름이- buildkite_config인- rbe_autoconfig타겟도 추가합니다. 이 예에서는- rbe_ubuntu1604용 BuildKite CI를 사용하여 원격 실행을 위한 도구 모음 구성을 만듭니다.
load("@bazel_toolchains//rules:rbe_repo.bzl", "rbe_autoconfig")rbe_autoconfig(name = "buildkite_config")
- presubmit.yml파일의 변경사항이 포함된 풀 요청을 보냅니다. (풀 요청 예시 참고)
- 빌드 결과를 보려면 아래 그림과 같이 GitHub에서 RBE (Ubuntu 16.04) pull 요청 확인의 세부정보를 클릭합니다. 이 링크는 풀 요청이 병합되고 CI 테스트가 실행된 후에 사용할 수 있습니다. (예시 결과 참고)  
- (선택사항) bazel test (RBE (Ubuntu 16.04)) 검사를 브랜치 보호 규칙에서 병합하기 전에 통과해야 하는 테스트로 설정합니다. 이 설정은 다음 그림과 같이 GitHub의 설정 > 브랜치 > 브랜치 보호 규칙에 있습니다.  
실패한 빌드 및 테스트 문제 해결
빌드 또는 테스트가 실패하는 경우 다음이 원인일 수 있습니다.
- 필요한 빌드 또는 테스트 도구가 기본 컨테이너에 설치되어 있지 않습니다. - rbe_ubuntu1604구성을 사용하여 빌드하면 기본적으로- rbe-ubuntu16-04컨테이너 내에서 실행되며, 이 컨테이너에는 여러 Bazel 빌드에 공통적인 도구가 포함되어 있습니다. 하지만 규칙에 기본 컨테이너에 없는 도구가 필요한 경우- 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-checksumsha256-checksum을 최신 컨테이너의 SHA256 체크섬 값으로 바꿉니다.
소스에서 rbe-ubuntu16-04 컨테이너 빌드
소스에서 rbe-ubuntu16-04 컨테이너를 빌드하려면 다음을 실행하세요.
- bazel-toolchains저장소를 복제합니다.- git clone https://github.com/bazelbuild/bazel-toolchains
- 도구 모음 컨테이너에 설명된 대로 도구 모음 컨테이너 대상을 설정하고 컨테이너를 빌드합니다. 
- 새로 빌드된 컨테이너를 가져옵니다. - 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로 푸시합니다.
- 컨테이너 이미지를 빌드합니다. - docker build -t custom-container-name.- docker tag custom-container-name gcr.io/project-id/custom-container-name
- 컨테이너 이미지를 Container Registry로 푸시합니다. - gcloud docker -- push gcr.io/project-id/custom-container-name
- 다음 URL로 이동하여 컨테이너가 푸시되었는지 확인합니다. - https://console.cloud.google.com/gcr/images/project-id/GLOBAL/custom-container-name 
- 커스텀 컨테이너의 SHA256 체크섬을 기록해 둡니다. 나중에 빌드 플랫폼 정의에서 제공해야 합니다. 
- 이미지를 공개적으로 제공에 설명된 대로 공개적으로 액세스할 수 있도록 컨테이너를 구성합니다. - 자세한 내용은 이미지 푸시 및 가져오기를 참고하세요. 
빌드 플랫폼 정의 지정
커스텀 도구 모음 구성에 Bazel 플랫폼 구성을 포함해야 합니다. 이렇게 하면 Bazel이 원하는 하드웨어/소프트웨어 플랫폼에 적합한 도구 모음을 선택할 수 있습니다. 유효한 플랫폼을 자동으로 생성하려면 WORKSPACE에 이름이 buildkite_config인 rbe_autoconfig 타겟을 추가하면 됩니다. 이 타겟에는 맞춤 컨테이너를 선택하는 추가 속성이 포함됩니다. 이 설정에 대한 자세한 내용은 rbe_autoconfig의 최신 문서를 참고하세요.