저장소 규칙

문제 신고 소스 보기 1박 · 7.2 · 7.1 · 7.0 · 6.5 · 6.4

이 페이지에서는 저장소 규칙을 만드는 방법을 설명하고 확인하세요.

외부 저장소WORKSPACE 파일에 위치하고 로드 단계에서 밀폐되지 않은 작업을 사용 설정합니다. 있습니다. 각 외부 저장소 규칙은 BUILD 파일 및 아티팩트를 소유하는 데 사용됩니다. 서드 파티 공급업체와 라이브러리 (예: Maven 패키지 라이브러리)를 지원하지만 BUILD 파일도 생성합니다. 고유한 IP 주소를 제공합니다

저장소 규칙 생성

.bzl 파일에서 repository_rule 함수를 사용하여 새 저장소를 만듭니다. 만들고 전역 변수에 저장합니다.

맞춤 저장소 규칙은 네이티브 저장소 규칙처럼 사용할 수 있습니다. 그것은 필수 name 속성과 빌드 파일에 있는 모든 타겟이 있음 @<name>//package:target로 참조할 수 있습니다. 여기서 <name>name 속성

이 규칙은 명시적으로 빌드할 때 또는 지정할 수도 있습니다 이 경우 Bazel은 implementation 함수를 실행합니다. 이 함수는 저장소, 저장소 콘텐츠, BUILD 파일을 만드는 방법을 설명합니다.

속성

속성은 url 또는 sha256와 같은 규칙 인수입니다. 다음을 나열해야 합니다. 속성과 속성의 유형을 지정합니다.

local_repository = repository_rule(
    implementation=_impl,
    local=True,
    attrs={"path": attr.string(mandatory=True)})

속성에 액세스하려면 repository_ctx.attr.<attribute_name>를 사용합니다.

모든 repository_rule에는 빌드와 마찬가지로 암시적으로 정의된 속성이 있습니다. 규칙). 두 가지 암시적 속성은 name (빌드 규칙과 같음)입니다. repo_mapping입니다. 저장소 규칙의 이름은 다음을 사용하여 액세스할 수 있습니다. repository_ctx.name repo_mapping의 의미는 네이티브 저장소 규칙 local_repositorynew_local_repository입니다.

속성 이름이 _로 시작하면 비공개이며 사용자가 설정할 수 없습니다.

구현 함수

모든 저장소 규칙에는 implementation 함수가 필요합니다. 여기에는 실제 로직에 영향을 미치며 로드 단계에서만 실행됩니다.

이 함수에는 정확히 하나의 입력 매개변수인 repository_ctx가 있습니다. 함수 는 None 중 하나를 반환하여 주어진 또는 해당 규칙에 대한 매개변수 집합이 포함된 dict를 해당 규칙을 동일한 저장소를 생성하는 재현 가능한 규칙으로 변환합니다. 대상 예를 들어 Git 저장소를 추적하는 규칙의 경우 커밋 식별자로 대체되었습니다. 지정합니다.

입력 매개변수 repository_ctx는 다음과 같은 작업에 사용할 수 있습니다. 속성 값 및 밀폐되지 않은 함수 (바이너리, 바이너리 실행, 저장소에 파일 만들기, 파일 다운로드 제공합니다. 자세한 내용은 라이브러리를 참고하세요. 있습니다. 예:

def _impl(repository_ctx):
  repository_ctx.symlink(repository_ctx.attr.path, "")

local_repository = repository_rule(
    implementation=_impl,
    ...)

구현 함수는 언제 실행되나요?

저장소가 local로 선언되면 종속 항목이 변경됩니다. 종속 항목 그래프 (WORKSPACE 파일 자체 포함)에서 구현 함수가 실행됩니다.

구현 함수가 종속 항목인 경우 다시 시작할 수 있습니다. 요청이 누락되었는지 확인합니다. 구현 함수의 시작 부분 재실행됩니다. 회피하다 불필요한 재시작을 를 반복해야 함), 라벨 인수는 미리 가져온다. 라벨 인수는 기존 파일로 변환될 수 있습니다. 참고: 실행 중에만 생성된 문자열 또는 라벨의 경로 여전히 재시작될 수 있습니다

마지막으로 local가 아닌 저장소의 경우 다음 변경사항만 있습니다. 종속 항목이 다시 시작될 수 있습니다.

  • 저장소 규칙을 정의하는 데 필요한 .bzl 파일
  • WORKSPACE 파일의 저장소 규칙 선언
  • environ로 선언된 모든 환경 변수의 값 속성 repository_rule 함수를 사용하세요. 이러한 환경 변수의 값은 명령줄에서 --action_env 드림 플래그 (하지만 이 플래그는 빌드의 모든 작업을 무효화합니다.)
  • 라벨 (예: //mypkg:label.txt(mypkg/label.txt 아님).

외부 저장소 다시 가져오기 강제

간혹 외부 저장소는 종속 항목이 포함됩니다 예를 들어 저장소 가져오기 소스는 서드 파티 저장소의 특정 브랜치를 따르면 새 커밋이 해당 브랜치에서 사용할 수 있습니다 이 경우 Bazel에 모든 bazel sync를 호출하여 무조건 외부 저장소에 저장합니다.

또한 일부 규칙은 로컬 머신을 검사하여 더 이상 유효하지 않을 수 있습니다 여기서 Bazel에게 해당 외부 저장소만 다시 가져옵니다. repository_rule 드림 정의에 configure 속성이 설정되어 있으므로 bazel sync --configure를 사용하세요.

  • C++ 자동 구성 도구 모음: 저장소 규칙을 사용하여 자동으로 Bazel용 C++ 구성 파일은 로컬 C++ 컴파일러인 환경 및 C++ 컴파일러에서 지원하는 플래그로 구성됩니다.

  • Go 저장소 여러 repository_rule를 사용하여 종속 항목 목록을 정의합니다. Google Cloud Storage 버킷이 있습니다

  • rules_jvm_external이 기본적으로 빌드 타겟을 생성하는 @maven라는 외부 저장소 모든 Maven 아티팩트에 관해 API를 제공합니다.