Jenkins + NuGet + MSBuild

摘要:
Jenkins+NuGet+MSBuild的后台项目需要执行UWP的自动安装包。过去,该公司联系TFS进行自动构建。公司要求詹金斯这样做。不要嘲笑我。我以前真的不知道这一点。首先,我们将准备两个安装包,Jenkins和NuGet,以下载最新的安装包。安装后,浏览器将自动跳转到http://localhost:8080/如下图所示,按照提示将GUID字符串复制到C:\ProgramFilesJenkinsecretsinialAdminPassword文件中,然后单击继续等待。保存后,单击Jenkins返回主页。最后,我修改了Jenkins服务以通过这个漏洞。输入服务并找到Jenkins服务。再次检查詹金斯系统信息,您可以看到家里发生了变化。。
Jenkins + NuGet + MSBuild 

背景

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

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

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

Jenkins + NuGet + MSBuild第1张

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

Jenkins + NuGet + MSBuild第2张

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

Jenkins + NuGet + MSBuild第3张

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

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

 Jenkins + NuGet + MSBuild第4张

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

新建一个job

Jenkins + NuGet + MSBuild第5张

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

Jenkins + NuGet + MSBuild第6张

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

Jenkins + NuGet + MSBuild第7张

 将下面代码拷进去

D:Jenkins_TestTools
uget.exe restore "D:Jenkins_TestProjectsApp1App1.sln" -ConfigFile "C:UsersxxxxAppDataRoamingNuGetNuGet.Config" -NoCache

这里我讲一下,我们事先在D盘创建了Jenkins_Test的文件夹,它下面的Tools文件夹是存放前面下载的nuget.exe。

restore 是 nuget 的一个命令,就是说把你项目D:Jenkins_TestProjectsApp1App1.sln需要的app package都按需下载下来。跟你用VS 编译项目的时候提示的restoring package是一样的。

后面的-ConfigFile 是指定configFlie,如果不写的话。默认是%AppData%NuGetNuGet.config is used. 我们这里使用的是你登陆windows 的xxxx账号下面的这个文件.

具体这些命令是干什么的。。还有哪些其他命令,请查看 nuget.exe-cli-reference. 记得改掉xxxx为你自己的账号。

Jenkins + NuGet + MSBuild第8张

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

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

Jenkins + NuGet + MSBuild第9张

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

Jenkins + NuGet + MSBuild第10张

安装完毕之后我们回到主页,再次点击 刚才新建的Test1 项目,进入之后点击配置。

这次在构建中,我们选择 Windows PowerShell。

拷贝下面code进去。

复制代码
# Path to Msbuild tool
# $msbuild = "[Path to MsBuild.exe. See below for reference]"
$msbuild = "C:Program Files (x86)MSBuild14.0inMSBuild.exe"
set-alias msbuild $msbuild
# solution settings
# $sln_name = "[Path to Solution File. See below for reference]"
$sln_name = "D:Jenkins_TestProjectsApp1App1.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结果。

Jenkins + NuGet + MSBuild第13张

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

build失败,我们点击下前面红色的球球。。查看日志。

CSC : error CS0006: Metadata file 'C:windowssystem32configsystemprofile.nugetpackagesSystem.ComponentModel4.0.0
ef
etcore50System.ComponentModel.dll' could not be found [D:Jenkins_TestProjectsApp1ClassLibrary1ClassLibrary1.csproj]

坑1

可以看到的是nuget store 是成功了,但是在build的时候它跑去找C:windowssystem32configsystemprofile.nugetpackages 下面的的packpage了,查看本地这个文件夹,根本就没有.nuget。

而.nuget其实是在我们当前user下面的 C:Usersxxxx

大量查看网上都没有查到有用的信息,而当我查看 Jenkins 系统管理-系统信息的时候我发现 Jenkins 默认的home就是在C:windowssystem32configsystemprofile这个下面,而且这是我们装系统的时候默认本地账号的位置。

想到这里我想第一件要做的事就是把home给改成C:Usersxxxx。

最后我通过修改Jenkins  服务通过这个坑。。

进入service,找到jenkins的服务。点击属性-登陆  可以看到默认是本地账号

Jenkins + NuGet + MSBuild第14张

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

Jenkins + NuGet + MSBuild第15张

再次查看jenkins 系统信息,已经看到home更改了。。去点击 立即创建。。。等待build完成。。

可以看到球球变成了蓝色,编译成功了。

这样我们就完成了自动编译。。这个使用场景我想应该是在代码服务器check in的时候自动做编译来检查 代码是否正确与否。

当然肯定需要写一些触发,本文没有做更多研究,有兴趣的同学可以自己研究交流。

下面我们要做App 包,就是那样给测试使用以及上传商店的包。

我们新建另一个Job,比如test2.

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

 将下面代码拷进去

D:Jenkins_TestTools
uget.exe restore "D:Jenkins_TestProjectsApp1App1.sln" -ConfigFile "C:UsersxxxxAppDataRoamingNuGetNuGet.Config" -NoCache

再创建Windows PowerShell

复制代码
# Path to Msbuild tool
# $msbuild = "[Path to MsBuild.exe. See below for reference]"
$msbuild = "C:Program Files (x86)MSBuild14.0inMSBuild.exe"
set-alias msbuild $msbuild
# solution settings
# $sln_name = "[Path to Solution File. See below for reference]"
$sln_name = "D:Jenkins_TestProjectsApp1App1App1.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_TestAppxPackages" /p:AppxBundle=Always /p:UapAppxPackageBuildMode=StoreUpload /p:AppxBundlePlatforms="x86|x64|arm"
复制代码

值得注意的是:

1.记得先用vs 把项目跟商店里面的项链接到一起,不链接起来的话,你做出来的包也没法上传。。

Jenkins + NuGet + MSBuild第18张

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

保存之后,立即构建,完成之后你就可以在D:Jenkins_TestAppxPackages 文件夹下发现你的App 包了。。
Jenkins + NuGet + MSBuild第19张

坑3

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

Jenkins + NuGet + MSBuild第20张

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

C:Program Files (x86)MSBuild14.0inMicrosoft.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_TestProjectsApp1ClassLibrary1ClassLibrary1.csproj]

研究了半天,发现启动项没有问题,于是把启动项和子project的项目文件拿来一对比。

左边启动项,右边子project

Jenkins + NuGet + MSBuild第21张

因为我们的子project也被删除了AnyCPU ,但是默认却还是使用的AnyCPU项,所以这才导致我们 nuget.exe restore 失败的。

既然我们这里子project已经没AnyCPU了,那么我们也把Platform设置默认x86.
修改完毕之后再次构建。。。完美! 成功。。

总结

上面就是我研究Jenkins + NuGet + MSBuild 手把手教你做自动UWP Build 和 App store包 所遇到的坑,图有点多,希望能帮到需要的同学。。

免责声明:文章转载自《Jenkins + NuGet + MSBuild》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇OpenCv 006---LUT的作用与用法const 指针与指向const的指针下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

Jenkins构建Maven多模块项目时,单独编译子模块,并且不触发构建其它模块

一、Jenkins构建Maven多模块项目时,单独编译子模块 配置: 1、Root POM指向父pom.xml 2、Goals and options指定构建模块的参数:mvn -pl jsoft-web -am clean package,单独构建jsoft-web项目以及它所依赖的其它项目。参考:http://www.cnblogs.com/Eason...

jenkins配置从节点

  1.     Jenkins多实例配置 在企业里面使用Jenkins自动部署+测试平台时,每天更新发布几个网站版本,不频繁,但是对于一些大型的企业来讲,Jenkins就需要同时处理很多的任务,这时候就需要借助Jenkins多个node或者我们所说的Jenkins分布式SLAVE,今天我们带大家来学习Jenkins多实例的配置; 添加Linux平台Je...

Jenkins打包出错

今天在公司,搭建完jenkins项目,在对项目进行测试打包的时候,发现报错无法打包。 报的是shell的错,我看了我要打包的这个项目的脚本和安装脚本目录错了修改了目录,结果还是报这个错误,结果看了jenkins上的项目,执行shell的配置,他没有shell脚本的基本语法,就在最开头加上了#!/bin/bash。 结果打包成功。 欢迎进群讨论:QQ群...

jenkins X实践系列(4) —— jenkins X 构建提速

jx是云原生CICD,devops的一个最佳实践之一,目前在快速的发展成熟中。最近调研了JX,这里为第4篇,介绍如何加入jx构建和部署。 builder镜像下载慢 先在一台机器上下载好,然后放到本地仓库,到jenkins的setting里,修改镜像地址 nodejs安装慢 配置使用私服 构建cnpm镜像 1 FROM jenkinsxio/bu...

Jenkins操作手册 巨详细,一篇足矣!

一、持续集成相关概念 1.1、什么是持续集成? 随着软件开发复杂度的不断提高,团队开发成员间如何更好的协同工作以确保软件开发的质量已经成为开发过程中不可回避的问题。尤其是近年来敏捷开发在软件领域越来越火,如何能在不间断变化的需求中快速适应和保证软件的质量显得尤其重要。持续集成正是针对这一问题的一种软件开发实践。它倡导团队开发成员必须经常集成他们的工作,甚至...

jenkins对测试脚本的构建步骤

使用Jenkins定时执行脚本 Jenkins是基于Java开发的一种持续集成工具,用于监控持续重复的工作,所以可用于定时执行python脚本。 环境准备:jdk1.7及以上+Jenkins[+tomcat(可选)] Jenkins的安装可以通过tomcat作为容器安装,由于Jenkins包就自带了servlet,所以我们只需要下载安装就可以直接启动。 j...