자동 실행 그룹은 실행 플랫폼을 선택합니다. 각 도구 모음 유형에 대해 자세히 살펴보겠습니다 즉, 한 타겟에 여러 개의 실행할 수 있게 해 줍니다
요약
자동 실행 그룹은 도구 모음과 밀접하게 연결되어 있습니다.
영향을 받는 작업(
또는 툴체인의 도구)을 toolchain
매개변수를 추가하여 다운로드할 수 있습니다. 예를 들면 다음과 같습니다.
ctx.actions.run(
...,
executable = ctx.toolchain['@bazel_tools//tools/jdk:toolchain_type'].tool,
...,
toolchain = '@bazel_tools//tools/jdk:toolchain_type',
)
작업이 도구 모음의 도구 또는 실행 파일을 사용하지 않는 경우 및 Blaze
감지하지 못하면 (오류 발생)
toolchain = None
입니다.
단일 실행 플랫폼에서 여러 도구 모음을 사용해야 하는 경우 (작업 두 개 이상의 도구 모음에서 실행 파일 또는 도구를 사용하는 경우 수동으로 exec_groups를 정의하고 커스텀 exec_group은 언제 사용해야 하나요? 섹션).
기록
AEG 이전에는 실행 플랫폼이 규칙 수준에서 선택되었습니다. 예를 들면 다음과 같습니다.
my_rule = rule(
_impl,
toolchains = ['//tools:toolchain_type_1', '//tools:toolchain_type_2'],
)
my_rule
규칙은 두 가지 도구 모음 유형을 등록합니다. 즉, 툴체인은
사용한 해상도
두 도구 모음 유형을 모두 지원하는 실행 플랫폼을 찾습니다. 선택한
규칙 내의 등록된 각 작업에 실행 플랫폼이 사용되었습니다.
exec_groups와 다르게 지정할 수 있습니다.
즉, 이전에는 규칙 내 모든 작업이 한 번만 실행되었습니다.
다른 툴체인 (실행 플랫폼)의 도구를 사용했더라도
선택). 이로 인해
모든 도구 모음을 지원하는 실행 플랫폼입니다.
현재 상태
AEG를 사용하면 각 도구 모음 유형에 대해 실행 플랫폼이 선택됩니다. 이
이전 예 my_rule
의 구현 함수는 다음과 같습니다.
def _impl(ctx):
ctx.actions.run(
mnemonic = "First action",
executable = ctx.toolchain['//tools:toolchain_type_1'].tool,
toolchain = '//tools:toolchain_type_1',
)
ctx.actions.run(
mnemonic = "Second action",
executable = ctx.toolchain['//tools:toolchain_type_2'].tool,
toolchain = '//tools:toolchain_type_2',
)
이 규칙은 두 개의 작업, 즉 First action
에서 실행 파일을 사용하는 작업을 만듭니다.
//tools:toolchain_type_1
및 Second action
는
//tools:toolchain_type_2
입니다. AEG 이전에는 이러한 작업이 모두
두 툴체인 유형을 모두 지원하는 단일 실행 플랫폼에서 실행됩니다. AEG를 사용하면
toolchain
매개변수를 작업 내에 추가하면 각 작업이 다음에서 실행됩니다.
툴체인을 제공하는 실행 플랫폼입니다 작업은
실행할 수 있습니다
이는 toolchain
인 ctx.actions.run_shell에도 적용됩니다.
매개변수는 tools
가 도구 모음에서 가져온 경우 추가되어야 합니다.
커스텀 실행 그룹과 자동 실행 그룹의 차이점
이름에서 알 수 있듯이 AEG는 각 팀원에 대해 자동으로 생성되는 규칙에 등록된 도구 모음 유형입니다. 직접 지정할 필요가 없습니다. 기존의 '클래식' 실행할 수 있습니다
커스텀 exec_group은 언제 사용해야 하나요?
커스텀 exec_groups는 여러 도구 모음이 단일 실행 플랫폼에서 실행됩니다 다른 모든 경우에는 커스텀 exec_groups를 정의합니다. 예를 들면 다음과 같습니다.
def _impl(ctx):
ctx.actions.run(
...,
executable = ctx.toolchain['//tools:toolchain_type_1'].tool,
tools = [ctx.toolchain['//tools:toolchain_type_2'].tool],
exec_group = 'two_toolchains',
)
my_rule = rule(
_impl,
exec_groups = {
"two_toolchains": exec_group(
toolchains = ['//tools:toolchain_type_1', '//tools:toolchain_type_2'],
),
}
)
AEG 이전
Blaze는 이미 google3 내부에서 AEG를 사용하고 있습니다. 외부적으로 Bazel의 경우 마이그레이션이 진행 중입니다. 일부 규칙에서 이미 사용 중입니다. 규칙 (예: Java 및 C++ 규칙)을 지원하지 않습니다.
이 마이그레이션을 지원하는 Bazel 버전은 무엇인가요?
AEG는 Bazel 7부터 완전히 지원됩니다.
AEG를 사용 설정하는 방법
--incompatible_auto_exec_groups
를 true로 설정합니다. 플래그에 대해 자세히 알아보기
GitHub 문제에서 확인하세요.
특정 규칙 내에서 AEG를 사용 설정하는 방법
규칙에 _use_auto_exec_groups
속성을 설정합니다.
my_rule = rule(
_impl,
attrs = {
"_use_auto_exec_groups": attr.bool(default = True),
}
)
이렇게 하면 my_rule
에서만 AEG가 사용 설정되고 작업이 새 로직을 사용하기 시작합니다.
선택할 때 사용됩니다 호환되지 않는 플래그는 다음과 같이 재정의됩니다.
속성
오류 발생 시 AEG를 사용 중지하는 방법
--incompatible_auto_exec_groups
를 false로 설정하면
(플래그의 GitHub 문제) 또는 특정 규칙을 사용 중지하세요.
_use_auto_exec_groups
속성을 False
로 설정
(속성에 대한 자세한 내용)
AEG로 마이그레이션 시 발생하는 오류 메시지
도구가 암시적 종속 항목에서 비롯되었는지 아니면 도구 모음에서 비롯되었는지 확인할 수 없습니다. 도구 모음 매개변수를 설정하세요. 도구 모음을 사용하지 않는다면 'None'으로 설정하세요.
- 이 경우 오류가 발생하기 전에 호출 스택을 가져와
도구 모음 매개변수가 필요한 정확한 작업을 명확하게 확인할 수 있습니다. 확인할 항목
도구 모음이 작업에 사용되고 도구 모음 매개변수로 설정합니다. 답이 '아니요'인 경우
툴체인이 도구 또는 실행 파일에 대한 작업 내에서 사용되는 경우
None
존재하지 않는 도구 모음 '[도구 모음 유형]'에 대해 선언된 작업입니다.
- 이는 작업에 도구 모음 매개변수를 설정했지만
규칙에 등록할 수 있습니다. 도구 모음을 등록하거나 작업 내에서
None
를 설정합니다.
추가 자료
자세한 내용은 설계 문서를 확인하세요. 도구 모음의 자동 실행 그룹.