กฎที่เก็บ HTTP

รายงานปัญหา ดูแหล่งที่มา Nightly · 8.3 · 8.2 · 8.1 · 8.0 · 7.6

คุณโหลดฟังก์ชันต่อไปนี้ได้จาก @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 รายการ ได้แก่ <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 สตริง ไม่บังคับ

รหัส 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 รายการ ได้แก่ <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 สตริง ไม่บังคับ

รหัส 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 รายการ ได้แก่ <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 สตริง ไม่บังคับ

รหัส 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