| 
       
	目录 
	本文要实现的功能: 
	工具介绍: 
	开始安装: 
	jenkins配置: 
	团队使用: 
	其他问题: 
	关于自己:  
	本文要实现的功能: 
	在本地编写代码,编译通过后提交到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 在线安装:http://download.microsoft.com/download/1/4/A/14A6C422-0D3C-4811-A31F-5EF91A83C368/NDP46-KB3045560-Web.exe ,如果如果安装过,或有其他版本,建议卸载。 
	安装TargetingPack .NET Framework 4.6 Targeting Pack是一个程序包,使开发人员能够使用Visual Studio 2013,Visual Studio 2012或第三方IDE构建面向.NET Framework 4.6的应用程序。 官网下载:https://www.microsoft.com/en-us/download/details.aspx?id=48136 
	nuget.exe 官网下载:https://www.nuget.org/downloads 
	安装git 官网下载:https://git-scm.com/downloads 
	jenkins 官网下载:https://jenkins.io/zh/ 
	将测试项目源代码(也可以从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:\Progra~1\NuGet\nuget.exe restore D:\progra~1\Jenkins\workspace\Imanager\test\OES.sln 
	//构建步骤2:使用MSBuild编译程序, WebProjectOutputDir是输出文件夹,progra~1是路径简写,因为命令中单词不可以有空格 
	d:/progra~1/micros~1\2017\Enterprise\MSBuild\15.0\Bin\MSBuild.exe /t:Build /p:Configuration=Release /p:WebProjectOutputDir=C:\v1 /p:OutputPath=C:\v1\bin  D:\progra~1\Jenkins\workspace\Imanager\test\OES.sln 
	前台构建:在jenkins里要建三个构建步骤,"Execute Windows batch command",分开执行 
	//构建步骤3:进入到vue项目目录,还原包 
	cd D:\progra~1\Jenkins\workspace\Imanager\test\OES.Admin\ImanagerHtml 
	npm install 
	//构建步骤4:执行编译 
	cd D:\progra~1\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="\\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) 
		在使用的有个需求是:每次构建时想屏蔽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 
	(责任编辑:IT)  | 
    
