Jenkins + NuGet + MSBuild
Jenkins + NuGet + MSBuild
背景
项目上需要做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.
修改完毕之后再次构建。。。完美! 成功。。
总结
上面就是我研究Jenkins + NuGet + MSBuild 手把手教你做自动UWP Build 和 App store包 所遇到的坑,图有点多,希望能帮到需要的同学。。
Jenkins + NuGet + MSBuild的更多相关文章
- UWP Jenkins + NuGet + MSBuild 手把手教你做自动UWP Build 和 App store包
背景 项目上需要做UWP的自动安装包,在以前的公司接触的是TFS来做自动build. 公司要求用Jenkins来做,别笑话我,之前还真不晓得这个东西. 会的同学请看一下指出错误,不会的同学请先自行脑补 ...
- Jenkins+gitlab+msbuild
配置gitlab 这里会生成一个token在页面上方,一定要复制出来.存在别的地方. jenkins配置gitlab 在jenkins服务器上安装vs,目的是使用它的msbuild,如果项目中还用到了 ...
- 自动化部署-Jenkins+SVN+MSBuild 一些补充
1.ftp的使用 系统管理->插件管理 安装插件Publish Over FTP 系统管理->系统设置 配置ftp参数 如下图 进入任务配置,添加构建后操作 在使用过程中还遇到一个本地防火 ...
- 自动化部署-Jenkins+SVN+MSBuild
这篇文章主要介绍下使用Jenkins实现自动化部署 下载 https://jenkins.io/download/ 安装 按步骤安装即可,下载的是windows版本,安装完成后,会看到这样一个正在运行 ...
- Jenkins配置MSBuild实现自动部署(MSBuild+SVN/Subversion+FTP+BAT)
所要用到的主要插件: [MSBuild Plugin] 具体操作: 1.配置MSBuild的版本 [系统管理]->[Global Tool Configuration]->[MSBuild ...
- Jenkins配置MSBuild实现自动部署2(项目实践)
继上一篇文章http://www.cnblogs.com/EasonJim/p/6077225.html,大致实现的思路,今天来记录一个真实项目实践. 一.新建项目 选择[构建一个自由风格的软件项目] ...
- Jenkins配置MSBuild时使用环境变量
[MSBuild Plugin]插件在使用环境变量有个很奇葩的方式,比如我们通常在Windows的节点机器上,使用WORKSPACE环境变量时,批处理应该这样写%WORKSPACE%,而有时插件确不能 ...
- Jenkins配置MSBuild编译.net4.6的项目
经过测试,如果用原始的msbuild,会出现语法无法识别的问题,"C:\Windows\Microsoft.NET\Framework64\v4.0.30319\MSBuild.exe&qu ...
- UWP Composition API - New FlexGrid 锁定行列
如果之前看了 UWP Jenkins + NuGet + MSBuild 手把手教你做自动UWP Build 和 App store包 这篇的童鞋,针对VS2017,需要对应更新一下配置,需要的童鞋点 ...
随机推荐
- Universal-Image-Loader完全解析(上)
Universal-Image-Loader完全解析(上) 基本介绍及使用 大家平时做项目的时候,或多或少都会接触到异步加载图片,或者大量加载图片的问题,而加载图片时候经常会遇到各种问题,如oom,图 ...
- Servlet开发配置
本文主要简单实践一下servlet开发相关开发 1.Servlet的创建 两种方法: 创建普通的java类,继承自HttpServlet类,在通过手动配置web.xml文件注册Servlet对象,比较 ...
- 本地预览图片html和js例子
本地预览图片html和js例子,直接上代码吧. <!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml" ...
- python 可变数据类型&不可变数据类型
在python中,数据类型分为可变数据类型和不可变数据类型,不可变数据类型包括string,int,float,tuple,可变数据类型包括list,dict. 所谓的可变与不可变,举例如下: > ...
- IOS开发之网络编程--文件压缩和解压缩
前言: QQ表情包就用到了解压缩,从网络下载的那么多表情文件格式并不是一个一个图片文件,而是多个图片压缩而成的表情压缩包.下面介绍的是iOS开发中会用到的压缩和解压缩的第三方框架的使用. 注意: 这个 ...
- 你连Bug都抓不住,还谈什么参与感?
林子大了什么鸟都有,APP市场也是这样.举个例子,有段时期图片社交井喷式发展,各类图片社交APP一时充斥着市场.各种或重视图片加工或主打社交元素的APP“来得快去得快”.“你方唱罢我登场”,这些短命A ...
- Erlang数据类型的表示和实现(5)——binary
binary 是 Erlang 中一个具有特色的数据结构,用于处理大块的“原始的”字节块.如果没有 binary 这种数据类型,在 Erlang 中处理字节流的话可能还需要像列表或元组这样的数据结构. ...
- 【mysql】索引的优化
写在前面的话 查询容易,优化不易,且写且珍惜 mysql结构 从MySQL逻辑架构来看,MySQL有三层架构,第一层连接,第二层查询解析.分析.优化.视图.缓存,第三层,存储引擎 MySQL有哪些索引 ...
- Sublime text3中配置Github
一.Git安装 到Git的 官网 上去下载相应环境的Git安装文件. 我的是win10,安装到D:\ProgramFiles\Git,在桌面右键出现下面两个红色框框就可以了. 二.Git配置及生成密钥 ...
- CSS中的 backgroundPosition 属性
body { background-image:url('bgimage.gif'); background-repeat:no-repeat; background-attachment:fixed ...