Azure DevOps in Action - 在CI Pipeline中發佈NuGet套件
我們在前面的章節曾經介紹過,軟體重用性提升一個很大的要素就是套件化。時至今日,不管你用哪一種軟體開發語言,大概都離不開各式各樣的套件庫。
因此,我們在前面談到Azure Repos的章節中,曾經約略介紹過如何建立套件,也介紹過利用Azure DevOps的Artifacts功能來建立的私有(Private)套件庫:
你大概已經知道,我們可以將組件(.dll)封裝成具有版號的套件,以便於分享給團隊甚至網際網路上所有開發人員來使用。只是先前,我們封裝好的套件(.unpkg)都是以手動方式上傳到 nuget.org,我們接著來看看,如何自動化完成這件事情。
設計自動發佈套件的Pipeline
一個自動化建置出NuGet套件並且上傳的CI Pipeline並不難設計,就建立 .net core的套件而言,你可以直接使用 ASP.NET Core的範本來修改即可:
接著將範本中的Publish改為(Pack):
因為套件本身不是網頁,因此沒必要『Publish』出什麼,倒是需要產生出 .unpkg檔案,因此我們需要執行dotnet的Pack command。
然而光Pack還不夠,你還得上傳到 nuget.org,這部分則可以透過 NuGet push task(下圖B)來完成:
上圖中的NuGet push task,其實是在運行NuGet的push command(上圖D),該task會在預設(上圖E)的位置嘗試尋找我們先前透過 Pack Nuget命令所建置出的 .nupkg 檔案,然後將其上傳發送到指定的套件庫。
因此,我們需要進行上傳位置的設定。
第一次連線時你必須點選(上圖F)右方的『+New』按鈕,接著會出現底下畫面:
在出現的畫面中,我們必須輸入ApiKey(上圖C)以便於具有連線到NuGet的權限,後續可以讓Pipeline把套件檔案上傳到Nuget。
一般來說,公開的NuGet套件庫位於:
https://api.nuget.org/v3/index.json
如同先前介紹過的,你只需要有Microsoft Account即可登入並且上傳套件。請先用你的Microsoft Account登入nuget.org:
登入後你會發現右上角的頭像圖示選單中,就有一個API Keys選項,透過該選項,你就可以取得一組API Key。
取得API Key之後,把該Key填入下圖C的位置,設定好連線名稱(下圖D):
按下Save鈕之後即可。
建立好連線,並且整個Pipeline被運行之後,你應當會看到自動建置出的套件被上傳到nuget了:
如果要上傳到Azure DevOps的Artifacts,其實也很簡單:
只需要把Task的Target feed選項設為『This organization/collection』即可。
備註:
如果讀者想自己試試看,您可以參考筆者在Ggithub上的source code,位於:https://github.com/isdaviddong/HealthMgrPackageDemo.git
將其Clone到您的專案後,請修改底下檔案:
HealthMgrPackageDemo/HealthMgr.csproj
將其中程式碼 HealthMgr-[yourName] 中的 [yourName] 換掉,成為您的姓名(必須是全球唯一值),因為這個值會影響套件的ID,而該ID在整個nuget平台必須是唯一的,否則將無法上傳。
留言