UWP Jenkins + NuGet + MSBuild 手把手教你作自动UWP Build 和 App store包

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

背景html

项目上须要作UWP的自动安装包,在之前的公司接触的是TFS来作自动build。 公司要求用Jenkins 来作,别笑话我,以前还真不晓得这个东西。shell

会的同窗请看一下指出错误,不会的同窗请先自行脑补,咱们一步一步的来。windows

首先咱们准备2个安装包,JenkinsNuGet 都下载最新的好了。浏览器

 

1. 安装Jenkins,下一步下一步。安装好了会自动浏览器跳转到http://localhost:8080/ 以下图服务器

按照提示去C:\Program Files (x86)\Jenkins\secrets\initialAdminPassword文件中把一串GUID拷进去,而后点Continue,等待。app

第一次玩的同窗就选默认让它安装建议的插件好了。再次等待。。。完成以后是建立帐号,小伙伴记住本身的帐号哦。我在弄的过程由于忘记帐号了。。还从新安装过。。测试

若是要重装,记得卸载以后删掉C:\Program Files (x86)\Jenkins 这个目录ui

 this

填完以后就开始使用吧。。gogospa

新建一个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 method
Write-Host "Building solution`n" -foregroundcolor Green
msbuild $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 method
Write-Host "Building solution`n" -foregroundcolor Green
msbuild $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

相关文章
相关标签/搜索