bazel

About_work·2023년 3월 20일
0

build

목록 보기
1/1

bazel

빌드

  • 소스 코드를 실행 가능한 소프트웨어로 변환하는 과정.
  • 소프트웨어 빌드 = 컴파일(Compile), 링크(Link), 패키징(Package)
  • 컴파일
    • 소스 코드를 기계어 코드로 변환하는 과정
    • 이때 소스 코드를 이해하고 명령어로 번역하는 컴파일러가 필요
  • 링크
    • 컴파일된 여러 개의 오브젝트 파일을 하나의 실행 파일로 합치는 과정
  • 패키징
    • 실행 파일 및 관련 라이브러리, 설정 파일 등을 포함하여 배포용 패키지를 만드는 과정

Bazel 장점

  • 높은 빌드 속도
    • Bazel은 캐시와 병렬 처리 기술, 이전 빌드의 캐시를 활용하는 등을 적극적으로 활용하여 높은 빌드 속도를 보장
  • 일관성 있는 빌드
    • Bazel은 빌드에 사용되는 모든 종속성을 자동으로 추적하고, 각 종속성의 버전 충돌 등을 방지하여 일관성 있는 빌드를 유지
  • 다양한 언어와 플랫폼 지원
    • Bazel은 Java, C++, Python, Go 등 다양한 프로그래밍 언어와 Linux, macOS, Windows 등 다양한 플랫폼을 지원
  • 테스트 자동화
    • Bazel은 테스트 자동화를 지원하여 개발자가 빠르게 테스트를 실행하고 피드백을 받을 수 있음

Bazel 단점

  • 학습 곡선
    • Bazel은 다른 빌드 도구와는 조금 다른 문법과 구성 요소를 사용하기 때문에 학습 곡선이 높을 수 있음.
  • 복잡한 설정
    • Bazel은 강력한 기능을 제공하기 때문에 설정이 복잡할 수 있음
    • 따라서 초기 설정을 잘못하면 빌드 시간이 길어질 수 있음
  • 프로젝트의 크기
    • Bazel은 대규모 프로젝트에 최적화되어 있으며, 작은 프로젝트에서는 사용하기에 비실용적일 수 있음

Bazel 사용법

Bazel 설치

  • Bazel을 사용하려면 먼저 Bazel을 설치해야 합니다. Bazel 공식 사이트에서 다운로드하여 설치할 수 있습니다.

WORKSPACE 파일 생성

  • Bazel은 WORKSPACE 파일을 사용하여 빌드에 필요한 종속성을 정의합니다. 따라서 빌드를 수행할 디렉토리에서 WORKSPACE 파일을 생성해야 합니다.
    • touch WORKSPACE (빈 파일 생성)
    • WORKSPACE 파일은 빌드할 소프트웨어 프로젝트의 종속성을 정의
load("@bazel_tools//tools/build_defs/repo:http.bzl", "http_archive")

http_archive(
    name = "name",
    urls = ["url"],
    sha256 = "sha256"
)
      • name, url, sha256 값은 빌드할 소프트웨어 프로젝트의 종속성에 따라 달라집니다. http_archive 함수는 소스 코드를 다운로드하고 빌드에 필요한 종속성을 설정하는 데 사용됩니다.
      • 예를 들어, TensorFlow 라이브러리를 사용하려면 다음과 같이 WORKSPACE 파일을 수정할 수 있습니다.
      • 아래의 코드는 TensorFlow 라이브러리와 rules_k8s 종속성을 정의하는 WORKSPACE 파일의 예시입니다.
      • load 함수
        • @org_tensorflow//tensorflow:workspace.bzl 파일에서 bazel_repositories 함수를 불러옵니다.
      • bazel_repositories 함수
        • TensorFlow 라이브러리와 관련된 레포지토리 및 빌드 설정을 Bazel의 빌드 환경에 추가합니다.
        • 예를 들어, TensorFlow 라이브러리의 종속성을 정의하고, TensorFlow 라이브러리를 빌드할 때 필요한 빌드 도구와 플랫폼을 설정합니다.
      • name
        • http_archive를 통해 다운로드 및 빌드할 소프트웨어 프로젝트의 이름을 정의합니다.
      • sha256
        • 다운로드한 소프트웨어의 체크섬을 정의합니다. 다운로드한 파일의 체크섬과 지정된 sha256 값이 일치해야 다음 단계로 진행할 수 있습니다.
      • strip_prefix
        • 압축 파일의 경로에서 제외할 접두사를 정의합니다. 이를 통해 소프트웨어 프로젝트의 루트 디렉토리를 지정할 수 있습니다.
      • urls
        • 소프트웨어 프로젝트를 다운로드할 URL을 정의합니다. 이 때, 여러 개의 URL을 지정할 수 있습니다. 다운로드할 URL이 여러 개일 경우, Bazel은 모든 URL을 시도한 뒤 다운로드가 성공한 URL을 사용합니다.
      • 이렇게 WORKSPACE 파일에 소프트웨어 프로젝트의 종속성을 정의하면 Bazel이 빌드할 때 해당 종속성을 자동으로 다운로드하고 빌드에 사용합니다.
http_archive(
    name = "io_bazel_rules_k8s",
    sha256 = "d7a719e283943faddcd75760f34ce4f7a4d0c31a7f48ad6d06a6f0e6f680e0ea",
    strip_prefix = "rules_k8s-0.7.0",
    urls = ["https://github.com/bazelbuild/rules_k8s/archive/0.7.0.tar.gz"],
)

http_archive(
    name = "org_tensorflow",
    sha256 = "70c8fba65b9455833cf3fbf3e42f9ab216a1b76c1d69a6bda63f69092f87aa5c",
    urls = [
        "https://storage.googleapis.com/mirror.tensorflow.org/github.com/tensorflow/tensorflow/archive/v2.8.0.tar.gz",
        "https://github.com/tensorflow/tensorflow/archive/v2.8.0.tar.gz",
    ],
    strip_prefix = "tensorflow-2.8.0",
)

load("@org_tensorflow//tensorflow:workspace.bzl", "bazel_repositories")

bazel_repositories()

BUILD 파일 생성

  • Bazel은 BUILD 파일을 사용하여 빌드할 소스 코드 및 종속성을 정의합니다. 따라서 빌드할 소스 코드가 있는 디렉토리에서 BUILD 파일을 생성해야 합니다.
  • touch BUILD
  • 소스 코드와 빌드 설정 정의: BUILD 파일에는 소스 코드와 빌드 설정을 정의합니다. 파이썬 소스 코드를 빌드하기 위해서는 다음과 같은 코드를 BUILD 파일에 추가합니다.
py_binary(
    name = "my_program",
    srcs = ["main.py"],
    deps = [        "//path/to/library1",        "//path/to/library2",    ],
)
    • 위의 코드는 main.py 소스 파일을 빌드하여 my_program이라는 이름의 파이썬 실행 파일을 생성하는 예시입니다. 이 때, 빌드에 필요한 종속성은 deps 항목에 정의됩니다. 위의 코드에서는 //path/to/library1과 //path/to/library2라는 종속성을 사용하고 있습니다.
    • 여기서 //path/to/library1과 //path/to/library2는 WORKSPACE 파일에서 정의한 종속성의 이름입니다. WORKSPACE 파일에서 정의한 이름과 일치해야 합니다.

빌드 실행

  • Bazel은 bazel build 명령어를 사용하여 빌드를 실행합니다. 빌드를 수행할 디렉토리에서 다음 명령어를 실행하면 됩니다.
bazel build [빌드 대상]
  • 예를 들어, 현재 디렉토리에 있는 모든 소스 코드를 빌드하려면 다음과 같이 실행합니다.
bazel build :all
bazel build :my_program
  • 위의 명령어는 my_program이라는 이름의 파이썬 실행 파일을 빌드하는 명령어입니다. 빌드 결과는 bazel-bin 디렉토리에 저장됩니다.

빌드 결과 확인

  • 빌드 결과는 bazel-bin 디렉토리에 저장됩니다. 해당 디렉토리에서 생성된 실행 파일을 확인할 수 있습니다.
  • 위와 같은 방식으로 파이썬 소스 코드를 Bazel로 빌드할 수 있습니다. 자세한 내용은 Bazel 공식 문서를 참고하시면 됩니다.

테스트 실행

  • Bazel은 bazel test 명령어를 사용하여 테스트를 실행합니다. 빌드를 수행할 디렉토리에서 다음 명령어를 실행하면 됩니다.
bazel test [테스트 대상]
  • 예를 들어, 현재 디렉토리의 모든 테스트를 실행하려면 다음과 같이 실행합니다.
bazel test :all
profile
새로운 것이 들어오면 이미 있는 것과 충돌을 시도하라.

0개의 댓글