.NET持續集成與自動化部署之路第二篇——使用NuGet.Server搭建公司內部的Nuget(包)管理器

文章導航-readme

使用NuGet.Server搭建公司內部的Nuget(包)管理器

前言

    Nuget是一個.NET平臺下的開源的項目,它是Visual Studio的擴展。在使用Visual Studio開發基於.NET Framework的應用時,Nuget能把在項目中添加、移除和更新引用的工做變得更加快捷方便。這是維基百科中的定義,實際上Nuget就是一個包管理器,相似於Java的Maven,能夠幫助咱們更方便的管理dll。

    相信每一個人都從官方的nuget服務器上下載過一些第三方組件。如:log4net、quartz.net等。實際上隨着公司業務慢慢的拓展,項目也會愈來愈來多,不少項目會依賴其餘項目DLL,好比一些底層的技術組件項目多,交叉引用多,這個時候對這些DLL的管理就相當重要。起初咱們公司的方案是把這些公共的組件放到SVN的一個目錄下,而後你們更新到本地,而後添加引用到項目裏。這種方式管理起來較爲複雜,並且必需要求全部項目人員的SVN更新路徑必須是一致的。起初項目較少,項目之間沒什麼依賴,可重用的組件也很少,用起來沒什麼問題,但隨着項目愈來愈多,可重用的組件也愈來愈多,引用愈來愈複雜,這個時候這些組件管理起來就很吃力了。

    以上問題並無意識到,我是在作Jenkisn持續集成與自動化發佈的時候發現Jenkins把SVN更新到本身的工做空間內時,並不能更新到這些依賴的組件(由於這些公共的組件不在項目的SVN工做目錄內),致使構建失敗的時候,苦思良久纔想到搭建咱們公司本身的Nuget服務器,來管理這些組件的。等真正用起來以後才以爲,可能正規軍都這麼玩,咱們以前那種方式只是野路子。html

系列文章

.NET實現持續集成與自動化部署1-Jenkinsgit

.NET實現持續集成與自動化部署2-NuGetgithub

.NET實現持續集成與自動化部署3-測試環境到生產環境策略web

1、下載Nuget.Server

    從官方Nuget服務器上搜索nuget.server,點擊項目url中的github路徑。從github中下載nuget.server的源碼。

下載並解壓後的文件路徑以下圖所示:
api

2、搭建Nuget.Server

  1. 打開項目文件NuGet.Server.sln,找到NuGet.Server,右鍵發佈,選擇文件系統(跟發佈web程序同樣,發佈到IIS中)。
  2. IIS新建站點MyNuGet

    啓動程序出現如下頁面表明搭建成功
  3. 注意:若點擊here出現404頁面以下圖所示:

    能夠經過VS運行起來Nuget.Server項目,而後將bin目錄替換IIS下的bin目錄,便可解決。出現下圖表明搭建成功

    打開VS的Nuget管理器,點擊圖中設置圖標,新建咱們本身的nuget服務器

    以後就能夠連上咱們本身搭建的服務器了
    緩存

    3、自建NuGet基本使用

  4. 下載NuGet命令行打包工具nuget.exe
    下載地址:https://www.nuget.org/downloads服務器

  5. 打包咱們程序
  • 方式1:經過類庫文件csproj的方式打包
    首先打開咱們程序的AssemblyInfo.cs文件修改程序集信息

使用nuget.exe打包程序集

在.csproj文件目錄下執行命令spec工具

nuget.exe spec //spec 在.csproj文件目錄下執行命令


此時會生成一個.nuspec文件,打開這個文件
修改其中的xml屬性便可(注意此處一些信息最好和AssemblyInfo.cs中的程序集信息一致)

修改完成後繼續執行pack命令

這時將生成的.nupkg文件直接copy到nuget服務器IIS目錄下的packages文件夾內便可
也可經過命令push推送至nuget服務器測試

nuget push *.nupkg -s http://127.0.0.1:8005 123456 //push 程序包路徑 選項 地址 apikey
//apikey 能夠在服務器webconfig中配置

完成後便可查看或使用咱們發佈的程序集
url

4、問題

  1. 在剛開始使用的時候常常由於失誤或者程序有問題從而致使須要從新發布nuget包,可是發現覆蓋掉原來的以後,項目裏更新下來的始終仍是原來的程序。
    解決:慎重慎重再慎重打包,須要從新發布包的時候能夠升級,不能覆蓋。(當時認爲這個東西只能升級不能覆蓋)
  2. 用了一段時間後,因爲當時至提供了nuget管理包的技術方案,卻沒有相應的使用規範與制度,致使團隊nuget包混亂,開發人員胡亂升級,胡亂引用nuget包,終於有一天形成大問題。所以須要制定一個完善的使用規範與制度,包括如何打包,如何發佈,誰來打包,誰來發布,慎重打包、升級、專人管理等
  3. 因爲問題2引發的問題,所以決定從新整理nuget包(不破不立),因而從新搭建了一個nuget服務器,從新規整雖有的程序集、組件、從新打包發佈等,可是發現遷移到新的後,項目中下載下來的程序集仍是原來的。(又遇到了問題1)。此次靈感一來發現問題解決方案。VS2017經過工具->選項->清除全部NuGet緩存 再從新下載包問題便可解決

    若沒有VS2017或找不到清楚NuGet緩存選項,也可找到本身機器上nuget的緩存文件夾刪除掉裏面對應的內容也能夠,通常是在C:\Users\Administrator.nuget
相關文章
相關標籤/搜索