คุณโหลดฟังก์ชันต่อไปนี้ได้จาก
@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, files,
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, sha256, strip_components,
strip_prefix, type, url, urls, workspace_file, workspace_file_content)
ดาวน์โหลดที่เก็บ Bazel เป็นไฟล์เก็บถาวรที่บีบอัดแล้ว คลายการบีบอัด และทำให้เป้าหมายพร้อมใช้งานสำหรับการเชื่อมโยง
โดยรองรับนามสกุลไฟล์ต่อไปนี้ "zip", "jar", "war", "aar", "nupkg", "whl", "tar", "tar.gz", "tgz", "gz", "tar.xz", "txz", "xz", "tar.zst", "tzst", "zst", "tar.bz2", "tbz", "bz2", "ar", "deb" หรือ "7z"
ตัวอย่าง
สมมติว่าที่เก็บปัจจุบันมีซอร์สโค้ดสำหรับโปรแกรมแชท
ซึ่งอยู่ในไดเรกทอรี ~/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 |
String; ไม่บังคับ
ไดเรกทอรีปลายทางที่สัมพันธ์กับไดเรกทอรีที่เก็บ ระบบจะคลายการบีบอัดที่เก็บถาวรลงในไดเรกทอรีนี้หลังจากใช้ `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 |
String; ไม่บังคับ
เนื้อหาสำหรับไฟล์ BUILD ของที่เก็บนี้ คุณระบุ build_file หรือ build_file_content ได้ แต่อย่างใดอย่างหนึ่งเท่านั้น |
canonical_id |
String; ไม่บังคับ
รหัสมาตรฐานของไฟล์ที่ดาวน์โหลด หากมีการระบุและไม่ว่างเปล่า Bazel จะไม่นำไฟล์จากแคช เว้นแต่จะมีการเพิ่มไฟล์ลงในแคชโดยคำขอที่มีรหัส Canonical เดียวกัน หากไม่ได้ระบุหรือว่างเปล่า Bazel จะใช้ URL ของไฟล์เป็นรหัสที่แน่นอนโดยค่าเริ่มต้น ซึ่งจะช่วยตรวจจับข้อผิดพลาดที่พบบ่อยในการอัปเดต URL โดยไม่ อัปเดตแฮชด้วย ทำให้การสร้างสำเร็จในเครื่อง แต่ล้มเหลวใน เครื่องที่ไม่มีไฟล์ในแคช คุณปิดใช้ลักษณะการทำงานนี้ได้ด้วย --repo_env=BAZEL_HTTP_RULES_URLS_AS_DEFAULT_CANONICAL_ID=0 |
files |
พจนานุกรม: สตริง -> ป้ายกำกับ; ไม่บังคับ
แผนที่ของเส้นทางที่เกี่ยวข้อง (คีย์) ไปยังป้ายกำกับไฟล์ (ค่า) ที่ซ้อนทับในที่เก็บเป็น ลิงก์สัญลักษณ์ ซึ่งจะเป็นประโยชน์เมื่อคุณต้องการเพิ่มไฟล์ REPO.bazel หรือ BUILD.bazel ที่ด้านบนของที่เก็บที่มีอยู่ ระบบจะสร้างลิงก์สัญลักษณ์ของไฟล์หลังจากดาวน์โหลดไฟล์ระยะไกลและใช้แพตช์ (`remote_patches`, `patches`) ระบบจะเขียนทับไฟล์ที่มีอยู่ |
integrity |
String; ไม่บังคับ
ผลรวมตรวจสอบที่คาดไว้ในรูปแบบความสมบูรณ์ของทรัพยากรย่อยของไฟล์ที่ดาวน์โหลด ต้องตรงกับผลรวมตรวจสอบของไฟล์ที่ดาวน์โหลด _การละเว้น Checksum เป็นความเสี่ยงด้านความปลอดภัย เนื่องจากไฟล์ระยะไกลอาจเปลี่ยนแปลงได้_ การละเว้นฟิลด์นี้จะทำให้บิลด์ของคุณไม่เป็นแบบปิด คุณจะเลือกทำให้การพัฒนา ง่ายขึ้นหรือไม่ก็ได้ แต่ควรตั้งค่าแอตทริบิวต์นี้หรือ `sha256` ก่อนจัดส่ง |
netrc |
String; ไม่บังคับ
ตำแหน่งของไฟล์ .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 |
String; ไม่บังคับ
ยูทิลิตี patch(1) ที่จะใช้ หากมีการระบุ Bazel จะใช้เครื่องมือแก้ไขที่ระบุแทนการติดตั้งใช้งานแพตช์ดั้งเดิมของ Bazel |
patches |
รายการป้ายกำกับ (ไม่บังคับ)
รายการไฟล์ที่จะใช้เป็นแพตช์หลังจากแตกไฟล์ที่เก็บถาวร โดยค่าเริ่มต้นจะใช้การติดตั้งใช้งานแพตช์ดั้งเดิมของ Bazel ซึ่งไม่รองรับแพตช์ไบนารี แต่ Bazel จะกลับไปใช้เครื่องมือบรรทัดคำสั่ง patch หากมีการระบุแอตทริบิวต์ `patch_tool` หรือมีอาร์กิวเมนต์อื่นนอกเหนือจาก `-p` ในแอตทริบิวต์ `patch_args` |
remote_file_integrity |
พจนานุกรม: สตริง -> สตริง; ไม่บังคับ
แผนที่ของเส้นทางที่สัมพันธ์กันของไฟล์ (คีย์) กับค่าความสมบูรณ์ (ค่า) เส้นทางแบบสัมพัทธ์เหล่านี้ควรเชื่อมโยงกับไฟล์ (คีย์) ในแอตทริบิวต์ `remote_file_urls` |
remote_file_urls |
พจนานุกรม: สตริง -> รายการสตริง; ไม่บังคับ
แผนที่ของเส้นทางที่เกี่ยวข้อง (คีย์) ไปยังรายการ URL (ค่า) ที่จะดาวน์โหลด และทำให้พร้อมใช้งานเป็นไฟล์ที่ซ้อนทับในที่เก็บ ซึ่งจะมีประโยชน์เมื่อคุณต้องการเพิ่มไฟล์ REPO.bazel หรือ BUILD.bazel ที่ด้านบนของที่เก็บที่มีอยู่ ระบบจะดาวน์โหลดไฟล์ก่อนที่จะสร้างลิงก์สัญลักษณ์ของ `files` และใช้แพตช์ (`remote_patches`, `patches`) รายการ URL ทั้งหมดควรเป็นมิเรอร์ที่เป็นไปได้ของไฟล์เดียวกัน ระบบจะลองใช้ URL ตามลำดับจนกว่าจะสำเร็จ ระบบจะเขียนทับไฟล์ที่มีอยู่ |
remote_module_file_integrity |
String; ไม่บังคับ
ใช้ภายในเท่านั้น |
remote_module_file_urls |
รายการสตริง ไม่บังคับ
ใช้ภายในเท่านั้น |
remote_patch_strip |
จำนวนเต็ม ไม่บังคับ
จำนวนเครื่องหมายทับนำหน้าที่จะนำออกจากชื่อไฟล์ในแพตช์ระยะไกล |
remote_patches |
พจนานุกรม: สตริง -> สตริง; ไม่บังคับ
แผนที่ของ URL ไฟล์แพตช์ไปยังค่าความสมบูรณ์ของไฟล์นั้น โดยจะใช้หลังจากแยกไฟล์เก็บถาวรและก่อนใช้ไฟล์แพตช์จากแอตทริบิวต์ `patches` โดยจะใช้การติดตั้งใช้งานแพตช์ดั้งเดิมของ Bazel คุณสามารถระบุหมายเลขการลบแพตช์ได้ด้วย `remote_patch_strip` |
sha256 |
String; ไม่บังคับ
SHA-256 ที่คาดไว้ของไฟล์ที่ดาวน์โหลด ซึ่งต้องตรงกับ SHA-256 ของไฟล์ที่ดาวน์โหลด _การละเว้น SHA-256 เป็นความเสี่ยงด้านความปลอดภัย เนื่องจากไฟล์ระยะไกลอาจเปลี่ยนแปลงได้_ การละเว้นฟิลด์นี้จะทำให้บิลด์ของคุณไม่เป็นแบบเฮอร์มิติก การระบุแอตทริบิวต์นี้เป็นทางเลือกเพื่อช่วยให้การพัฒนาเป็นไปได้ง่ายขึ้น แต่คุณควรตั้งค่าแอตทริบิวต์นี้หรือ `integrity` ก่อนที่จะจัดส่ง |
strip_components |
จำนวนเต็ม ไม่บังคับ
ตัดคอมโพเนนต์นำหน้าตามจำนวนที่ระบุออกจากเส้นทางไฟล์ เมื่อแยก ตั้งค่าได้เพียง `strip_components` หรือ `strip_prefix` อย่างใดอย่างหนึ่งเท่านั้น |
strip_prefix |
String; ไม่บังคับ
คำนำหน้าไดเรกทอรีที่จะนำออกจากไฟล์ที่แยก ไฟล์เก็บถาวรจำนวนมากมีไดเรกทอรีระดับบนสุดซึ่งมีไฟล์ที่มีประโยชน์ทั้งหมดในไฟล์เก็บถาวร แทนที่จะต้องระบุคำนำหน้านี้ซ้ำๆ ใน `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 จะแสดงข้อผิดพลาด ตั้งค่าได้เพียง `strip_prefix` หรือ `strip_components` อย่างใดอย่างหนึ่งเท่านั้น |
type |
String; ไม่บังคับ
ประเภทที่เก็บถาวรของไฟล์ที่ดาวน์โหลด โดยค่าเริ่มต้น ระบบจะกำหนดประเภทที่เก็บถาวรจากนามสกุลไฟล์ของ URL หากไฟล์ไม่มีนามสกุล คุณสามารถระบุอย่างชัดเจนว่าต้องการใช้รูปแบบใดรูปแบบหนึ่งต่อไปนี้ `"zip"`, `"jar"`, `"war"`, `"aar"`, `"nupkg"`, `"whl"`, `"tar"`, `"tar.gz"`, `"tgz"`, `"gz"`, `"tar.xz"`, `"txz"`, `"xz"`, `"tar.zst"`, `"tzst"`, `"zst"`, `"tar.bz2"`, `"tbz"`, `"bz2"`, `"ar"`, `"deb"` หรือ `"7z"` |
url |
String; ไม่บังคับ
URL ของไฟล์ที่จะทำให้ Bazel ใช้งานได้ ต้องเป็นไฟล์, URL แบบ HTTP หรือ HTTPS ติดตามการเปลี่ยนเส้นทาง ไม่รองรับการตรวจสอบสิทธิ์ คุณสามารถเพิ่มความยืดหยุ่นได้โดยใช้พารามิเตอร์ URL ซึ่งช่วยให้ ระบุ URL อื่นเพื่อดึงข้อมูลได้ |
urls |
รายการสตริง ไม่บังคับ
รายการ URL ไปยังไฟล์ที่จะทำให้ Bazel ใช้งานได้ แต่ละรายการต้องเป็นไฟล์, http หรือ https URL ติดตามการเปลี่ยนเส้นทาง ไม่รองรับการตรวจสอบสิทธิ์ ระบบจะลองใช้ URL ตามลำดับจนกว่าจะสำเร็จ ดังนั้นคุณควรแสดงรายการมิเรอร์ในพื้นที่ก่อน หากการดาวน์โหลดทั้งหมดไม่สำเร็จ กฎจะไม่ทำงาน |
workspace_file |
ป้ายกำกับ (ไม่บังคับ)
แอตทริบิวต์ที่ไม่มีการดำเนินการ อย่าใช้ |
workspace_file_content |
String; ไม่บังคับ
แอตทริบิวต์ที่ไม่มีการดำเนินการ อย่าใช้ |
ตัวแปรสภาพแวดล้อม
กฎของที่เก็บนี้ขึ้นอยู่กับตัวแปรสภาพแวดล้อมต่อไปนี้
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,
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 เป็นทรัพยากร Dependency เพื่อใช้ไฟล์นี้
แอตทริบิวต์
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 |
String; ไม่บังคับ
รหัสมาตรฐานของไฟล์ที่ดาวน์โหลด หากมีการระบุและไม่ว่างเปล่า Bazel จะไม่นำไฟล์จากแคช เว้นแต่จะมีการเพิ่มไฟล์ลงในแคชโดยคำขอที่มีรหัส Canonical เดียวกัน หากไม่ได้ระบุหรือว่างเปล่า Bazel จะใช้ URL ของไฟล์เป็นรหัสที่แน่นอนโดยค่าเริ่มต้น ซึ่งจะช่วยตรวจจับข้อผิดพลาดที่พบบ่อยในการอัปเดต URL โดยไม่ อัปเดตแฮชด้วย ทำให้การสร้างสำเร็จในเครื่อง แต่ล้มเหลวใน เครื่องที่ไม่มีไฟล์ในแคช คุณปิดใช้ลักษณะการทำงานนี้ได้ด้วย --repo_env=BAZEL_HTTP_RULES_URLS_AS_DEFAULT_CANONICAL_ID=0 |
downloaded_file_path |
String; ไม่บังคับ
เส้นทางที่กำหนดให้กับไฟล์ที่ดาวน์โหลด |
executable |
บูลีน ไม่บังคับ
หากควรทำให้ไฟล์ที่ดาวน์โหลดเป็นไฟล์ปฏิบัติการ |
integrity |
String; ไม่บังคับ
ผลรวมตรวจสอบที่คาดไว้ในรูปแบบความสมบูรณ์ของทรัพยากรย่อยของไฟล์ที่ดาวน์โหลด ต้องตรงกับผลรวมตรวจสอบของไฟล์ที่ดาวน์โหลด _การละเว้น Checksum เป็นความเสี่ยงด้านความปลอดภัย เนื่องจากไฟล์ระยะไกลอาจเปลี่ยนแปลงได้_ การละเว้นฟิลด์นี้จะทำให้บิลด์ของคุณไม่เป็นแบบปิด คุณจะเลือกทำให้การพัฒนา ง่ายขึ้นหรือไม่ก็ได้ แต่ควรตั้งค่าแอตทริบิวต์นี้หรือ `sha256` ก่อนจัดส่ง |
netrc |
String; ไม่บังคับ
ตำแหน่งของไฟล์ .netrc ที่ใช้สำหรับการตรวจสอบสิทธิ์ |
sha256 |
String; ไม่บังคับ
SHA-256 ที่คาดไว้ของไฟล์ที่ดาวน์โหลด ซึ่งต้องตรงกับ SHA-256 ของไฟล์ที่ดาวน์โหลด _การละเว้น SHA-256 เป็นความเสี่ยงด้านความปลอดภัย เนื่องจากไฟล์ระยะไกลอาจเปลี่ยนแปลงได้_ การละเว้นฟิลด์นี้จะทำให้บิลด์ของคุณไม่เป็นแบบเฮอร์มิติก ไม่บังคับ แต่จะช่วยให้การพัฒนา ง่ายขึ้น และควรตั้งค่าก่อนจัดส่ง |
url |
String; ไม่บังคับ
URL ของไฟล์ที่จะทำให้ Bazel ใช้งานได้ ต้องเป็นไฟล์, URL แบบ HTTP หรือ HTTPS ติดตามการเปลี่ยนเส้นทาง ไม่รองรับการตรวจสอบสิทธิ์ คุณสามารถเพิ่มความยืดหยุ่นได้โดยใช้พารามิเตอร์ URL ซึ่งช่วยให้ ระบุ 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, 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 |
String; ไม่บังคับ
รหัสมาตรฐานของไฟล์ที่ดาวน์โหลด หากมีการระบุและไม่ว่างเปล่า Bazel จะไม่นำไฟล์จากแคช เว้นแต่จะมีการเพิ่มไฟล์ลงในแคชโดยคำขอที่มีรหัส Canonical เดียวกัน หากไม่ได้ระบุหรือว่างเปล่า Bazel จะใช้ URL ของไฟล์เป็นรหัสที่แน่นอนโดยค่าเริ่มต้น ซึ่งจะช่วยตรวจจับข้อผิดพลาดที่พบบ่อยในการอัปเดต URL โดยไม่ อัปเดตแฮชด้วย ทำให้การสร้างสำเร็จในเครื่อง แต่ล้มเหลวใน เครื่องที่ไม่มีไฟล์ในแคช คุณปิดใช้ลักษณะการทำงานนี้ได้ด้วย --repo_env=BAZEL_HTTP_RULES_URLS_AS_DEFAULT_CANONICAL_ID=0 |
downloaded_file_name |
String; ไม่บังคับ
ชื่อไฟล์ที่กำหนดให้กับไฟล์ JAR ที่ดาวน์โหลด |
integrity |
String; ไม่บังคับ
ผลรวมตรวจสอบที่คาดไว้ในรูปแบบความสมบูรณ์ของทรัพยากรย่อยของไฟล์ที่ดาวน์โหลด ต้องตรงกับผลรวมตรวจสอบของไฟล์ที่ดาวน์โหลด _การละเว้น Checksum เป็นความเสี่ยงด้านความปลอดภัย เนื่องจากไฟล์ระยะไกลอาจเปลี่ยนแปลงได้_ การละเว้นฟิลด์นี้จะทำให้บิลด์ของคุณไม่เป็นแบบปิด คุณจะเลือกทำให้การพัฒนา ง่ายขึ้นหรือไม่ก็ได้ แต่ควรตั้งค่าแอตทริบิวต์นี้หรือ `sha256` ก่อนจัดส่ง |
netrc |
String; ไม่บังคับ
ตำแหน่งของไฟล์ .netrc ที่ใช้สำหรับการตรวจสอบสิทธิ์ |
sha256 |
String; ไม่บังคับ
SHA-256 ที่คาดไว้ของไฟล์ที่ดาวน์โหลด ซึ่งต้องตรงกับ SHA-256 ของไฟล์ที่ดาวน์โหลด _การละเว้น SHA-256 เป็นความเสี่ยงด้านความปลอดภัย เนื่องจากไฟล์ระยะไกลอาจเปลี่ยนแปลงได้_ การละเว้นฟิลด์นี้จะทำให้บิลด์ของคุณไม่เป็นแบบเฮอร์มิติก การระบุแอตทริบิวต์นี้เป็นทางเลือกเพื่อช่วยให้การพัฒนาเป็นไปได้ง่ายขึ้น แต่คุณควรตั้งค่าแอตทริบิวต์นี้หรือ `integrity` ก่อนที่จะจัดส่ง |
url |
String; ไม่บังคับ
URL ของไฟล์ที่จะทำให้ Bazel ใช้งานได้ ต้องเป็นไฟล์, URL แบบ HTTP หรือ HTTPS ติดตามการเปลี่ยนเส้นทาง ไม่รองรับการตรวจสอบสิทธิ์ คุณสามารถเพิ่มความยืดหยุ่นได้โดยใช้พารามิเตอร์ URL ซึ่งช่วยให้ ระบุ URL อื่นเพื่อดึงข้อมูลได้ URL ต้องลงท้ายด้วย `.jar` |
urls |
รายการสตริง ไม่บังคับ
รายการ URL ไปยังไฟล์ที่จะทำให้ Bazel ใช้งานได้ แต่ละรายการต้องเป็นไฟล์, http หรือ https URL ติดตามการเปลี่ยนเส้นทาง ไม่รองรับการตรวจสอบสิทธิ์ ระบบจะลองใช้ URL ตามลำดับจนกว่าจะสำเร็จ ดังนั้นคุณควรแสดงรายการมิเรอร์ในพื้นที่ก่อน หากการดาวน์โหลดทั้งหมดไม่สำเร็จ กฎจะไม่ทำงาน URL ทั้งหมดต้องลงท้ายด้วย `.jar` |
ตัวแปรสภาพแวดล้อม
กฎของที่เก็บนี้ขึ้นอยู่กับตัวแปรสภาพแวดล้อมต่อไปนี้
BAZEL_HTTP_RULES_URLS_AS_DEFAULT_CANONICAL_ID