UWP Jenkins + NuGet + MSBuild 手把手教你做自動UWP Build 和 App store包

來源:互聯網
上載者:User

標籤:lease   檢查   ali   導致   deb   服務   刪除   and   系統資訊   

原文:UWP Jenkins + NuGet + MSBuild 手把手教你做自動UWP Build 和 App store包

背景

項目上需要做UWP的自動安裝包,在以前的公司接觸的是TFS來做自動build。 公司要求用Jenkins 來做,別笑話我,之前還真不曉得這個東西。

會的同學請看一下指出錯誤,不會的同學請先自行腦補,我們一步一步的來。

首先我們準備2個安裝包,Jenkins,NuGet 都下載最新的好了。

 

1. 安裝Jenkins,下一步下一步。安裝好了會自動瀏覽器跳轉到http://localhost:8080/ 如

按照提示去C:\Program Files (x86)\Jenkins\secrets\initialAdminPassword檔案中把一串GUID拷進去,然後點Continue,等待。

第一次玩的同學就選預設讓它安裝建議的外掛程式好了。再次等待。。。完成之後是建立帳號,小夥伴記住自己的帳號哦。我在弄的過程因為忘記帳號了。。還重新安裝過。。

如果要重裝,記得卸載之後刪掉C:\Program Files (x86)\Jenkins 這個目錄

 、

填完之後就開始使用吧。。gogo

建立一個job

選擇第一個然後填個名字,點ok

到構建中,建立一個Execute Windows batch command

 將下面代碼拷進去

D:\Jenkins_Test\Tools\nuget.exe restore "D:\Jenkins_Test\Projects\App1\App1.sln" -ConfigFile "C:\Users\xxxx\AppData\Roaming\NuGet\NuGet.Config" -NoCache

這裡我講一下,我們事先在D盤建立了Jenkins_Test的檔案夾,它下面的Tools檔案夾是存放前面下載的nuget.exe。

restore 是 nuget 的一個命令,就是說把你項目D:\Jenkins_Test\Projects\App1\App1.sln需要的app package都按需下載下來。跟你用VS 編譯項目的時候提示的restoring package是一樣的。

後面的-ConfigFile 是指定configFlie,如果不寫的話。預設是%AppData%\NuGet\NuGet.config is used. 我們這裡使用的是你登陸windows 的xxxx帳號下面的這個檔案.

具體這些命令是幹什麼的。。還有哪些其他命令,請查看 nuget.exe-cli-reference. 記得改掉xxxx為你自己的帳號。

 

接下來我們需要建立一個Windows powershell。這需要去下載powershell for jenkins的外掛程式。

儲存之後 點擊Jenkins 回到首頁面。

點擊 系統管理,然後在右邊選擇點擊 管理外掛程式,在可選外掛程式 項目下搜尋Powershell,勾選點擊直接安裝。

安裝完畢之後我們回到首頁,再次點擊 剛才建立的Test1 項目,進入之後點擊配置。

這次在構建中,我們選擇 Windows PowerShell。

拷貝下面code進去。

# Path to Msbuild tool# $msbuild = "[Path to MsBuild.exe. See below for reference]"$msbuild = "C:\Program Files (x86)\MSBuild\14.0\bin\MSBuild.exe"set-alias msbuild $msbuild# solution settings# $sln_name = "[Path to Solution File. See below for reference]"$sln_name = "D:\Jenkins_Test\Projects\App1\App1.sln"$vs_config = "Release" $vs_platfom = "ARM"# call the build methodWrite-Host "Building solution`n" -foregroundcolor Greenmsbuild $sln_name /t:Build /p:Configuration=$vs_config /p:Platform=$vs_platfom /v:q /nologo

填好之後我們就可以儲存,返回之後,點擊 立刻構建。。如。。等待build結果。

這裡我們將會遇到第一個坑,我加粗以表示重要。

build失敗,我們點擊下前面紅色的球球。。查看日誌。

CSC : error CS0006: Metadata file ‘C:\windows\system32\config\systemprofile\.nuget\packages\System.ComponentModel\4.0.0\ref\netcore50\System.ComponentModel.dll‘ could not be found [D:\Jenkins_Test\Projects\App1\ClassLibrary1\ClassLibrary1.csproj]

坑1

可以看到的是nuget store 是成功了,但是在build的時候它跑去找C:\windows\system32\config\systemprofile\.nuget\packages\ 下面的的packpage了,查看本地這個檔案夾,根本就沒有.nuget。

而.nuget其實是在我們當前user下面的 C:\Users\xxxx

大量查看網上都沒有查到有用的資訊,而當我查看 Jenkins 系統管理-系統資訊的時候我發現 Jenkins 預設的home就是在C:\windows\system32\config\systemprofile這個下面,而且這是我們裝系統的時候預設本地帳號的位置。

想到這裡我想第一件要做的事就是把home給改成C:\Users\xxxx。

最後我通過修改Jenkins  服務通過這個坑。。

進入service,找到jenkins的服務。點擊屬性-登陸  可以看到預設是本地帳號

那麼我們需要修改為 你當前系統登陸的帳號。點擊此帳號,進去瀏覽,搜尋到你當前登陸的帳號然後點擊確定,記得重啟服務。

再次查看jenkins 系統資訊,已經看到home更改了。。去點擊 立即建立。。。等待build完成。。

可以看到球球變成了藍色,編譯成功了。

這樣我們就完成了自動編譯。。這個使用情境我想應該是在代碼伺服器check in的時候自動做編譯來檢查 代碼是否正確與否。

當然肯定需要寫一些觸發,本文沒有做更多研究,有興趣的同學可以自己研究交流。

 

下面我們要做App 包,就是那樣給測試使用以及上傳商店的包。

我們建立另一個Job,比如test2.

同test1一樣到構建中,建立一個Execute Windows batch command

 將下面代碼拷進去

D:\Jenkins_Test\Tools\nuget.exe restore "D:\Jenkins_Test\Projects\App1\App1.sln" -ConfigFile "C:\Users\xxxx\AppData\Roaming\NuGet\NuGet.Config" -NoCache

再建立Windows PowerShell

# Path to Msbuild tool# $msbuild = "[Path to MsBuild.exe. See below for reference]"$msbuild = "C:\Program Files (x86)\MSBuild\14.0\bin\MSBuild.exe"set-alias msbuild $msbuild# solution settings# $sln_name = "[Path to Solution File. See below for reference]"$sln_name = "D:\Jenkins_Test\Projects\App1\App1\App1.csproj"# call the build methodWrite-Host "Building solution`n" -foregroundcolor Greenmsbuild $sln_name /target:Clean /target:Rebuild /target:Publish /p:Configuration=Release /p:AppxPackageDir="D:\Jenkins_Test\AppxPackages\" /p:AppxBundle=Always /p:UapAppxPackageBuildMode=StoreUpload /p:AppxBundlePlatforms="x86|x64|arm"

值得注意的是:

1.記得先用vs 把項目跟商店裡面的項連結到一起,不連結起來的話,你做出來的包也沒法上傳。。

坑2 sln_name 這裡要注意 必須是啟動項.csproj而且不是.sln

儲存之後,立即構建,完成之後你就可以在D:\Jenkins_Test\AppxPackages\ 檔案夾下發現你的App 包了。。

坑3

因為項目中引用的一個package 是不支援Any CPU的,所以我們在項目裡面刪除了AnyCPU,注意我們刪除了sln,以及各個子項目裡面的AnyCPU

刪除了之後我們再進行構建,毫無疑問報錯了。

C:\Program Files (x86)\MSBuild\14.0\bin\Microsoft.Common.CurrentVersion.targets(724,5): error : The OutputPath property is not set for project ‘ClassLibrary1.csproj‘.  Please check to make sure that you have specified a valid combination of Configuration and Platform for this project.  Configuration=‘Debug‘  Platform=‘AnyCPU‘.  You may be seeing this message because you are trying to build a project without a solution file, and have specified a non-default Configuration or Platform that doesn‘t exist for this project. [D:\Jenkins_Test\Projects\App1\ClassLibrary1\ClassLibrary1.csproj]

研究了半天,發現啟動項沒有問題,於是把啟動項和子project的專案檔拿來一對比。

左邊啟動項,右邊子project

因為我們的子project也被刪除了AnyCPU ,但是預設卻還是使用的AnyCPU項,所以這才導致我們 nuget.exe restore 失敗的。

既然我們這裡子project已經沒AnyCPU了,那麼我們也把Platform設定預設x86.
修改完畢之後再次構建。。。完美! 成功。。

 坑4

MSbuild commnd  /target:Clean;Rebuild;Publish 在這裡必須分開寫/target:Clean /target:Rebuild /target:Publish ,不然不會識別。

命令中的路徑的檔案夾名最好不要帶空格,不然也是會被認為是非法路徑。

總結

上面就是我研究Jenkins + NuGet + MSBuild 手把手教你做自動UWP Build 和 App store包 所遇到的坑,圖有點多,希望能幫到需要的同學。。

 

最新動向:

最近安裝了2017,所以一些路徑也需要修改。
1.下載最新的nuget.exe,去官網下載最新的v4.0版本,覆蓋之前v3.5的那個

2.Msbuild 的路徑改為:C:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise\MSBuild\15.0\Bin\MSBuild.exe

 

UWP Jenkins + NuGet + MSBuild 手把手教你做自動UWP Build 和 App store包

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.