現在幾乎所有語言都提供包管理工具,比如 JavaScript 的 npm ,Java 的 Maven ,Dart 的 pub 。.Net 程式當然是 NuGet 。NuGet 也出現很多年了,奇怪的是居然還有很多人不知道。
現在軟體結構越來越複雜,在多個專案中往往需要共享一些庫、元件等等。NuGet 為我們提供了方便的包管理功能。但是 NuGet 預設提供外網公開的服務,如果我們希望在公司內部或者自己家裡進行一些庫的管理,那麼就需要自己來搭建 NuGet 私服。
Nuget 私服有幾個工具可以搭建如官方的Nuget.Server 、ProGet 、BaGet 等。這裡推薦 BaGet 這個工具,它跨平臺又非常輕量化,易於部署,一行 docker 命令就可以執行起來。這裡必選吐槽下 Nuget.Server 做為 NuGet 官方提供的一個工具居然還是依賴 Framework 的。
執行 BaGet 服務
BaGet 有多種部署方式。比如可以從 Github 上拉取 release 後的釋出檔案手工 dotnet 執行,也可以直接使用 docker 容器化部署。現在是容器化的時代,那麼當然首先 docker 部署咯。
# The following config is the API Key used to publish packages.
# You should change this to a secret value to secure your server.
ApiKey=NUGET-SERVER-API-KEY
Storage__Type=FileSystem
Storage__Path=/var/baget/packages
Database__Type=Sqlite
Database__ConnectionString=Data Source=/var/baget/baget.db
Search__Type=Database
先建立一個 baget.env 的環境變數配置檔案
docker run --rm --name nuget-server -p 5555:80 --env-file baget.env -v "$(pwd)/baget-data:/var/baget" loicsharma/baget:latest
使用 docker run 命令執行
訪問一下這個服務,可以看到服務成功執行起來了。但是現在一個包都沒有,所以顯示的是 nothing here ...
構建 NuGet 包
要推送 NeGet 包,首先我們需要包我們的庫打包成 NuGet 包。
打包可以使用 nuget 的 cli 來打包。其實最簡單的是在我們的專案上右鍵屬性,在打包這個 tab 頁上勾選 “在構建時生成 NuGet 包”,這樣在我們每次生成專案完成的時候會在bin目錄下生成對應的 nuget 包。
推送 NuGet 包
Nuget 包打包完成後,就可以推送自己的包到這個服務了。
dotnet nuget push -s http://localhost:5555/v3/index.json .\AgileConfig.Client.1.1.8.11.nupkg
使用 dotnet nuget push 命令進行推送
推送成功會顯示“已推送包”,期間有個警告,因為我們沒有設定 apikey ,這個忽略。
再次重新整理 BaGet 的頁面,就可以看到我們剛才推送上去的包了。
使用 BaGet 源
為了能夠讓我們的 VisualStudio 能夠檢索 BaGet 服務,我們需要進行簡單的配置。
開啟 VS > 工具 > 選項 > NuGet 包管理器 > 程式包源,點選綠色的加號,配置源名稱baget , 地址:
http://192.168.0.117:5555/v3/index.json 點選確定。
隨便開啟一個專案解決方案,在 NuGet 包檢索頁面選擇程式包源給 “baget” ,瀏覽頁面就會列出這個源當前具有的包。這樣就可以正常進行管理與安裝了。
總結
通過以上我們簡單的演示瞭如果通過 docker 命令來執行一個 BaGet 服務。BaGet 跨平臺、輕量化、易於部署,體驗非常不錯,大家可以試試。
https://github.com/loic-sharma/BaGet