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

时间:2021-11-24 04:07:57

背景

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

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

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

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

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

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

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

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

第一次玩的同学就选默认让它安装建议的插件好了。再次等待。。。完成之后是创建账号,小伙伴记住自己的账号哦。我在弄的过程因为忘记账号了。。还重新安装过。。

如果要重装,记得卸载之后删掉C:\Program Files (x86)\Jenkins 这个目录

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

填完之后就开始使用吧。。gogo

新建一个job

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

选择第一个然后填个名字,点ok

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

到构建中,创建一个Execute Windows batch command

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

将下面代码拷进去

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为你自己的账号。

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

接下来我们需要创建一个Windows powershell。这需要去下载powershell for jenkins的插件。

保存之后 点击Jenkins 回到主页面。

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

点击 系统管理,然后在右边选择点击 管理插件,在可选插件 项目下搜索Powershell,勾选点击直接安装。

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

安装完毕之后我们回到主页,再次点击 刚才新建的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结果。

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

这里我们将会遇到第一个坑,我加粗以表示重要。

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的服务。点击属性-登陆  可以看到默认是本地账号

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

那么我们需要修改为 你当前系统登陆的账号。点击此账号,进去浏览,搜索到你当前登陆的账号然后点击确定,记得重启服务。

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

再次查看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 把项目跟商店里面的项链接到一起,不链接起来的话,你做出来的包也没法上传。。

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

坑2 sln_name 这里要注意 必须是启动项.csproj而且不是.sln

保存之后,立即构建,完成之后你就可以在D:\Jenkins_Test\AppxPackages\ 文件夹下发现你的App 包了。。
UWP Jenkins + NuGet + MSBuild 手把手教你做自动UWP Build 和 App store包

坑3

因为项目中引用的一个package 是不支持Any CPU的,所以我们在项目里面删除了AnyCPU,注意我们删除了sln,以及各个子项目里面的AnyCPU

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

删除了之后我们再进行构建,毫无疑问报错了。

C:\Program Files (x86)\MSBuild\14.0\bin\Microsoft.Common.CurrentVersion.targets(,): 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

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

因为我们的子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包的更多相关文章

  1. Jenkins + NuGet + MSBuild

    Jenkins + NuGet + MSBuild 背景 项目上需要做UWP的自动安装包,在以前的公司接触的是TFS来做自动build. 公司要求用Jenkins来做,别笑话我,之前还真不晓得这个东西 ...

  2. 转载:手把手教你做iOS推送

    手把手教你做iOS推送 http://www.cocoachina.com/industry/20130321/5862.html

  3. 手把手教你做JavaWeb项目:登录模块

    现如今,无论是客户端还是移动端,无论是游戏登陆还是社交平台登陆,无处不在的“登陆”.那么你知道怎么制作吗?今天就为你娓娓道来: 用户登录 在各大信息管理系统中,登录功能是必不可少的,他的作用就是验证用 ...

  4. R数据分析:跟随top期刊手把手教你做一个临床预测模型

    临床预测模型也是大家比较感兴趣的,今天就带着大家看一篇临床预测模型的文章,并且用一个例子给大家过一遍做法. 这篇文章来自护理领域*期刊的文章,文章名在下面 Ballesta-Castillejos ...

  5. 手把手教你做个人 app

    我们都知道,开发一个app很大程度依赖服务端:服务端提供接口数据,然后我们展示:另外,开发一个app,还需要美工协助切图.没了接口,没了美工,app似乎只能做成单机版或工具类app,真的是这样的吗?先 ...

  6. 手把手教你做echarts图表系列之组织结构图

    在实际项目中使用echarts越来越多了,今天从一个组织结构图开始,手把手教大家开发echarts图表. 公司里的组织结构图如下: 可以参考echarts入门教程:http://echarts.bai ...

  7. 手把手教你做个AR涂涂乐

    前段时间公司有一个AR涂涂乐的项目,虽然之前接触过AR也写过小Demo,但是没有完整开发过AR项目.不过经过1个多星期的学习,现在已经把项目相关的技术都学会了,在此向互联网上那些乐于分享的程序员前辈们 ...

  8. 手把手教你做一个Shell命令窗口

    这是一个类似于win下面的cmd打开后的窗口,可以跨平台使用,可以在win和linux下面同时使用,主要功能如下: 首先我们需要把这些功能的目录写出来,通过写一个死循环,让其每次回车之后都可以保持同样 ...

  9. Android应用系列:手把手教你做一个小米通讯录(附图附源码)

    前言 最近心血来潮,突然想搞点仿制品玩玩,很不幸小米成为我苦逼的第一个试验品.既然雷布斯的MIUI挺受欢迎的(本人就是其的屌丝用户),所以就拿其中的一些小功能做一些小demo来玩玩.小米的通讯录大家估 ...

随机推荐

  1. Iptables 报错Couldn't load target `ACCET':/lib64/xtables/libipt_ACCET.so: cannot open shared object file

    [root@xxxx ~]# /etc/init.d/iptables restart iptables: Setting chains to policy ACCEPT: filter nat [ ...

  2. 增加SharePoint2010修改域密码功能

    转:http://blog.163.com/hr_test/blog/static/16485210720137953131694/ 前提 SharePoint2010的用户基于AD的,因此修改密码是 ...

  3. eclipse scons 使用指南

    http://sconsolidator.com/projects/sconsolidator/wiki/Getting_Started Add SCons support to an existin ...

  4. How to Analyze Java Thread Dumps--reference

    原文地址:http://architects.dzone.com/articles/how-analyze-java-thread-dumps The Performance Zone is pres ...

  5. 随笔: WC2016感想

    在某些时刻,我可以体会到非常复杂的情感,这种情感神秘的来源不能被描述.它非常的复杂.你无法分清,这种情感是来源于一个个神经元控制的情感系统的一时冲动,亦或是你如实地反馈了你所正在感知的外界. 但我曾在 ...

  6. BZOJ_2049_[Sdoi2008]Cave 洞穴勘测_LCT

    BZOJ_2049_[Sdoi2008]Cave 洞穴勘测_LCT Description 辉辉热衷于洞穴勘测.某天,他按照地图来到了一片被标记为JSZX的洞穴群地区.经过初步勘测,辉辉发现这片区域由 ...

  7. C# 多线程学习笔记 - 1

    本文主要针对 GKarch 相关文章留作笔记,仅在原文基础上记录了自己的理解与摘抄部分片段. 遵循原作者的 CC 3.0 协议. 如果想要了解更加详细的文章信息内容,请访问下列地址进行学习. 原文章地 ...

  8. Sasha and a Very Easy Test CodeForces - 1109E (数学,线段树)

    大意: 给定n元素序列, q个操作: (1)区间乘 (2)单点除(保证整除) (3)区间求和对m取模 要求回答所有操作(3)的结果 主要是除法难办, 假设单点除$x$, $x$中与$m$互素的素因子可 ...

  9. spring注解配置quartz

    常规配置quartz可以参考我的另外一篇博文:http://www.cnblogs.com/yangzhilong/p/3349116.html spring配置文件里增加: 命令空间: http:/ ...

  10. hql join

    文章一: 1.用hql语句 ` String hql="select student.id, student.name ,class.name from student映射实体类名 as s ...