目录
本文要实现的功能:
工具介绍:
开始安装:
jenkins配置:
团队使用:
其他问题:
关于自己:
既然jenkins是自动执行某些工具来实现我们的功能,那我们就先把所有步骤手动执行一次,如果没有问题,那么配置到jenkins上肯定也没有问题。以下工具都是在服务器上安装,我用的是虚拟机,win server 2008r2
将测试项目源代码(也可以从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。
下面的构建我全都用的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
擅长.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