กฎที่เก็บ 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_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 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 รายการ ได้แก่ <login> และ <password> ซึ่งจะแทนที่ด้วยค่าที่เทียบเท่า ในไฟล์ .netrc สำหรับชื่อโฮสต์เดียวกัน หลังจากจัดรูปแบบแล้ว ระบบจะตั้งค่าผลลัพธ์ เป็นค่าสำหรับฟิลด์ Authorization ของคำขอ HTTP ตัวอย่างแอตทริบิวต์และ netrc สำหรับการดาวน์โหลด http ไปยัง API ที่เปิดใช้ oauth2 โดยใช้โทเค็น Bearer

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 String; ไม่บังคับ

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

canonical_id String; ไม่บังคับ

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

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

remote_module_file_integrity String; ไม่บังคับ

ใช้ภายในเท่านั้น

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 String; ไม่บังคับ

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

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 จะแสดงข้อผิดพลาด

type String; ไม่บังคับ

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

url String; ไม่บังคับ

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

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

รายการ URL ไปยังไฟล์ที่จะทำให้ Bazel ใช้งานได้ แต่ละรายการต้องเป็นไฟล์, URL ของ http หรือ https ติดตามการเปลี่ยนเส้นทาง ไม่รองรับการตรวจสอบสิทธิ์ ระบบจะลองใช้ 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,
          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 เป็นทรัพยากร Dependency เพื่อใช้ไฟล์นี้

แอตทริบิวต์

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

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

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

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

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

canonical_id String; ไม่บังคับ

รหัส Canonical ของไฟล์ที่ดาวน์โหลด หากระบุและไม่ว่างเปล่า 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 ที่ใช้สำหรับการตรวจสอบสิทธิ์

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

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

sha256 String; ไม่บังคับ

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

url String; ไม่บังคับ

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

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

รายการ URL ไปยังไฟล์ที่จะทำให้ Bazel ใช้งานได้ แต่ละรายการต้องเป็นไฟล์, URL ของ http หรือ https ติดตามการเปลี่ยนเส้นทาง ไม่รองรับการตรวจสอบสิทธิ์ ระบบจะลองใช้ 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 โดยใช้โทเค็น Bearer

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

canonical_id String; ไม่บังคับ

รหัส Canonical ของไฟล์ที่ดาวน์โหลด หากระบุและไม่ว่างเปล่า 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 ที่ใช้สำหรับการตรวจสอบสิทธิ์

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

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

sha256 String; ไม่บังคับ

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

url String; ไม่บังคับ

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

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

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

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

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

  • BAZEL_HTTP_RULES_URLS_AS_DEFAULT_CANONICAL_ID