架設內部 NuGet Server 的兩三事 (01)

由於工作專案越拆越多,有些專案參考來參考去很討厭。

開一個 Solution 包了好幾個 Project 再加上如果你裝了 Resharper 就會開始懷疑要不要換電腦了?

讓我們把一些共用且耦合性較低的東西包出去當作 Package 用 NuGet 去管理吧!

Private NuGet Server 架設有許多選擇 - Hosting your own NuGet feeds

最後選擇了 ProGet from Inedo,Free License 已經很夠用了。( License 比較 )

並且記錄下我在架設 Server 遇到的麻煩。

在安裝上我是參考以下兩篇文章。

下一步就是跟公司單位要 Server 與空間就可以開始架囉!

很不幸地要到了一個很詭異的配置 : C:\ 40GB D:\ 200GB

在安裝完 ProGet 及設定完 NuGet Feed 後你會得到一個放置 package 位置。

雖然可以在設定內修改但是官方並不建議操作,因為它如果要整個系統備份移轉的時候會無法取得正確的 packages。

利用此指令去創建虛擬資料夾鏈接目錄。

這樣在上傳 packages 時可以不會去真的占用 C:\ 空間。

mklink /d C:\ProgramData\ProGet\Packages\.nugetv2\F1 D:\ProgramData\ProGet\Packages\.nugetv2\F1
ProGet 限制匿名使用者與設置 API Keys

接下來要限制匿名使用者不能隨意地到我們架設好的 NuGet Server 下載 packages。

Tasks 中的 Add Permission 移除 Anonymous 加入一個群組或是使用者去限制身分。

並建立一個 API Keys 允許存取 Feed API。

建立 NuGet.config 至開發專案的版控

在團隊開發中可能會將這個設定檔加入至版控中使大家儲存 packages 的位置一致。

當然我們也可以在當中去設置節點去讀取我們架設的私人 NuGet Server。

比較要注意的是 <apikeys> 內的 value 必須是加密後 與 <packageSourceCredentials> 的 Username/ClearTextPassword 不需要加密。

這樣團隊成員取最新後在 Visual Studio IDE 針對專案 Nuget Package Manager 應該就能正常訪問私人 NuGet Server 並可以下載 packages。

下一篇將會介紹如何將 Project pack (打包) / push (上傳) 整合至 CI Server 上做一個完整的自動化流程。 

Data Source

Configuring NuGet behavior

NuGet.Config 參考

支援多個 .NET Framework 版本

Package: NuGet

規格命令 (NuGet CLI)

組件命令 (NuGet CLI)