Jekins 如何部署.net framework项目

说明:本文中,“构建”“持续构建”“编译”“生成”的用法并不严谨,大概知道是什么意思就行。

首先说明,持续构建的话,是需要用到命令行的。
但dotnet core的命令似乎比dotnet framework的项目要简单一点。
因为dotnetcore 的构建命令是 dotnet msbuild xxxxx.csproj/yyyyy.sln
而 dotnet framework的构建命令是 .../msbuild.exe xxxx.csproj/yyyyy.sln,而其中最让人(主要是没掉过坑的人,掉过就好了)困惑的是这个msbuild.exe究竟是哪里的msbuild.exe ?毕竟windows中安装了dotnet framework SDK 或者不同版本的visual studio之后,是会有很多的msbuild.exe的,让人不明白究竟该用哪个而已。


下面开始讲解在windows中如何构建一个 dotnet framework 项目,其中为了不让项目本身的复杂度影响了主体思路,这里就认为是要构建的是一个类似于 Hello World 的简单控制台项目。
综上,环境:
开发机,windows pc;
发布机器,windows server;
项目,一个简单的dot net framework 控制台项目。(我这里使用了4.5.2版本)


  1. 开发机上新建项目,最好是用代码管理如git初始化,使得项目可以在其他机器上在有网的情况下可以clone得到。
  2. 开发机上随便在项目里写点什么,只要能编译通过就行。比如hello world
    另外,建议项目中添加一点对于nuget包的依赖,随便选点什么,比如 log4net引用。
  3. 在开发机上尝试编译项目。
    (经过多次尝试,确认了命令行编译项目时候应该使用C:\windows\Microsoft .NET\Framework\v4.xxx\msbuild.exe 这个msbuild.exe。不过具体还是根据项目类型,选择是Framework64还是不带64,是v4.xxx还是3.x,2.x,这个意思很简单,看不懂就没救了)
    如果项目在C:\projects\test 路径下,那么编译的命令应该是

C:\windows\Microsoft .NET\Framework\v4.xxx\msbuild.exe C:\projects\test\test.sln

或者

 C:\windows\Microsoft .NET\Framework\v4.xxx\msbuild.exe C:\projects\test\test\test.csproj

当然可能还需要带 诸如 /p:Configuration=Release /p:plotform="Any CPU"等其余参数,自己看情况办。
4. 在测试机上,git clone项目,并用同样命令尝试编译项目。
5. 如果不成功, 就要不断尝试正确的msbuild.exe 和路径,参数等,只要环境没有问题,就一定可以成功。
6. 但是,这里一个非常让人抓狂的问题来了,nuget依赖怎么办呢?现在我编译没有明显问题,只是我怎么知道该到哪去找nuget包呢?
这个问题就卡了我很久。
上nuget官网,下载nuget.exe文件。
经尝试,这个文件放在项目中(即跟sln或者csproj文件同级的目录下,执行 nuget.exe restore 命令,则可获取到需要的nuget包。这也就是我经过多次尝试后得到的经验)
那么,你可以在脚本中添加操作,每次都执行nuget.exe restore命令。
也可以将nuget.exe添加到环境变量(不解释),然后每次都执行,这样会方便一点。
7.最后再测试,发现发布机器上通过这样的操作和命令,完全可以成功编译项目。
这离最终的成功已经很近了。
实际上,对于理解何为jekins的人来说,这件事到这里就已经完毕了,剩下的都可以自己完成。


1.上jekins官网,下载,安装,启动jekins,注册账户,不解释。dotnet 项目则需要安装msbuild ,mstest ,mstestrunner插件。
2.jenkins全局配置msbuild。
Jekins 如何部署.net framework项目_第1张图片
3. 新建项目,配置项目
Jekins 如何部署.net framework项目_第2张图片
4. 构建项目。
基本上构建成功,不成功也好排查。

其实关于jekins的使用,更多的一共是自己学习,多次尝试,才能明白。


这其实是一篇信息量很大的博文,先暂时记录一下,以后有机会再整理。没有机会就这样了。


补充:

1.如果开发机用VS可以编译成功,但命令行中提示有不支持的语法。
那么可能是开发机用了更高级的语法规则编译(尽管项目是基于.net framework 4.5.2的),比如用了C#6.0
而发布机器只安装了.net framework 4.5.2,那么就不支持有些最新的语法。
所以在这种情况下,在发布机器上安装最新的sdk。
如图。
微软官网SDK下载
下载相应的SDK即可。
SDK里面已经包含了Runtime。

2.如果Jekins的Job里需要用到windows的bat命令进行一系列操作,那么使用Jenkins的“ 参阅 可用环境变量列表 ” 会有一定帮助。
写法如 “%WORKSPACE%”

3.如果路径中有空格,如 C:\Program Files (x86)\Microsoft.NET,则有必要在变量两边都加上双引号。
如:

echo %WORKSPACE%

rem 真实路径
set RootFolderPath=%WORKSPACE%
set SourceFolder=%RootFolderPath%\BE\QDMicePayment\QDMice.Payment\SMS_Service
set InstallUtilPath=C:\Windows\Microsoft.NET\Framework\v4.0.30319
set DestExePath=%SourceFolder%\bin\Release\SMS_Service.exe
set ServiceName=SMS_Service

rem 停止,卸载服务
net stop %ServiceName%
%InstallUtilPath%\InstallUtil.exe -u "%DestExePath%"

rem 安装,启动服务
echo %InstallUtilPath%\InstallUtil.exe "%DestExePath%"
%InstallUtilPath%\InstallUtil.exe "%DestExePath%"

echo net start %ServiceName%
net start %ServiceName%

你可能感兴趣的:(运维,架构,技术方案,.net,core,.NET)