WORKSPACE 규칙에서 비밀폐 동작 찾기

문제 신고 <ph type="x-smartling-placeholder"></ph> 소스 보기 1박 · 7.2 · 7.1 · 7.0 · 6.5 · 6.4

아래에서 호스트 머신은 Bazel이 실행되는 머신입니다.

원격 실행을 사용할 때는 실제 빌드 또는 테스트 단계가 발생하지만 대신 원격 실행으로 전송됩니다. 있습니다. 하지만 작업공간 규칙을 해결하는 단계가 호스트 머신의 IP 주소를 사용할 수 있습니다 워크스페이스 규칙이 호스트 머신을 사용할 경우 비호환성 문제를 일으킬 수 있습니다

원격 지원에 대한 Bazel 규칙을 조정하면서 실행하려면 먼저 해당 작업공간 규칙을 찾아야 합니다. 수정할 수 있습니다 이 페이지에서는 문제가 발생할 수 있는 작업공간을 찾는 방법을 설명합니다. 작업공간 로그를 사용하여 규칙을 만들 수 있습니다.

밀폐되지 않은 규칙 찾기

Workspace 규칙을 사용하면 개발자가 충분히 풍부하지만, 임의적인 처리를 통해 어떤 일이 일어나는지 살펴보겠습니다. 모든 관련 명령은 로컬에서 발생하며 밀폐되지 않을 수 있는 잠재적인 소스입니다. 일반적으로 밀폐되지 않는 동작은 도입을 통해 repository_ctx를 통해 호스트 머신과 통신할 수 있습니다

Bazel 0.18부터 밀폐되지 않을 수 있는 일부 --experimental_workspace_rules_log_file=[PATH] 플래그를 추가하여 Bazel 명령어를 사용하세요 여기서 [PATH]은 로그가 작성될 파일 이름입니다. 생성됨.

다음 사항을 참고하세요.

  • 로그는 실행되는 이벤트를 캡처합니다. 일부 단계가 로그에 표시되지 않으므로 전체 결과를 얻기 위해 미리 bazel clean --expunge를 실행하는 것을 잊어버립니다.

  • 함수가 재실행되는 경우도 있는데, 이 경우 관련 이벤트는 로그에 여러 번 표시됩니다.

  • Workspace 규칙은 현재 Starlark 이벤트만 로깅합니다.

작업공간 초기화 중에 실행된 항목을 찾으려면 다음 안내를 따르세요.

  1. bazel clean --expunge을 실행합니다. 이 명령은 로컬 캐시를 지우고 모든 초기화가 재실행되도록 합니다.

  2. --experimental_workspace_rules_log_file=/tmp/workspacelog을(를) 다음에 추가 Bazel 명령어를 사용하여 빌드를 실행합니다.

    이 명령어는 다음 유형의 메시지를 나열하는 바이너리 proto 파일을 생성합니다. WorkspaceEvent

  3. Bazel 소스 코드를 다운로드하고 아래 명령어를 사용하여 Bazel 폴더로 이동합니다. 소스 코드가 필요한 경우 새 작업공간 로그를 workspacelog 파서

    git clone https://github.com/bazelbuild/bazel.git
    cd bazel
    
  4. Bazel 소스 코드 저장소에서 전체 작업공간 로그를 텍스트로 변환합니다.

    bazel build src/tools/workspacelog:parser
    bazel-bin/src/tools/workspacelog/parser --log_path=/tmp/workspacelog > /tmp/workspacelog.txt
    
  5. 출력이 상당히 상세할 수 있으며, 기본 제공 Bazel의 출력을 포함합니다. 있습니다.

    출력에서 특정 규칙을 제외하려면 --exclude_rule 옵션을 사용합니다. 예를 들면 다음과 같습니다.

    bazel build src/tools/workspacelog:parser
    bazel-bin/src/tools/workspacelog/parser --log_path=/tmp/workspacelog \
        --exclude_rule "//external:local_config_cc" \
        --exclude_rule "//external:dep" > /tmp/workspacelog.txt
    
  6. /tmp/workspacelog.txt을 열고 안전하지 않은 작업을 확인합니다.

로그는 WorkspaceEvent 컴퓨터에서 수행될 수 있는 밀폐되지 않은 특정 작업을 간략히 설명하는 메시지 repository_ctx

밀폐되지 않을 수 있다고 강조 표시된 작업은 다음과 같습니다.

  • execute: 호스트 환경에서 임의의 명령어를 실행합니다. 다음을 확인하세요. 호스트 환경의 종속 항목을 야기할 수 있습니다.

  • download, download_and_extract: 밀폐 빌드를 수행하려면 그 sha256이

  • file, template: 그 자체는 밀폐는 아니지만 메커니즘일 수 있습니다. 을 사용하여 호스트 환경의 종속 항목을 저장소에 도입할 수 있습니다. 입력이 어디에서 비롯되는지, 또 다른 방식으로 입력되는 것은 아닌지 확인해야 합니다. 호스트 환경에 따라 다릅니다.

  • os: 그 자체로 밀폐는 아니지만 종속 항목을 쉽게 가져올 수 있습니다. 사용자 인증 정보를 제공합니다 밀폐 빌드에서는 일반적으로 이를 호출하지 않습니다. 밀폐된 용도인지 여부를 평가할 때는 작업자가 아닌 호스트에서 실행됩니다 환경 세부사항 가져오기 일반적으로 원격 빌드에는 좋지 않습니다.

  • symlink: 일반적으로 안전하지만 위험 신호가 있는지 확인합니다. 외부 또는 절대 경로로 이동하면 원격 근무자를 위한 것입니다 심볼릭 링크가 호스트 머신 속성을 기반으로 생성되는 경우 그것도 문제가 될 수 있습니다

  • which: 호스트에 설치된 프로그램을 확인하는 데 일반적으로 문제가 있습니다. 작업자의 구성이 다를 수 있기 때문입니다