一、什麼時候需要用到NuGet私有伺服器 很多公司中架構師會搭建一個統一的項目基礎架構模板,然後全部新項目都會拿這個基礎架構來開發新的項目,那架構中就會有很多的中間件,比喻公司內部的封裝好的Redis中間件,訪問資料庫的中間件,MQ中間件,小程式中間件等等。 現在很多項目都用這個模板開發了,然後其中 ...
一、什麼時候需要用到NuGet私有伺服器
很多公司中架構師會搭建一個統一的項目基礎架構模板,然後全部新項目都會拿這個基礎架構來開發新的項目,那架構中就會有很多的中間件,比喻公司內部的封裝好的Redis中間件,訪問資料庫的中間件,MQ中間件,小程式中間件等等。
現在很多項目都用這個模板開發了,然後其中一個中間件有問題了或要加功能,那麼全部項目都要把這個中間件修改一遍。可能不同項目在不同的組不同的負責人,通知起來也麻煩。這時候就可以把這些中間件做成一個NuGet包了,然後全部項目都可以通過NuGet包安裝,有更新就更新NuGet包,各個項目更新NuGet包就行了。但這些NuGet包不能上傳到公開的NuGet伺服器上,因為這些NugGet包只能公司內部用的,為了安全性考慮,就需要搭建自己的私有NuGet服務了。
二、ProGet搭建
Nexus:支持NuGet,有點重。
MyGet:Nuget雲服務,不適合企業內私有部署。
BaGet:簡單易用,但還沒有實現身份認證,上傳的包誰都能Down下來,界面也不需要登錄就能訪問,因為安全原因只能放棄。
ProGet:商業軟體,支持nuget、npm、docker等,但它是.NET生態應用,而且還提供了免費版本,身份認證、許可權方面控的很好,功能也多。
這裡各種對比下選用ProGet 用Docker方式搭建一個內部的NuGet伺服器。
2.1、ProGet搭建
創建網路
這裡是創建一個和SQL Server共同的網路,如果已經裝有SQL Server了,則不需要這步
docker network create inedo
創建一個SQL Server
如果有SQLServer資料庫,跳過這一步。文檔里只說了需要SQL Server,是否相容其它資料庫還沒嘗試,舊版本的時候是可以用PgSQL的。
#docker 部署免費版本sqlserver docker run --name inedo-sql \ -v /etc/localtime:/etc/localtime:ro \ -e 'ACCEPT_EULA=Y' -e 'MSSQL_SA_PASSWORD=sa123456' \ -e 'MSSQL_PID=Express' --net=inedo --restart=unless-stopped \ -d mcr.microsoft.com/mssql/server:2019-latest
-v /etc/localtime:/etc/localtime:ro:讓容器用本機的日期
創建一個名叫ProGet的資料庫,為了避免問題,請確保將其排序規則指定為SQL_Latin1_General_CP1_CI_as
#sqlserver 創建一個資料庫ProGet docker exec -it inedo-sql /opt/mssql-tools/bin/sqlcmd \ -S localhost -U SA -P 'sa123456' \ -Q 'CREATE DATABASE [ProGet] COLLATE SQL_Latin1_General_CP1_CI_AS'
啟動ProGet容器
先創建一個文件夾掛載上傳的包,這裡創建在
#創建目錄掛載上傳的包 mkdir -p /home/proget/packages
啟動ProGet容器
#啟動ProGet容器 docker run -d --name=inedo --restart=unless-stopped \ -v /etc/localtime:/etc/localtime:ro \ -v /home/proget/packages:/var/proget/packages -p 8180:80 --net=inedo \ -e SQL_CONNECTION_STRING='Data Source=inedo-sql; Initial Catalog=ProGet; User ID=sa; Password=sa123456' \ proget.inedo.com/productimages/inedo/proget:latest
SQL_CONNECTION_STRING:SQL Server資料庫連接字元串
這時候打開ip:8180埠,就能成功訪問NuGet伺服器界面了。
2.2、設置ProGet
設置ProGet包括創建源,設置用戶,設置用戶組,設置功能許可權。
上面部署好後這裡還需要一個license key
這時ProGet也會幫把 License Key信息保存到部署的站點裡面了,不需要再把key填一次了。
然後登錄
修改完密碼設置許可權
創建api key
設置許可權
修改完後,想查看NuGet伺服器上的包就需要登錄了。
創建源
要上傳Nuget包,需要創建一個源,就是Nuget包的源,ProGet能夠創建多個源,分別存不同的包
選源的種類為NuGet
三、Nuget包發佈和下載
3.1、Nuget包打包和發佈
visual studio 建一個類庫,這裡為了演示只寫一個幫助類。
右鍵屬性填寫包的信息
項目右鍵,加包。
打包成功後會在bin/debug下生成一個nuget包
把NuGet包推送到NuGet服務的源上
#nuget包推送命令 dotnet nuget push wxl.tool.1.0.0.nupkg --api-key c39bf1f00893dc07123508d281305e9735xxxxxx --source http://1.15.63.120:8180/nuget/mynuget/v3/index.json
--api-key:上面創建的用於推送的apikey
--source :上面創建的源feed
推送完成就可以在NuGet伺服器上在到這個包了,這裡的時間比伺服器少了一個時區8小時,是因為容器時區問題,在啟動Docker時加上-v /etc/localtime:/etc/localtime:ro即可解決,前面的啟動命令已經加上了。
3.2、NuGet包下載使用
visual studio 另起一個項目,然後右鍵打開Nuget管理,把NugGet的源添加進去
輸入賬號信息後就能安裝啦。
3.3、(推薦)通過NuGet.config的方式來添加源
上面3.2的方式能通過vs來添加源和NuGet包了,那有什麼問題呢?
1、每個開發人員都要在自己的vs添加一遍這個NuGet源。
2、(重點)發佈到伺服器之後,伺服器識別不到NuGet源,需要在伺服器設置一下NuGet源,如果伺服器很多的情況,添加修改起來會比較麻煩。
這時就可以用NuGet.config的方式來添加源了。
在項目根目錄添加NuGet.config文件,內容為
這樣打開項目後,項目會自動從nuget.config載入nuget的源,就不需要從vs添加了。發佈的時候項目也能從nuget.config還原所需的NuGet包,就不需要每個伺服器設置NuGet源了。
到這裡Nuget私有服務使用就完成了!
NuGet發佈包命令地址:https://learn.microsoft.com/zh-cn/nuget/nuget-org/publish-a-package?source=recommendations
NuGet.confg微軟官方文檔地址:https://learn.microsoft.com/zh-cn/nuget/reference/nuget-config-file?cid=kerryherger
ProGet官網地址:https://proget.inedo.com/