设为首页 收藏本站
查看: 1286|回复: 0

[经验分享] UWP Jenkins + NuGet + MSBuild 手把手教你做自动UWP Build 和 App store包

[复制链接]

尚未签到

发表于 2018-1-6 21:30:25 | 显示全部楼层 |阅读模式
  背景
  项目上需要做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 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

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-432371-1-1.html 上篇帖子: 【Jenkins】Linux搭建Jenkins平台 下篇帖子: 使用jenkins配置.net mvc网站进行持续集成二
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表