คุณโหลดฟังก์ชันต่อไปนี้ได้จาก
@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)
หรือจะเรียกกฎของที่เก็บเหล่านี้ในไฟล์ 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_strip, patch_tool, patches, remote_file_integrity, remote_file_urls, remote_module_file_integrity, remote_module_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
เป็นการอ้างอิง
แอตทริบิวต์
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 |
พจนานุกรม: สตริง -> สตริง; ไม่บังคับ
การแมปพจนานุกรมที่ไม่บังคับชื่อโฮสต์กับรูปแบบการให้สิทธิ์ที่กำหนดเอง
หากมีชื่อโฮสต์ของ URL ในพจนานุกรมนี้ ระบบจะใช้ค่าดังกล่าวเป็นรูปแบบเมื่อ
สร้างส่วนหัวการให้สิทธิ์สำหรับคำขอ HTTP ซึ่งจะช่วยให้ใช้รูปแบบการให้สิทธิ์ที่กำหนดเองซึ่งใช้ในผู้ให้บริการพื้นที่เก็บข้อมูลระบบคลาวด์ทั่วไปจำนวนมากได้
ปัจจุบันรูปแบบรองรับโทเค็น 2 รายการ ได้แก่ auth_patterns = { "storage.cloudprovider.com": "Bearer <password>" } machine storage.cloudprovider.com password RANDOM-TOKEN 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 |
สตริง ไม่บังคับ
รหัส Canonical ของไฟล์ที่ดาวน์โหลด หากระบุและไม่ว่างเปล่า Bazel จะไม่นำไฟล์จากแคช เว้นแต่จะมีการเพิ่มไฟล์ลงในแคชโดยคำขอที่มีรหัส Canonical เดียวกัน หากไม่ได้ระบุหรือว่างเปล่า Bazel จะใช้ URL ของไฟล์เป็นรหัสที่แน่นอนโดยค่าเริ่มต้น ซึ่งจะช่วยตรวจจับข้อผิดพลาดทั่วไปในการอัปเดต URL โดยไม่ อัปเดตแฮชด้วย ทำให้การสร้างสำเร็จในเครื่อง แต่ล้มเหลวใน เครื่องที่ไม่มีไฟล์ในแคช ปิดใช้ลักษณะการทำงานนี้ได้ด้วย --repo_env=BAZEL_HTTP_RULES_URLS_AS_DEFAULT_CANONICAL_ID=0 |
integrity |
สตริง ไม่บังคับ
ผลรวมตรวจสอบที่คาดไว้ในรูปแบบความสมบูรณ์ของทรัพยากรย่อยของไฟล์ที่ดาวน์โหลด ต้องตรงกับผลรวมตรวจสอบของไฟล์ที่ดาวน์โหลด _การละเว้น checksum เป็นความเสี่ยงด้านความปลอดภัย เนื่องจากไฟล์ระยะไกลอาจเปลี่ยนแปลงได้_ การละเว้นฟิลด์นี้จะทำให้บิลด์ของคุณไม่เป็นแบบเฮอร์มิติก คุณจะระบุหรือไม่ก็ได้เพื่อให้การพัฒนา ง่ายขึ้น แต่ควรตั้งค่าแอตทริบิวต์นี้หรือ `sha256` ก่อนจัดส่ง |
netrc |
สตริง ไม่บังคับ
ตำแหน่งของไฟล์ .netrc ที่ใช้สำหรับการตรวจสอบสิทธิ์ |
patch_args |
รายการสตริง ไม่บังคับ
อาร์กิวเมนต์ที่ส่งไปยังเครื่องมือแพตช์ ค่าเริ่มต้นคือ -p0 (ดูแอตทริบิวต์ `patch_strip`) แต่โดยปกติแล้วจะต้องใช้ -p1 สำหรับแพตช์ที่สร้างโดย Git หากระบุอาร์กิวเมนต์ -p หลายรายการ อาร์กิวเมนต์สุดท้ายจะมีผล หากระบุอาร์กิวเมนต์อื่นที่ไม่ใช่ -p Bazel จะกลับไปใช้เครื่องมือบรรทัดคำสั่ง patch แทนการติดตั้งใช้งานแพตช์แบบเนทีฟของ Bazel เมื่อเปลี่ยนไปใช้เครื่องมือบรรทัดคำสั่ง patch และไม่ได้ระบุแอตทริบิวต์ patch_tool ระบบจะใช้ `patch` การดำเนินการนี้จะมีผลกับไฟล์แพตช์ในแอตทริบิวต์ `patches` เท่านั้น |
patch_cmds |
รายการสตริง ไม่บังคับ
ลำดับคำสั่ง Bash ที่จะใช้ใน Linux/Macos หลังจากใช้แพตช์แล้ว |
patch_cmds_win |
รายการสตริง ไม่บังคับ
ลำดับคำสั่ง PowerShell ที่จะใช้ใน Windows หลังจากใช้แพตช์ หากไม่ได้ตั้งค่าแอตทริบิวต์นี้ ระบบจะเรียกใช้ patch_cmds ใน Windows ซึ่งต้องมีไบนารี Bash |
patch_strip |
จำนวนเต็ม ไม่บังคับ
เมื่อตั้งค่าเป็น `N` จะเทียบเท่ากับการแทรก `-pN` ที่จุดเริ่มต้นของ `patch_args` |
patch_tool |
สตริง ไม่บังคับ
ยูทิลิตี patch(1) ที่จะใช้ หากมีการระบุ Bazel จะใช้เครื่องมือแก้ไขที่ระบุแทนการติดตั้งใช้งานแพตช์ดั้งเดิมของ Bazel |
patches |
รายการป้ายกำกับ (ไม่บังคับ)
รายการไฟล์ที่จะใช้เป็นแพตช์หลังจากแตกไฟล์ที่เก็บถาวร โดยค่าเริ่มต้น ระบบจะใช้การติดตั้งใช้งานแพตช์ดั้งเดิมของ Bazel ซึ่งไม่รองรับการจับคู่แบบคลุมเครือและแพตช์ไบนารี แต่ Bazel จะกลับไปใช้เครื่องมือบรรทัดคำสั่ง patch หากมีการระบุแอตทริบิวต์ `patch_tool` หรือมีอาร์กิวเมนต์อื่นนอกเหนือจาก `-p` ในแอตทริบิวต์ `patch_args` |
remote_file_integrity |
พจนานุกรม: สตริง -> สตริง; ไม่บังคับ
แผนที่เส้นทางแบบสัมพัทธ์ของไฟล์ (คีย์) ไปยังค่าความสมบูรณ์ (ค่า) เส้นทางแบบสัมพัทธ์เหล่านี้ควรแมปกับไฟล์ (คีย์) ในแอตทริบิวต์ `remote_file_urls` |
remote_file_urls |
พจนานุกรม: สตริง -> รายการสตริง; ไม่บังคับ
แผนที่ของเส้นทางสัมพัทธ์ (คีย์) ไปยังรายการ URL (ค่า) ที่จะดาวน์โหลดและทำให้พร้อมใช้งานเป็นไฟล์ที่ซ้อนทับในที่เก็บ ซึ่งจะมีประโยชน์เมื่อคุณต้องการเพิ่มไฟล์ WORKSPACE หรือ BUILD.bazel ที่ด้านบนของที่เก็บที่มีอยู่ ระบบจะดาวน์โหลดไฟล์ก่อนที่จะใช้แพตช์ในแอตทริบิวต์ `patches` และรายการ URL ทั้งหมดควรเป็นมิเรอร์ที่เป็นไปได้ของไฟล์เดียวกัน ระบบจะลองใช้ URL ตามลำดับจนกว่าจะสำเร็จ |
remote_module_file_integrity |
สตริง ไม่บังคับ
ใช้ภายในเท่านั้น |
remote_module_file_urls |
รายการสตริง ไม่บังคับ
ใช้ภายในเท่านั้น |
remote_patch_strip |
จำนวนเต็ม ไม่บังคับ
จำนวนเครื่องหมายทับนำหน้าที่จะนำออกจากชื่อไฟล์ในแพตช์ระยะไกล |
remote_patches |
พจนานุกรม: สตริง -> สตริง; ไม่บังคับ
แผนที่ของ URL ไฟล์แพตช์ไปยังค่าความสมบูรณ์ของไฟล์นั้น โดยจะใช้หลังจากแยกไฟล์เก็บถาวรและก่อนใช้ไฟล์แพตช์จากแอตทริบิวต์ `patches` โดยจะใช้การติดตั้งใช้งานแพตช์ดั้งเดิมของ Bazel คุณสามารถระบุหมายเลขการลบแพตช์ด้วย `remote_patch_strip` |
repo_mapping |
พจนานุกรม: สตริง -> สตริง; ไม่บังคับ
ในบริบท `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 แต่ละรายการต้องเป็นไฟล์, http หรือ https URL ติดตามการเปลี่ยนเส้นทาง ไม่รองรับการตรวจสอบสิทธิ์ ระบบจะลองใช้ URL ตามลำดับจนกว่าจะสำเร็จ ดังนั้นคุณควรแสดงรายการมิเรอร์ในพื้นที่ก่อน หากดาวน์โหลดทั้งหมดไม่สำเร็จ กฎจะไม่ทำงาน |
workspace_file |
ป้ายกำกับ (ไม่บังคับ)
แอตทริบิวต์ที่ไม่มีการดำเนินการใดๆ ห้ามใช้ |
workspace_file_content |
สตริง ไม่บังคับ
แอตทริบิวต์ที่ไม่มีการดำเนินการใดๆ ห้ามใช้ |
ตัวแปรสภาพแวดล้อม
กฎของที่เก็บนี้ขึ้นอยู่กับตัวแปรสภาพแวดล้อมต่อไปนี้
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 |
พจนานุกรม: สตริง -> สตริง; ไม่บังคับ
การแมปพจนานุกรมที่ไม่บังคับชื่อโฮสต์กับรูปแบบการให้สิทธิ์ที่กำหนดเอง
หากมีชื่อโฮสต์ของ URL ในพจนานุกรมนี้ ระบบจะใช้ค่าดังกล่าวเป็นรูปแบบเมื่อ
สร้างส่วนหัวการให้สิทธิ์สำหรับคำขอ HTTP ซึ่งจะช่วยให้ใช้รูปแบบการให้สิทธิ์ที่กำหนดเองซึ่งใช้ในผู้ให้บริการพื้นที่เก็บข้อมูลระบบคลาวด์ทั่วไปจำนวนมากได้
ปัจจุบันรูปแบบรองรับโทเค็น 2 รายการ ได้แก่ auth_patterns = { "storage.cloudprovider.com": "Bearer <password>" } machine storage.cloudprovider.com password RANDOM-TOKEN Authorization: Bearer RANDOM-TOKEN |
canonical_id |
สตริง ไม่บังคับ
รหัส Canonical ของไฟล์ที่ดาวน์โหลด หากระบุและไม่ว่างเปล่า Bazel จะไม่นำไฟล์จากแคช เว้นแต่จะมีการเพิ่มไฟล์ลงในแคชโดยคำขอที่มีรหัส Canonical เดียวกัน หากไม่ได้ระบุหรือว่างเปล่า Bazel จะใช้ URL ของไฟล์เป็นรหัสที่แน่นอนโดยค่าเริ่มต้น ซึ่งจะช่วยตรวจจับข้อผิดพลาดทั่วไปในการอัปเดต URL โดยไม่ อัปเดตแฮชด้วย ทำให้การสร้างสำเร็จในเครื่อง แต่ล้มเหลวใน เครื่องที่ไม่มีไฟล์ในแคช ปิดใช้ลักษณะการทำงานนี้ได้ด้วย --repo_env=BAZEL_HTTP_RULES_URLS_AS_DEFAULT_CANONICAL_ID=0 |
downloaded_file_path |
สตริง ไม่บังคับ
เส้นทางที่กำหนดให้กับไฟล์ที่ดาวน์โหลด |
executable |
บูลีน ไม่บังคับ
หากควรทำให้ไฟล์ที่ดาวน์โหลดสามารถเรียกใช้งานได้ |
integrity |
สตริง ไม่บังคับ
ผลรวมตรวจสอบที่คาดไว้ในรูปแบบความสมบูรณ์ของทรัพยากรย่อยของไฟล์ที่ดาวน์โหลด ต้องตรงกับผลรวมตรวจสอบของไฟล์ที่ดาวน์โหลด _การละเว้น checksum เป็นความเสี่ยงด้านความปลอดภัย เนื่องจากไฟล์ระยะไกลอาจเปลี่ยนแปลงได้_ การละเว้นฟิลด์นี้จะทำให้บิลด์ของคุณไม่เป็นแบบเฮอร์มิติก คุณจะระบุหรือไม่ก็ได้เพื่อให้การพัฒนา ง่ายขึ้น แต่ควรตั้งค่าแอตทริบิวต์นี้หรือ `sha256` ก่อนจัดส่ง |
netrc |
สตริง ไม่บังคับ
ตำแหน่งของไฟล์ .netrc ที่ใช้สำหรับการตรวจสอบสิทธิ์ |
repo_mapping |
พจนานุกรม: สตริง -> สตริง; ไม่บังคับ
ในบริบท `WORKSPACE` เท่านั้น: พจนานุกรมจากชื่อที่เก็บในเครื่องไปยังชื่อที่เก็บส่วนกลาง ซึ่งจะช่วยให้ควบคุมการแก้ปัญหาการขึ้นต่อกันของเวิร์กสเปซสำหรับการขึ้นต่อกันของที่เก็บนี้ได้ ตัวอย่างเช่น รายการ `"@foo": "@bar"` จะประกาศว่าเมื่อใดก็ตามที่ที่เก็บนี้ขึ้นอยู่กับ `@foo` (เช่น การขึ้นอยู่กับ `@foo//some:target`) ที่เก็บนี้ควรแก้ปัญหาการขึ้นอยู่ดังกล่าวภายใน `@bar` ที่ประกาศทั่วโลก (`@bar//some:target`) ระบบ _ไม่_ รองรับแอตทริบิวต์นี้ในบริบท `MODULE.bazel` (เมื่อเรียกใช้กฎที่เก็บภายในฟังก์ชันการใช้งานของส่วนขยายโมดูล) |
sha256 |
สตริง ไม่บังคับ
SHA-256 ที่คาดไว้ของไฟล์ที่ดาวน์โหลด ซึ่งต้องตรงกับ SHA-256 ของไฟล์ที่ดาวน์โหลด _การละเว้น SHA-256 เป็นความเสี่ยงด้านความปลอดภัย เนื่องจากไฟล์ระยะไกลอาจเปลี่ยนแปลงได้_ การละเว้นฟิลด์นี้จะทำให้บิลด์ของคุณไม่เป็นแบบเฮอร์มิติก ไม่บังคับ แต่ควรตั้งค่าก่อนจัดส่งเพื่อให้การพัฒนา ง่ายขึ้น |
url |
สตริง ไม่บังคับ
URL ของไฟล์ที่จะพร้อมใช้งานใน Bazel ต้องเป็นไฟล์, URL แบบ http หรือ https ติดตามการเปลี่ยนเส้นทาง ไม่รองรับการตรวจสอบสิทธิ์ คุณสามารถเพิ่มความยืดหยุ่นได้โดยใช้พารามิเตอร์ urls ซึ่งช่วยให้ ระบุ URL อื่นที่จะดึงข้อมูลได้ |
urls |
รายการสตริง ไม่บังคับ
รายการ URL ไปยังไฟล์ที่จะพร้อมใช้งานใน Bazel แต่ละรายการต้องเป็นไฟล์, 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 |
พจนานุกรม: สตริง -> สตริง; ไม่บังคับ
การแมปพจนานุกรมที่ไม่บังคับชื่อโฮสต์กับรูปแบบการให้สิทธิ์ที่กำหนดเอง
หากมีชื่อโฮสต์ของ URL ในพจนานุกรมนี้ ระบบจะใช้ค่าดังกล่าวเป็นรูปแบบเมื่อ
สร้างส่วนหัวการให้สิทธิ์สำหรับคำขอ HTTP ซึ่งจะช่วยให้ใช้รูปแบบการให้สิทธิ์ที่กำหนดเองซึ่งใช้ในผู้ให้บริการพื้นที่เก็บข้อมูลระบบคลาวด์ทั่วไปจำนวนมากได้
ปัจจุบันรูปแบบรองรับโทเค็น 2 รายการ ได้แก่ auth_patterns = { "storage.cloudprovider.com": "Bearer <password>" } machine storage.cloudprovider.com password RANDOM-TOKEN Authorization: Bearer RANDOM-TOKEN |
canonical_id |
สตริง ไม่บังคับ
รหัส Canonical ของไฟล์ที่ดาวน์โหลด หากระบุและไม่ว่างเปล่า Bazel จะไม่นำไฟล์จากแคช เว้นแต่จะมีการเพิ่มไฟล์ลงในแคชโดยคำขอที่มีรหัส Canonical เดียวกัน หากไม่ได้ระบุหรือว่างเปล่า Bazel จะใช้ URL ของไฟล์เป็นรหัสที่แน่นอนโดยค่าเริ่มต้น ซึ่งจะช่วยตรวจจับข้อผิดพลาดทั่วไปในการอัปเดต URL โดยไม่ อัปเดตแฮชด้วย ทำให้การสร้างสำเร็จในเครื่อง แต่ล้มเหลวใน เครื่องที่ไม่มีไฟล์ในแคช ปิดใช้ลักษณะการทำงานนี้ได้ด้วย --repo_env=BAZEL_HTTP_RULES_URLS_AS_DEFAULT_CANONICAL_ID=0 |
downloaded_file_name |
สตริง ไม่บังคับ
ชื่อไฟล์ที่กำหนดให้กับไฟล์ JAR ที่ดาวน์โหลด |
integrity |
สตริง ไม่บังคับ
ผลรวมตรวจสอบที่คาดไว้ในรูปแบบความสมบูรณ์ของทรัพยากรย่อยของไฟล์ที่ดาวน์โหลด ต้องตรงกับผลรวมตรวจสอบของไฟล์ที่ดาวน์โหลด _การละเว้น checksum เป็นความเสี่ยงด้านความปลอดภัย เนื่องจากไฟล์ระยะไกลอาจเปลี่ยนแปลงได้_ การละเว้นฟิลด์นี้จะทำให้บิลด์ของคุณไม่เป็นแบบเฮอร์มิติก คุณจะระบุหรือไม่ก็ได้เพื่อให้การพัฒนา ง่ายขึ้น แต่ควรตั้งค่าแอตทริบิวต์นี้หรือ `sha256` ก่อนจัดส่ง |
netrc |
สตริง ไม่บังคับ
ตำแหน่งของไฟล์ .netrc ที่ใช้สำหรับการตรวจสอบสิทธิ์ |
repo_mapping |
พจนานุกรม: สตริง -> สตริง; ไม่บังคับ
ในบริบท `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 แต่ละรายการต้องเป็นไฟล์, http หรือ https URL ติดตามการเปลี่ยนเส้นทาง ไม่รองรับการตรวจสอบสิทธิ์ ระบบจะลองใช้ URL ตามลำดับจนกว่าจะสำเร็จ ดังนั้นคุณควรแสดงรายการมิเรอร์ในพื้นที่ก่อน หากดาวน์โหลดทั้งหมดไม่สำเร็จ กฎจะไม่ทำงาน URL ทั้งหมดต้องลงท้ายด้วย `.jar` |
ตัวแปรสภาพแวดล้อม
กฎของที่เก็บนี้ขึ้นอยู่กับตัวแปรสภาพแวดล้อมต่อไปนี้
BAZEL_HTTP_RULES_URLS_AS_DEFAULT_CANONICAL_ID