Jenkins部署使用文档(.Net,Vue项目)

149 阅读6分钟

​ 目录

本文要实现的功能: 在本地编写代码,编译通过后提交到Github/SVN. 服务器的Jenkins检测到有代码提交到Github,自动或者手动编译,生成发布版本的代码。 然后Jenkins调用FTP工具(或者一个批处理命令)将发布版本的代码传到IIS网站的目录下。 实现提交代码后,一键编译,直接访问。 工具介绍: jenkins:Java平台一种持续集成工具,可以实现自动化的发布,当然.net平台也有,但还没了解。实质就是它可以用配置的方式自动调用很多程序,实现自动化。 MSBuild:.net 平台的编译工具,我们用vs编译项目时,其实vs内部也是调用的MSBuild. Git/:代码管理工具 nuget:用于还原项目所引用的nuget包 node.js 编译vue webpack vue项目打包 开始安装: 既然jenkins是自动执行某些工具来实现我们的功能,那我们就先把所有步骤手动执行一次,如果没有问题,那么配置到jenkins上肯定也没有问题。以下工具都是在服务器上安装,我用的是虚拟机,win server 2008r2

安装IIS, 小伙,如果你连IIS都不会安装,就先别学jenkins了。^^ 安装.net framework4.6 在线安装:download.microsoft.com/download/1/… ,如果如果安装过,或有其他版本,建议卸载。 安装TargetingPack .NET Framework 4.6 Targeting Pack是一个程序包,使开发人员能够使用Visual Studio 2013,Visual Studio 2012或第三方IDE构建面向.NET Framework 4.6的应用程序。 官网下载:Download Microsoft .NET Framework 4.6 Targeting Pack from Official Microsoft Download Center nuget.exe 官网下载:NuGet Gallery | Downloads 安装git 官网下载:Git - Downloads jenkins 官网下载:Jenkins 将测试项目源代码(也可以从github中拉取到本地)test放到C:\inetpub\wwwroot目录,执行完下面的命令后会把项目需要的包都还原。

在cmd中输入 :

C:\Progra~2\NuGet\nuget.exe restore C:\inetpub\wwwroot\test\myobj.sln 显示下面这样,证明nuget是没问题的:

接下来是安装msbuild,直接在我电脑的vs安装目录下找到MSBuild文件夹,考到服务器中。(C:\Program Files (x86)\Microsoft Visual Studio\2017\Professional)

测试MSBuild是否可用:

C:\progra~2\MSBuild\15.0\Bin\MSBuild.exe /t:Build /p:Configuration=Release /p:WebProjectOutputDir=C:\inetpub\wwwroot\test\myweb\bin\v1 /p:OutputPath=C:\inetpub\wwwroot\test\myweb\bin\v1\bin C:\inetpub\wwwroot\test\myobj.sln 显示下面是可以用:

编译后v1文件夹中就出现发布后的文件:(可以把它配置到IIS上,看看编译后的程序能不能跑起来)

以上的步骤就是,编写代码》提交代码》将代码拉取到服务器》编译》发布,所有步骤我们都手动完成了,接下来就是用jenkins把这些步骤自动完成。

下面是后来写的blog,公司没用git ,代码管理用的svn。

jenkins配置: 下面的构建我全都用的windows batch 命令,所以不用安装插件,如果你安装了msbuild的插件,在“Global Tool Configuration”配置路径即可,我用命令程序路径什么的我是直接写到了脚本中。

新建项目:

点击确定后进入到项目的配置页面:

后台构建:构建>增加构建步骤>Execute Windows batch command(构建步骤是有顺序的,可以拖动排序)

//构建步骤1:用nuget还原包引用 D:\Progra1\NuGet\nuget.exe restore D:\progra1\Jenkins\workspace\Imanager\test\OES.sln //构建步骤2:使用MSBuild编译程序, WebProjectOutputDir是输出文件夹,progra1是路径简写,因为命令中单词不可以有空格 d:/progra1/micros1\2017\Enterprise\MSBuild\15.0\Bin\MSBuild.exe /t:Build /p:Configuration=Release /p:WebProjectOutputDir=C:\v1 /p:OutputPath=C:\v1\bin D:\progra1\Jenkins\workspace\Imanager\test\OES.sln 前台构建:在jenkins里要建三个构建步骤,"Execute Windows batch command",分开执行

//构建步骤3:进入到vue项目目录,还原包 cd D:\progra1\Jenkins\workspace\Imanager\test\OES.Admin\ImanagerHtml npm install //构建步骤4:执行编译 cd D:\progra1\Jenkins\workspace\Imanager\test\OES.Admin\ImanagerHtml npm run build //构建步骤5:进入vue根目录,把编译生成的dist文件夹内容全部复制到c:\v1\html 中,参数"/e"表示:复制目录和子目录,包括空的,"/y"表示:禁止提示以确认改写一个现存目标文件 cd D:\progra~1\Jenkins\workspace\Imanager\test\OES.Admin\ImanagerHtml xcopy dist c:\v1\html /e /y 构建步骤2 和 构建步骤5 相当于编译后发布到了同台服务器,如果web服务器和 jenkins不在一台机器上,可用powershell远程拷贝

remoteDirPath="DESKTOP9KAK340\remote"WriteHost连接远程主机...netuseremoteDirPath="\\DESKTOP-9KAK340\remote" Write-Host '连接远程主机...' net use remoteDirPath "zzl" /user:"lind" Write-Host '递归拷贝文件(强制覆盖模式)...'

$files = Get-ChildItem -Path "C:\Jenkins_Publish " # 获取本地目录下的文件
foreach($file in $files) {
    Copy-Item -Path $file.FullName -Destination $remoteDirPath -Include "*" -Exclude "" -Recurse -Force
}
Write-Host '目录拷贝完成!'

团队使用: 在服务器部署完本地可用http://localhost:8080,如果公司网络没有限制的话 http://外网地址:8080 也可以访问

在Jenkins主界面,“Manage Jenkins”》“Configure Global Security”

管理员增加其他成员:在Jenkins主界面,“Manage Jenkins”》Manage Users,同样,增加成员后要在安全矩阵中分配权限

优化问题:构建前端项目时,我是写到一个"Execute Windows batch command"的,但是不知道为什么执行完npm install,后面的代码就没有执行,所有就像上面写的,单独执行是没问题的。

cd D:\progra~1\Jenkins\workspace\Imanager\test\OES.Admin\ImanagerHtml npm install npm run build xcopy dist c:\v1\html /e /y 其他问题: 在服务器端build前端vue项目时,服务器环境的Node.js环境要和本地开发环境一样,即相同的node版本,webpback版本也要一致。

vm中我用的winserver2008r2 只有桥接模式才能联网,不知道为什么。 手动在命令行里执行命令时要以管理员模式运行,之前代码放到了C盘,在编译时生成新文件会提示没有权限无法写入。 现在用的vs是2017,.net framework版本4.6.1,把vs安装目录的 D:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise\MSBuild 复制到服务器中编译时总是不通过,原因:可能是vs版本问题,在编译时要用到D:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise\Common7\IDE 里面的东西,所以要把MSBuild和同级的Common7也复制到服务器中。(更粗暴的方式:直接在服务器安装和开发环境一样的Visual Studio) 关于自己:  擅长.NET  B/S结构,做过【Web系统】 【BI数据分析系统】  【CMS内容管理系统】 【微信平台相关开发(公众号,小程序)】

熟悉Linux Centos系统

QQ 1229145381(推荐)    微信:hanpanpan1326  备注:CSDN


2019/8/15更新

在使用的有个需求是:每次构建时想屏蔽web.config,文件,就是即使web.config提交了,构建时也不会发布,解决方案:

msbuild时先发布到临时文件夹,再用xcopy将临时文件赋值到iis对应的目录,这里要用一个参数exclude 来屏蔽特定文件。

将需要屏蔽的文件放到exclude.txt中即可

xcopy d:\webs\IFuture\temp d:\webs\IFuture /s/e/y/exclude:c:\Enterprise\exclude.txt