CI 團隊的 S3 測試素材 — 用 NetDrive 將 Amazon S3 掛載為磁碟機

閱讀時間 6 分鐘 use-case amazon-s3 windows
Alex
AlexPrincipal Engineer
將 Amazon S3 掛載為本機磁碟機代號,讓 CI 測試素材能以一般檔案路徑存取。這是 NetDrive 在 Windows 與 macOS 上為 DevOps 團隊提供的使用案例。

某後端團隊在 Amazon S3 上存放了 40 GB 的二進位測試素材,包括資料庫快照、預先渲染的媒體檔案與大型參考資料集。他們的整合測試套件會以一般檔案路徑讀取這些檔案。每當素材變動,舊的工作流程都一樣:aws s3 cp 會把數 GB 資料下載到每一台 CI 執行器,任何觸發流水線的人都得先等 25 分鐘才能開始測試。用 NetDrive 將 S3 儲存桶掛載為本機磁碟機,可以完全省去這道複製步驟——測試會直接透過 T:\fixtures\ 這樣的路徑讀取 S3 上的資料,不需要任何本機下載步驟。

NetDrive drive manager showing Google Drive, S3 and pCloud mounted as drive lettersMounted clouds appearing as native drives in Windows File Explorer

將 S3 掛載為磁碟機代號——無需下載,無需改程式碼

NetDrive 讓 Google Drive、OneDrive、S3、SFTP、WebDAV 等在 Windows 與 macOS 上顯示為原生磁碟機 — 不需同步,也不需完整下載。

  • 任何能讀取檔案路徑的應用程式都能自動運作
  • 開機時自動掛載,讓磁碟機在任何人登入前就已就緒
  • Wasabi 與 MinIO 與 Amazon S3 的運作方式相同
WindowsmacOS
下載 NetDrive →

免費試用。提供終身與訂閱方案。

為什麼檔案路徑相容性在 CI 中很重要

大多數測試套件都是設計成從本機路徑讀取素材。若要把每一處素材參照都改成 S3 URL,就得動到數十個檔案,還可能連帶破壞本機端的開發體驗。更乾淨的做法是讓 S3 看起來就像本機磁碟機,既有的路徑就能不做任何修改地繼續運作。

NetDrive 可依 CI 執行器的需求,將 S3 儲存桶掛載為網路磁碟機唯讀磁碟機本機磁碟磁碟區。在 Windows 上,這會成為一個磁碟機代號(T:S: 等),機器上的任何程序都能讀取。在 macOS 上,它會以 FUSE 磁碟區的形式出現在 /Volumes/ 或自訂路徑下。測試套件看到的是一個檔案系統;S3 API 呼叫則由 NetDrive 在背後處理。

大型素材檔案能可靠運作,是因為 NetDrive 會以區塊方式串流資料,並在網路小中斷時自動重試。超過 5 GB 的檔案會使用 S3 分段傳輸(自 NetDrive 3.5.434 起支援),因此素材大小實際上沒有上限。

Amazon S3 provider logo for mounting S3 buckets as drives via NetDrive

將 S3 儲存桶設定為磁碟機

  1. 開啟 NetDrive,在磁碟機管理員中點選 + Add Drive
  2. 從供應商清單中選擇 Amazon S3
  3. 輸入你的 AWS Access Key IDSecret Access Key。建議使用專屬的最小權限 IAM 角色——素材儲存桶設為唯讀,只在測試需要產生成品的地方才給寫入權限。
  4. 輸入 Bucket Name。自 NetDrive 3.19.7 起,區域會依儲存桶設定自動偵測,因此除非需要覆寫,否則可將區域欄位留空。
  5. Drive Type 中,標準讀寫掛載請選 Network drive;若 CI 執行器不應寫回素材儲存桶,則選 Read-only drive
  6. Mount on 設為 Boot——這是與開發者工作站設定最關鍵的差異。開機時掛載能讓磁碟機在任何使用者登入前就可用,這正是無人值守的 CI 伺服器所需要的。
  7. 點選 Mount

無論 Windows 的磁碟機代號或 macOS 的磁碟區路徑,現在都能被機器上任何程序存取,包括 CI 代理程式,即使沒有使用者工作階段在執行也一樣。

NetDrive showing cloud storage mounted as a native drive accessible in Windows Explorer

免登入自動掛載——無人值守 CI 伺服器設定

Mount on Boot 選項是讓 NetDrive 能實際用於 CI 基礎架構的關鍵。大多數 CI 執行器(Jenkins agent、GitHub Actions 自架執行器、GitLab agent)是以系統服務的形式啟動,而非使用者工作階段。只在使用者登入時才掛載的磁碟機,對這些代理程式來說是不存在的。

啟用開機掛載後,S3 磁碟機會在作業系統啟動完成的當下就已就緒。CI 代理程式會自動偵測到它——不需要登入、不需要腳本來執行掛載指令,也不會出現代理程式啟動與磁碟機出現之間的競態問題。

NetDrive auto-mount on boot without login setting, keeping drives available for system services

若需要以程式化方式進行掛載——例如根據分支名稱或流水線變數動態選擇要掛載的儲存桶——NetDrive 提供了 nd3cmd,這是一款自 NetDrive 3.8.921 起加入的命令列工具,可用於腳本化的磁碟機管理。目前 nd3cmd 的指令參考請參閱 NetDrive support forum,因為確切的旗標會依版本而異。

當測試產生成品(涵蓋率報告、渲染輸出、基準測試結果)時,同一個已掛載的磁碟機也能用於寫入。NetDrive 的背景上傳模式會先寫入本機快取,再非同步上傳到 S3,因此測試程序不必等待上傳完成。

NetDrive background upload progress showing asynchronous write queue to S3

地端 S3:MinIO 與 Wasabi

並非每個團隊都直接使用 AWS。有些團隊會在地端運行 MinIO,讓素材資料留在公有雲之外;也有團隊使用 Wasabi 做成本最佳化的冷儲存。NetDrive 自 3.4.398 起支援 S3 相容儲存供應商,並在 3.15.450 中加入了對 MinIO 的明確支援。

連接 S3 相容端點的方式:

  1. 點選 + Add Drive,選擇 S3 Compatible(而非 Amazon S3)。
  2. 輸入 MinIO 叢集或 Wasabi 區域端點的自訂端點 URL
  3. 依照前述方式輸入儲存桶名稱與憑證。
  4. 以相同方式設定磁碟機類型與掛載觸發條件。

其餘設定步驟完全相同。就測試套件的角度而言,無論後端儲存是 AWS us-east-1、Wasabi 儲存桶,還是與 CI 執行器位於同一資料中心的 MinIO 叢集,T:\fixtures\ 始終是 T:\fixtures\

結語

將 S3 掛載為磁碟機代號,是一種零程式碼變更的方式,讓 CI 流水線能存取存放在物件儲存中的大型素材庫。測試套件持續讀取本機路徑;S3 的轉換工作則交由 NetDrive 處理。開機時掛載意味著只要 CI 代理程式需要,磁碟機就一定在,無需任何手動介入。

若要在開發者的 Mac 上設定 S3 存取,請參閱 Mount Amazon S3 on macOS with NetDrive。若你的團隊也需要為較舊的素材提供具成本效益的冷儲存層,Mount Backblaze B2 on Windows with NetDrive 提供了以 Backblaze 相容 S3 API 的類似設定方式。

— Alex, NetDrive