กฎที่เก็บ HTTP

โหลดฟังก์ชันต่อไปนี้ได้จาก @bazel_tools//tools/build_defs/repo:http.bzl

กฎสําหรับการดาวน์โหลดไฟล์และที่เก็บถาวรผ่าน HTTP

ตั้งค่า

หากต้องการใช้กฎเหล่านี้ในส่วนขยายโมดูล ให้โหลดกฎในไฟล์ .bzl แล้วเรียกใช้จากฟังก์ชันการใช้งานของส่วนขยาย เช่น หากต้องการใช้ http_archive ให้ทำดังนี้

load("@bazel_tools//tools/build_defs/repo:http.bzl", "http_archive")

def _my_extension_impl(mctx):
  http_archive(name = "foo", urls = [...])

my_extension = module_extension(implementation = _my_extension_impl)

หรือจะเรียกใช้กฎของ repo เหล่านี้โดยตรงในไฟล์ MODULE.bazel ก็ได้ โดยทำดังนี้ use_repo_rule

http_archive = use_repo_rule("@bazel_tools//tools/build_defs/repo:http.bzl", "http_archive")
http_archive(name = "foo", urls = [...])

http_archive

load("@bazel//tools/build_defs/repo:http.bzl", "http_archive")

http_archive(name, add_prefix, auth_patterns, build_file, build_file_content, canonical_id,
             integrity, netrc, patch_args, patch_cmds, patch_cmds_win, patch_tool, patches,
             remote_file_integrity, remote_file_urls, remote_patch_strip, remote_patches,
             repo_mapping, sha256, strip_prefix, type, url, urls, workspace_file,
             workspace_file_content)

ดาวน์โหลดที่เก็บ Bazel เป็นไฟล์ที่เก็บถาวรซึ่งบีบอัด ขยายข้อมูล และทำให้เป้าหมายพร้อมสำหรับการเชื่อมโยง

โดยรองรับนามสกุลไฟล์ "zip", "jar", "war", "aar", "tar", "tar.gz", "tgz", "tar.xz", "txz", "tar.zst", "tzst", tar.bz2, "ar" หรือ "deb"

ตัวอย่าง: สมมติว่าที่เก็บปัจจุบันมีซอร์สโค้ดสำหรับโปรแกรมแชท ซึ่งรูทที่ไดเรกทอรี ~/chat-app โดยต้องอาศัยไลบรารี SSL ซึ่งมีอยู่จาก http://example.com/openssl.zip ไฟล์ .zip นี้มีโครงสร้างไดเรกทอรีต่อไปนี้

  WORKSPACE
  src/
    openssl.cc
    openssl.h

ในที่เก็บข้อมูลในเครื่อง ผู้ใช้สร้างไฟล์ openssl.BUILD ซึ่งมีคำจำกัดความเป้าหมายดังต่อไปนี้

  cc_library(
      name = "openssl-lib",
      srcs = ["src/openssl.cc"],
      hdrs = ["src/openssl.h"],
  )

เป้าหมายในที่เก็บข้อมูล ~/chat-app จะขึ้นอยู่กับเป้าหมายนี้หากมีการเพิ่มบรรทัดต่อไปนี้ลงใน ~/chat-app/WORKSPACE

  load("@bazel_tools//tools/build_defs/repo:http.bzl", "http_archive")

  http_archive(
      name = "my_ssl",
      url = "http://example.com/openssl.zip",
      sha256 = "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
      build_file = "@//:openssl.BUILD",
  )

เป้าหมายจะระบุ @my_ssl//:openssl-lib เป็นทรัพยากร Dependency

แอตทริบิวต์

name ชื่อ ต้องระบุ

ชื่อที่ไม่ซ้ำกันสำหรับที่เก็บนี้

add_prefix สตริง ไม่บังคับ

ไดเรกทอรีปลายทางที่สัมพันธ์กับไดเรกทอรีที่เก็บ ระบบจะคลายการแพคข้อมูลที่เก็บถาวรลงในไดเรกทอรีนี้หลังจากใช้ "strip_prefix" (หากมี) กับเส้นทางไฟล์ภายในที่เก็บถาวร เช่น ระบบจะแตกไฟล์ `foo-1.2.3/src/foo.h` เป็น `bar/src/foo.h` หาก `add_prefix = "bar"` และ `strip_prefix = "foo-1.2.3"`

auth_patterns Dictionary: String -> String ไม่บังคับ

Dict ที่ไม่บังคับซึ่งจับคู่ชื่อโฮสต์กับรูปแบบการให้สิทธิ์ที่กำหนดเอง หากมีชื่อโฮสต์ของ URL ในคำสั่งนี้ ระบบจะใช้ค่านี้เป็นรูปแบบเมื่อสร้างส่วนหัวการให้สิทธิ์สำหรับคำขอ HTTP ซึ่งจะช่วยให้ใช้รูปแบบการให้สิทธิ์ที่กำหนดเองได้ ซึ่งใช้ในผู้ให้บริการพื้นที่เก็บข้อมูลระบบคลาวด์ทั่วไปจำนวนมาก ปัจจุบันรูปแบบรองรับโทเค็น 2 รายการ ได้แก่ <login> และ <password> ซึ่งระบบจะแทนที่ด้วยค่าที่เทียบเท่าในไฟล์ netrc สำหรับชื่อโฮสต์เดียวกัน หลังจากจัดรูปแบบแล้ว ระบบจะตั้งค่าผลลัพธ์เป็นค่าสำหรับฟิลด์ Authorization ของคำขอ HTTP ตัวอย่างแอตทริบิวต์และ netrc สำหรับการดาวน์โหลด http ไปยัง API ที่เปิดใช้ oauth2 โดยใช้โทเค็นของผู้ถือครอง

auth_patterns = {
    "storage.cloudprovider.com": "Bearer <password>"
}
netrc:
machine storage.cloudprovider.com
        password RANDOM-TOKEN
คําขอ HTTP สุดท้ายจะมีส่วนหัวดังต่อไปนี้
Authorization: Bearer RANDOM-TOKEN

build_file ป้ายกํากับ (ไม่บังคับ)

ไฟล์ที่จะใช้เป็นไฟล์ BUILD สําหรับที่เก็บข้อมูลนี้ แอตทริบิวต์นี้เป็นป้ายกำกับแบบสัมบูรณ์ (ใช้ "@//" สําหรับที่เก็บข้อมูลหลัก) ไฟล์ไม่จำเป็นต้องมีชื่อว่า BUILD แต่อาจเป็นชื่ออื่นก็ได้ (เช่น BUILD.new-repo-name อาจเป็นชื่อที่เหมาะในการแยกความแตกต่างจากไฟล์ BUILD จริงของที่เก็บ คุณสามารถระบุ build_file หรือ build_file_content อย่างใดอย่างหนึ่งเท่านั้น

build_file_content สตริง ไม่บังคับ

เนื้อหาของไฟล์ BUILD สำหรับที่เก็บนี้ คุณสามารถระบุ build_file หรือ build_file_content อย่างใดอย่างหนึ่งเท่านั้น

canonical_id สตริง ไม่บังคับ

รหัสแคนอนนิกของไฟล์ที่ดาวน์โหลด หากระบุและไม่ได้ว่างเปล่า Bazel จะไม่นำไฟล์จากแคช เว้นแต่จะมีการเพิ่มไฟล์ลงในแคชโดยคำขอที่มีรหัส Canonical เดียวกัน หากไม่ได้ระบุหรือว่างเปล่า Bazel จะใช้ URL ของไฟล์เป็นรหัสแคนนอนิกโดยค่าเริ่มต้น วิธีนี้จะช่วยจับข้อผิดพลาดที่พบบ่อยในการอัปเดต URL โดยไม่อัปเดตแฮชด้วย ซึ่งส่งผลให้บิลด์สําเร็จในเครื่อง แต่ล้มเหลวในเครื่องที่ไม่มีไฟล์ในแคช คุณปิดใช้ลักษณะการทำงานนี้ได้โดยใช้ตัวเลือก --repo_env=BAZEL_HTTP_RULES_URLS_AS_DEFAULT_CANONICAL_ID=0

integrity สตริง ไม่บังคับ

Checksum ที่คาดไว้ในรูปแบบความสมบูรณ์ของเนื้อหาย่อยของไฟล์ที่ดาวน์โหลด ซึ่งต้องตรงกับ checksum ของไฟล์ที่ดาวน์โหลด _การละเว้นการตรวจสอบผลรวมเป็นความเสี่ยงด้านความปลอดภัย เนื่องจากไฟล์ระยะไกลอาจมีการเปลี่ยนแปลง_ ในกรณีที่ดีที่สุด การละเว้นช่องนี้จะทำให้บิลด์ของคุณไม่สมบูรณ์ ไม่จำเป็นต้องทำให้การพัฒนาง่ายขึ้น แต่ควรตั้งค่าแอตทริบิวต์นี้หรือ "sha256" ก่อนจัดส่ง

netrc สตริง ไม่บังคับ

ตำแหน่งของไฟล์ .netrc ที่จะใช้สำหรับการตรวจสอบสิทธิ์

patch_args รายการสตริง (ไม่บังคับ)

อาร์กิวเมนต์ที่ส่งไปยังเครื่องมือแพตช์ ค่าเริ่มต้นคือ -p0 แต่โดยปกติแล้วคุณจะต้องใส่ -p1 สำหรับแพตช์ที่ git สร้างขึ้น หากระบุอาร์กิวเมนต์ -p หลายรายการ อาร์กิวเมนต์สุดท้ายจะมีผล หากระบุอาร์กิวเมนต์อื่นที่ไม่ใช่ -p ไว้ Bazel จะเปลี่ยนไปใช้เครื่องมือบรรทัดคำสั่งการปะติดปะต่อแทนการใช้การปะติดปะต่อแบบดั้งเดิมของ Bazel เมื่อกลับไปใช้เครื่องมือบรรทัดคำสั่งแพตช์และไม่ได้ระบุแอตทริบิวต์ Patch_tool ระบบจะใช้ "patch" ซึ่งจะมีผลกับไฟล์แพตช์ในแอตทริบิวต์ "patches" เท่านั้น

patch_cmds รายการสตริง ไม่บังคับ

ลำดับคำสั่ง Bash ที่จะใช้ใน Linux/Macos หลังจากติดตั้งแพตช์แล้ว

patch_cmds_win รายการสตริง (ไม่บังคับ)

ลำดับคำสั่ง PowerShell ที่จะใช้ใน Windows หลังจากติดตั้งแพตช์แล้ว หากไม่ได้ตั้งค่าแอตทริบิวต์นี้ ระบบจะเรียกใช้ patch_cmds ใน Windows ซึ่งต้องมีไฟล์ Bash อยู่

patch_tool สตริง ไม่บังคับ

โปรแกรมแพตช์(1) ที่จะใช้ หากระบุค่านี้ Bazel จะใช้เครื่องมือแพตช์ที่ระบุแทนการใช้แพตช์แบบเนทีฟของ Bazel

patches รายการป้ายกำกับ (ไม่บังคับ)

รายการไฟล์ที่จะใช้เป็นแพตช์หลังจากแตกไฟล์เก็บถาวร โดยค่าเริ่มต้น ปลั๊กอินจะใช้การติดตั้งแพตช์ของ Bazel ซึ่งไม่รองรับการจับคู่ Fuzz Match และแพตช์ไบนารี แต่ Bazel จะกลับไปใช้เครื่องมือบรรทัดคำสั่งแพตช์หากมีการระบุแอตทริบิวต์ "patch_tool" หรือมีอาร์กิวเมนต์อื่นที่ไม่ใช่ "-p" ในแอตทริบิวต์ "patch_args"

remote_file_integrity Dictionary: String -> String ไม่บังคับ

การแมปเส้นทางแบบสัมพัทธ์ของไฟล์ (คีย์) กับค่าความสมบูรณ์ (ค่า) โดยเส้นทางแบบสัมพัทธ์เหล่านี้ควรแมปกับไฟล์ (คีย์) ในแอตทริบิวต์ "remote_file_urls"

remote_file_urls พจนานุกรม: สตริง -> รายการสตริง ไม่บังคับ

การแมปเส้นทางสัมพัทธ์ (คีย์) กับรายการ URL (ค่า) ที่จะดาวน์โหลดและทำให้พร้อมใช้งานเป็นไฟล์ที่วางซ้อนกันในที่เก็บ ซึ่งจะเป็นประโยชน์เมื่อคุณต้องการเพิ่มไฟล์ WORKSPACE หรือ BUILD.bazel บนที่เก็บที่มีอยู่ ระบบจะดาวน์โหลดไฟล์ก่อนที่จะใช้แพตช์ในแอตทริบิวต์ "patches" และรายการ URL ทั้งหมดควรเป็นมิเรอร์ของไฟล์เดียวกัน ระบบจะลองใช้ URL ตามลําดับจนกว่าจะพบ URL ที่ใช้งานได้

remote_patch_strip จำนวนเต็ม (ไม่บังคับ)

จํานวนเครื่องหมายทับที่อยู่หน้าชื่อไฟล์ที่จะนําออกจากชื่อไฟล์ในแพตช์ระยะไกล

remote_patches Dictionary: String -> String ไม่บังคับ

การแมป URL ของไฟล์แพตช์กับค่าความสมบูรณ์ ซึ่งจะใช้หลังจากแตกไฟล์เก็บถาวรและก่อนใช้ไฟล์แพตช์จากแอตทริบิวต์ "patches" โดยใช้การติดตั้งใช้งานแพตช์แบบเนทีฟของ Bazel คุณสามารถระบุหมายเลขแถบแพตช์ด้วย "remote_patch_strip"

repo_mapping Dictionary: String -> String ไม่บังคับ

ในบริบท `WORKSPACE` เท่านั้น: พจนานุกรมจากชื่อที่เก็บข้อมูลในเครื่องไปยังชื่อที่เก็บข้อมูลส่วนกลาง ซึ่งช่วยให้ควบคุมการแก้ไขข้อกำหนดของพื้นที่ทำงานสำหรับข้อกำหนดของที่เก็บข้อมูลนี้ได้ ตัวอย่างเช่น รายการ `"@foo": "@bar"` ประกาศว่าเมื่อใดก็ตามที่ที่เก็บข้อมูลนี้ใช้ "@foo" (เช่น ใช้ "@foo//some:target") ระบบควรแก้ไขการพึ่งพาดังกล่าวภายใน "@bar" ที่ประกาศไว้ทั่วโลก ("@bar//some:target") ระบบไม่รองรับแอตทริบิวต์นี้ในบริบท `MODULE.bazel` (เมื่อเรียกใช้กฎที่เก็บข้อมูลภายในฟังก์ชันการใช้งานของส่วนขยายโมดูล)

sha256 สตริง ไม่บังคับ

SHA-256 ที่คาดไว้ของไฟล์ที่ดาวน์โหลด ซึ่งต้องตรงกับ SHA-256 ของไฟล์ที่ดาวน์โหลด _การละเว้น SHA-256 เป็นความเสี่ยงด้านความปลอดภัยเนื่องจากไฟล์ระยะไกลอาจมีการเปลี่ยนแปลง_ ในกรณีที่ดีที่สุด การละเว้นช่องนี้จะทำให้บิลด์ของคุณไม่สมบูรณ์ คุณเลือกใช้แอตทริบิวต์นี้หรือไม่ก็ได้เพื่อให้การพัฒนาง่ายขึ้น แต่ควรตั้งค่าแอตทริบิวต์นี้หรือ "integrity" ก่อนเผยแพร่

strip_prefix สตริง ไม่บังคับ

คำนำหน้าไดเรกทอรีที่จะตัดออกจากไฟล์ที่แยก ที่เก็บถาวรจำนวนมากมีไดเรกทอรีระดับบนสุดที่มีไฟล์ที่มีประโยชน์ทั้งหมดในที่เก็บถาวร แทนที่จะต้องระบุคำนำหน้านี้ซ้ำแล้วซ้ำอีกใน "build_file" คุณสามารถใช้ช่องนี้เพื่อตัดส่วนดังกล่าวออกจากไฟล์ที่ดึงมาทั้งหมด ตัวอย่างเช่น สมมติว่าคุณใช้ `foo-lib-latest.zip` ซึ่งมีไดเรกทอรี `foo-lib-1.2.3/` ที่มีไฟล์ `WORKSPACE` และไดเรกทอรี `src/`, `lib/` และ `test/` ที่มีโค้ดจริงที่คุณต้องการสร้าง ระบุ `strip_prefix = "foo-lib-1.2.3"` เพื่อใช้ไดเรกทอรี "foo-lib-1.2.3" เป็นไดเรกทอรีระดับบนสุด โปรดทราบว่าหากมีไฟล์ที่อยู่นอกไดเรกทอรีนี้ ไฟล์ดังกล่าวจะถูกยกเลิกและไม่สามารถเข้าถึงได้ (เช่น ไฟล์ใบอนุญาตระดับบนสุด) ซึ่งรวมถึงไฟล์/ไดเรกทอรีที่เริ่มต้นด้วยคำนำหน้าแต่ไม่อยู่ในไดเรกทอรี (เช่น `foo-lib-1.2.3.release-notes`) หากคำนำหน้าที่คุณระบุไม่ตรงกับไดเรกทอรีในไฟล์เก็บถาวร Bazel จะแสดงข้อผิดพลาด

type สตริง ไม่บังคับ

ประเภทไฟล์เก็บถาวรของไฟล์ที่ดาวน์โหลด โดยค่าเริ่มต้น ระบบจะกำหนดประเภทไฟล์เก็บถาวรจากนามสกุลไฟล์ของ URL หากไฟล์ไม่มีนามสกุล คุณสามารถระบุอย่างชัดแจ้งได้ดังนี้ `"zip"`, `"jar"`, `"war"`, `"aar"`, `"tar"`, `"tar.gz"`, `"tgz"`, `"tar.xz"`, `"txz"`, `"tar.zst"`, `"tzst"`, `"tar.bz2"`, `"ar"`, หรือ `"deb"`

url สตริง ไม่บังคับ

URL ของไฟล์ที่จะทําให้ Bazel พร้อมใช้งาน ต้องเป็นไฟล์หรือ URL แบบ http หรือ https ติดตามการเปลี่ยนเส้นทาง ไม่รองรับการตรวจสอบสิทธิ์ คุณเพิ่มความยืดหยุ่นได้โดยใช้พารามิเตอร์ urls ที่อนุญาตให้ระบุ URL อื่นที่จะดึงข้อมูล

urls รายการสตริง (ไม่บังคับ)

รายการ URL ของไฟล์ที่จะทําให้ Bazel ใช้งานได้ แต่ละรายการต้องเป็นไฟล์หรือ URL ของ http หรือ https ติดตามการเปลี่ยนเส้นทาง ไม่รองรับการตรวจสอบสิทธิ์ ระบบจะลองใช้ URL ตามลำดับจนกว่าจะพบ URL ที่ใช้งานได้ คุณจึงควรระบุมิเรอร์ในเครื่องก่อน หากการดาวน์โหลดทั้งหมดไม่สำเร็จ กฎก็จะไม่สำเร็จ

workspace_file ป้ายกำกับ ไม่บังคับ

ไฟล์ที่จะใช้เป็นไฟล์ `WORKSPACE` สําหรับที่เก็บข้อมูลนี้ คุณสามารถระบุ "workspace_file" หรือ "workspace_file_content" อย่างใดอย่างหนึ่ง หรือจะระบุทั้ง 2 อย่างก็ได้

workspace_file_content สตริง ไม่บังคับ

เนื้อหาสำหรับไฟล์ WORKSPACE ของที่เก็บข้อมูลนี้ คุณสามารถระบุ "workspace_file" หรือ "workspace_file_content" อย่างใดอย่างหนึ่ง หรือจะระบุทั้ง 2 อย่างก็ได้

ตัวแปรสภาพแวดล้อม

กฎที่เก็บข้อมูลนี้ขึ้นอยู่กับตัวแปรสภาพแวดล้อมต่อไปนี้

  • BAZEL_HTTP_RULES_URLS_AS_DEFAULT_CANONICAL_ID

http_file

load("@bazel//tools/build_defs/repo:http.bzl", "http_file")

http_file(name, auth_patterns, canonical_id, downloaded_file_path, executable, integrity, netrc,
          repo_mapping, sha256, url, urls)

ดาวน์โหลดไฟล์จาก URL และทำให้ไฟล์พร้อมใช้งานเป็นกลุ่มไฟล์

ตัวอย่าง สมมติว่าคุณต้องมีพാക്കเกจ debian สําหรับกฎที่กําหนดเอง แพ็กเกจนี้รับได้จาก http://example.com/package.deb จากนั้นคุณสามารถเพิ่มลงในไฟล์ WORKSPACE ได้โดยทำดังนี้

  load("@bazel_tools//tools/build_defs/repo:http.bzl", "http_file")

  http_file(
      name = "my_deb",
      url = "http://example.com/package.deb",
      sha256 = "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
  )

เป้าหมายจะระบุ @my_deb//file เป็นส่วนที่ต้องพึ่งพาไฟล์นี้

แอตทริบิวต์

name ชื่อ ต้องระบุ

ชื่อที่ไม่ซ้ำกันสำหรับที่เก็บนี้

auth_patterns Dictionary: String -> String ไม่บังคับ

Dict ที่ไม่บังคับซึ่งจับคู่ชื่อโฮสต์กับรูปแบบการให้สิทธิ์ที่กำหนดเอง หากมีชื่อโฮสต์ของ URL ในพจนานุกรมนี้ ระบบจะใช้ค่าดังกล่าวเป็นรูปแบบเมื่อสร้างส่วนหัวการให้สิทธิ์สําหรับคําขอ HTTP ซึ่งจะช่วยให้ใช้รูปแบบการให้สิทธิ์ที่กำหนดเองได้ ซึ่งใช้ในผู้ให้บริการพื้นที่เก็บข้อมูลระบบคลาวด์ทั่วไปจำนวนมาก ปัจจุบันรูปแบบรองรับโทเค็น 2 รายการ ได้แก่ <login> และ <password> ซึ่งระบบจะแทนที่ด้วยค่าที่เทียบเท่าในไฟล์ netrc สำหรับชื่อโฮสต์เดียวกัน หลังจากจัดรูปแบบแล้ว ระบบจะตั้งค่าผลลัพธ์เป็นค่าสำหรับฟิลด์ Authorization ของคำขอ HTTP ตัวอย่างแอตทริบิวต์และ netrc สำหรับการดาวน์โหลด http ไปยัง API ที่เปิดใช้ oauth2 โดยใช้โทเค็นของผู้ถือครอง

auth_patterns = {
    "storage.cloudprovider.com": "Bearer <password>"
}
netrc:
machine storage.cloudprovider.com
        password RANDOM-TOKEN
คำขอ HTTP สุดท้ายจะมีส่วนหัวดังต่อไปนี้
Authorization: Bearer RANDOM-TOKEN

canonical_id สตริง ไม่บังคับ

รหัสแคนอนนิกของไฟล์ที่ดาวน์โหลด หากระบุและไม่ได้ว่างเปล่า Bazel จะไม่นำไฟล์จากแคช เว้นแต่จะมีการเพิ่มไฟล์ลงในแคชโดยคำขอที่มีรหัส Canonical เดียวกัน หากไม่ได้ระบุหรือว่างเปล่า Bazel จะใช้ URL ของไฟล์เป็นรหัสแคนนอนิกโดยค่าเริ่มต้น วิธีนี้จะช่วยจับข้อผิดพลาดที่พบบ่อยในการอัปเดต URL โดยไม่อัปเดตแฮชด้วย ซึ่งส่งผลให้บิลด์สําเร็จในเครื่อง แต่ล้มเหลวในเครื่องที่ไม่มีไฟล์ในแคช คุณปิดใช้ลักษณะการทำงานนี้ได้โดยใช้ตัวเลือก --repo_env=BAZEL_HTTP_RULES_URLS_AS_DEFAULT_CANONICAL_ID=0

downloaded_file_path สตริง ไม่บังคับ

เส้นทางที่กำหนดให้กับไฟล์ที่ดาวน์โหลด

executable บูลีน ไม่บังคับ

ไฟล์ที่ดาวน์โหลดมาควรเป็นไฟล์ปฏิบัติการหรือไม่

integrity สตริง ไม่บังคับ

Checksum ที่คาดไว้ในรูปแบบความสมบูรณ์ของเนื้อหาย่อยของไฟล์ที่ดาวน์โหลด ซึ่งต้องตรงกับ checksum ของไฟล์ที่ดาวน์โหลด _การละเว้นการตรวจสอบผลรวมเป็นความเสี่ยงด้านความปลอดภัย เนื่องจากไฟล์ระยะไกลอาจมีการเปลี่ยนแปลง_ ในกรณีที่ดีที่สุด การละเว้นช่องนี้จะทำให้บิลด์ของคุณไม่สมบูรณ์ ไม่จำเป็นต้องทำให้การพัฒนาง่ายขึ้น แต่ควรตั้งค่าแอตทริบิวต์นี้หรือ "sha256" ก่อนจัดส่ง

netrc สตริง ไม่บังคับ

ตำแหน่งของไฟล์ .netrc ที่จะใช้สำหรับการตรวจสอบสิทธิ์

repo_mapping Dictionary: String -> String ไม่บังคับ

ในบริบท `WORKSPACE` เท่านั้น: พจนานุกรมจากชื่อที่เก็บข้อมูลในเครื่องไปยังชื่อที่เก็บข้อมูลส่วนกลาง ซึ่งช่วยให้ควบคุมการแก้ไขข้อกำหนดของพื้นที่ทำงานสำหรับข้อกำหนดของที่เก็บข้อมูลนี้ได้ เช่น รายการ "@foo": "@bar"` จะประกาศว่าทุกครั้งที่ที่เก็บนี้ขึ้นอยู่กับ "@foo" (เช่น ทรัพยากร Dependency ของ "@foo//some:target" ควรแก้ไขการพึ่งพาดังกล่าวใน "@bar" ที่ประกาศทั่วโลก ("@bar//some:target" ทุกครั้ง แอตทริบิวต์นี้รองรับส่วนขยาย "MODULE.baze" ในฟังก์ชัน "MODULE.baze)

sha256 สตริง ไม่บังคับ

SHA-256 ที่คาดไว้ของไฟล์ที่ดาวน์โหลด ซึ่งต้องตรงกับ SHA-256 ของไฟล์ที่ดาวน์โหลด _การละเว้น SHA-256 เป็นความเสี่ยงด้านความปลอดภัย เนื่องจากไฟล์ระยะไกลอาจเปลี่ยนแปลงได้_ การละเว้นฟิลด์นี้จะทำให้บิลด์ของคุณไม่ทำงาน การตั้งค่านี้ไม่บังคับ แต่จะช่วยให้การพัฒนาง่ายขึ้นและควรตั้งค่าก่อนการเผยแพร่

url สตริง ไม่บังคับ

URL ของไฟล์ที่จะทําให้ Bazel พร้อมใช้งาน ต้องเป็นไฟล์หรือ URL แบบ http หรือ https ติดตามการเปลี่ยนเส้นทาง ไม่รองรับการตรวจสอบสิทธิ์ คุณเพิ่มความยืดหยุ่นได้โดยใช้พารามิเตอร์ urls ที่อนุญาตให้ระบุ URL อื่นที่จะดึงข้อมูล

urls รายการสตริง (ไม่บังคับ)

รายการ URL ของไฟล์ที่จะทําให้ Bazel ใช้งานได้ แต่ละรายการต้องเป็น URL ของไฟล์, http หรือ https ติดตามการเปลี่ยนเส้นทาง ไม่รองรับการตรวจสอบสิทธิ์ ระบบจะลองใช้ URL ตามลำดับจนกว่าจะพบ URL ที่ใช้งานได้ คุณจึงควรระบุมิเรอร์ในเครื่องก่อน หากการดาวน์โหลดทั้งหมดไม่สำเร็จ กฎก็จะไม่สำเร็จ

ตัวแปรด้านสิ่งแวดล้อม

กฎที่เก็บข้อมูลนี้ขึ้นอยู่กับตัวแปรสภาพแวดล้อมต่อไปนี้

  • BAZEL_HTTP_RULES_URLS_AS_DEFAULT_CANONICAL_ID

http_jar

load("@bazel//tools/build_defs/repo:http.bzl", "http_jar")

http_jar(name, auth_patterns, canonical_id, downloaded_file_name, integrity, netrc, repo_mapping,
         sha256, url, urls)

ดาวน์โหลดไฟล์ jar จาก URL และทำให้พร้อมใช้งานเป็น java_import

ไฟล์ที่ดาวน์โหลดต้องมีนามสกุล .jar

ตัวอย่าง: สมมติว่าที่เก็บปัจจุบันมีซอร์สโค้ดของโปรแกรมแชทที่รูทอยู่ที่ไดเรกทอรี ~/chat-app โดยต้องอาศัยไลบรารี SSL ซึ่งมีอยู่ใน http://example.com/openssl-0.2.jar

เป้าหมายในที่เก็บข้อมูล ~/chat-app จะขึ้นอยู่กับเป้าหมายนี้หากมีการเพิ่มบรรทัดต่อไปนี้ลงใน ~/chat-app/WORKSPACE

  load("@bazel_tools//tools/build_defs/repo:http.bzl", "http_jar")

  http_jar(
      name = "my_ssl",
      url = "http://example.com/openssl-0.2.jar",
      sha256 = "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
  )

เป้าหมายจะระบุ @my_ssl//jar เป็นการพึ่งพาเพื่อใช้ Jar นี้

นอกจากนี้ คุณยังอ้างอิงไฟล์ในระบบปัจจุบัน (localhost) โดยใช้ "file:///path/to/file" ได้หากใช้ระบบที่ใช้ Unix หากใช้ Windows ให้ใช้ "file:///c:/path/to/file" ในตัวอย่างนี้ทั้ง 2 ตัวอย่าง โปรดสังเกตเครื่องหมายทับ 3 ตัว (/) โดยเครื่องหมายทับ 2 ตัวแรกเป็นของ file:// และเครื่องหมายทับตัวที่ 3 เป็นของเส้นทางแบบสัมบูรณ์ไปยังไฟล์

แอตทริบิวต์

name ชื่อ ต้องระบุ

ชื่อที่ไม่ซ้ำกันสำหรับที่เก็บนี้

auth_patterns Dictionary: String -> String ไม่บังคับ

Dict ที่ไม่บังคับซึ่งจับคู่ชื่อโฮสต์กับรูปแบบการให้สิทธิ์ที่กำหนดเอง หากมีชื่อโฮสต์ของ URL ในพจนานุกรมนี้ ระบบจะใช้ค่าดังกล่าวเป็นรูปแบบเมื่อสร้างส่วนหัวการให้สิทธิ์สําหรับคําขอ HTTP ซึ่งจะช่วยให้ใช้รูปแบบการให้สิทธิ์ที่กำหนดเองได้ ซึ่งใช้ในผู้ให้บริการพื้นที่เก็บข้อมูลระบบคลาวด์ทั่วไปจำนวนมาก รูปแบบปัจจุบันรองรับโทเค็น 2 รายการ ได้แก่ <login> และ <password> ซึ่งแทนที่ด้วยค่าที่เทียบเท่าในไฟล์ netrc สำหรับชื่อโฮสต์เดียวกัน หลังจากจัดรูปแบบแล้ว ระบบจะตั้งค่าผลลัพธ์เป็นค่าสำหรับฟิลด์ Authorization ของคำขอ HTTP ตัวอย่างแอตทริบิวต์และ netrc สำหรับการดาวน์โหลด http ไปยัง API ที่เปิดใช้ oauth2 โดยใช้โทเค็นของผู้ถือครอง

auth_patterns = {
    "storage.cloudprovider.com": "Bearer <password>"
}
netrc:
machine storage.cloudprovider.com
        password RANDOM-TOKEN
คําขอ HTTP สุดท้ายจะมีส่วนหัวดังต่อไปนี้
Authorization: Bearer RANDOM-TOKEN

canonical_id สตริง ไม่บังคับ

รหัสแคนอนนิกของไฟล์ที่ดาวน์โหลด หากระบุและไม่ได้ว่างเปล่า Bazel จะไม่นำไฟล์จากแคช เว้นแต่จะมีการเพิ่มไฟล์ลงในแคชโดยคำขอที่มีรหัส Canonical เดียวกัน หากไม่ได้ระบุหรือว่างเปล่า Bazel จะใช้ URL ของไฟล์เป็นรหัสแคนนอนิกโดยค่าเริ่มต้น วิธีนี้จะช่วยจับข้อผิดพลาดที่พบบ่อยในการอัปเดต URL โดยไม่อัปเดตแฮชด้วย ซึ่งส่งผลให้บิลด์สําเร็จในเครื่อง แต่ล้มเหลวในเครื่องที่ไม่มีไฟล์ในแคช คุณปิดใช้ลักษณะการทำงานนี้ได้โดยใช้ตัวเลือก --repo_env=BAZEL_HTTP_RULES_URLS_AS_DEFAULT_CANONICAL_ID=0

downloaded_file_name สตริง ไม่บังคับ

ชื่อไฟล์ที่กำหนดให้กับ Jar ที่ดาวน์โหลด

integrity สตริง ไม่บังคับ

Checksum ที่คาดไว้ในรูปแบบความสมบูรณ์ของเนื้อหาย่อยของไฟล์ที่ดาวน์โหลด ซึ่งต้องตรงกับ checksum ของไฟล์ที่ดาวน์โหลด _การละเว้นการตรวจสอบผลรวมเป็นความเสี่ยงด้านความปลอดภัย เนื่องจากไฟล์ระยะไกลอาจมีการเปลี่ยนแปลง_ ในกรณีที่ดีที่สุด การละเว้นช่องนี้จะทำให้บิลด์ของคุณไม่สมบูรณ์ ไม่จำเป็นต้องทำให้การพัฒนาง่ายขึ้น แต่ควรตั้งค่าแอตทริบิวต์นี้หรือ "sha256" ก่อนจัดส่ง

netrc สตริง ไม่บังคับ

ตำแหน่งของไฟล์ .netrc ที่จะใช้สำหรับการตรวจสอบสิทธิ์

repo_mapping Dictionary: String -> String ไม่บังคับ

ในบริบท `WORKSPACE` เท่านั้น: พจนานุกรมจากชื่อที่เก็บข้อมูลในเครื่องไปยังชื่อที่เก็บข้อมูลส่วนกลาง ซึ่งช่วยให้ควบคุมการแก้ไขข้อกำหนดของพื้นที่ทำงานสำหรับข้อกำหนดของที่เก็บข้อมูลนี้ได้ ตัวอย่างเช่น รายการ `"@foo": "@bar"` ประกาศว่าเมื่อใดก็ตามที่ที่เก็บข้อมูลนี้ใช้@foo (เช่น ใช้@foo//some:target) ระบบควรแก้ไขการอ้างอิงนั้นภายใน@bar ที่ประกาศไว้ทั่วโลก นั่นคือ@bar//some:target) ระบบไม่รองรับแอตทริบิวต์นี้ในบริบท `MODULE.bazel` (เมื่อเรียกใช้กฎที่เก็บข้อมูลภายในฟังก์ชันการใช้งานของส่วนขยายโมดูล)

sha256 สตริง ไม่บังคับ

SHA-256 ที่คาดไว้ของไฟล์ที่ดาวน์โหลด ซึ่งต้องตรงกับ SHA-256 ของไฟล์ที่ดาวน์โหลด _การละเว้น SHA-256 เป็นความเสี่ยงด้านความปลอดภัยเนื่องจากไฟล์ระยะไกลอาจมีการเปลี่ยนแปลง_ ในกรณีที่ดีที่สุด การละเว้นช่องนี้จะทำให้บิลด์ของคุณไม่สมบูรณ์ คุณเลือกใช้แอตทริบิวต์นี้หรือไม่ก็ได้เพื่อให้การพัฒนาง่ายขึ้น แต่ควรตั้งค่าแอตทริบิวต์นี้หรือ "integrity" ก่อนเผยแพร่

url สตริง ไม่บังคับ

URL ของไฟล์ที่จะทําให้ Bazel พร้อมใช้งาน ต้องเป็นไฟล์หรือ URL แบบ http หรือ https ติดตามการเปลี่ยนเส้นทาง ไม่รองรับการตรวจสอบสิทธิ์ คุณเพิ่มความยืดหยุ่นได้โดยใช้พารามิเตอร์ urls ที่อนุญาตให้ระบุ URL อื่นที่จะดึงข้อมูล URL ต้องลงท้ายด้วย ".jar"

urls รายการสตริง ไม่บังคับ

รายการ URL ของไฟล์ที่จะทําให้ Bazel ใช้งานได้ แต่ละรายการต้องเป็น URL ของไฟล์, http หรือ https มีการเปลี่ยนเส้นทาง ไม่รองรับการตรวจสอบสิทธิ์ ระบบจะลองใช้ URL ตามลำดับจนกว่าจะพบ URL ที่ใช้งานได้ คุณจึงควรระบุมิเรอร์ในเครื่องก่อน หากการดาวน์โหลดทั้งหมดไม่สำเร็จ กฎก็จะไม่สำเร็จ URL ทั้งหมดต้องลงท้ายด้วย ".jar"

ตัวแปรสภาพแวดล้อม

กฎที่เก็บข้อมูลนี้ขึ้นอยู่กับตัวแปรสภาพแวดล้อมต่อไปนี้

  • BAZEL_HTTP_RULES_URLS_AS_DEFAULT_CANONICAL_ID