window下使用Jenkins来做自动化部署的教程图解
今天我们来说一下,如何使用Jenkins+powershell脚本,将我们的.NET CORE的脚本部署到对应的服务器上.
这里我们使用的源码管理工具是TFS.虽然源码管理器比较老旧,但是原理都差不多.
1.安装Jre,因为我们的Jenkins是基于java开发的,所以需要先在服务器上安装java的运行时环境
这个安装过程比较简单,百度下载JRE,然后安装,暂且不表.
下载地址:https://www.java.com/en/download/manual.jsp
2.下载并安装Jenkins,这里服务器是Windows的,所以最好下载Windows版本的,安装好以后直接就以Windows服务的形式运行了.
这个安装过程也是非常的简单,网上教程很多.
3.安装好Jenkins以后,根据需要我们安装权限插件,给不用的账号配置不通过的权限,(此步骤可选)
具体可参看此文章,说的很详细:
https://www.jb51.net/article/161947.htm
4.最关键的一步来了,就是如何使用Jenkins来自动部署我们的代码.
这里主要分以下几个小点,下面我会贴出详细的代码.
1)获取TFS中的最新源码,这里我并没有通过Jenkins去获取代码,而是通过tf命令去拉取代码的.
这样的好处就是,所有的Jenkins任务的源代码,我都可以使用同一份,而不用每个任务单独去拉取一份代码.
2)拉取到代码以后,自然就是通过命令来编译我们的代码,熟悉.net的朋友们应该都知道,无非就那几个命令了
3)代码发布出来以后,自然就是要将代码copy到我们的站点或者Windows服务下面去.
这一步也很简单,无非就是通过命令停止iis站点和应用程序池;copy代码;重启启动对应的站点即可
一套下来,打完收工.
下面贴出几个关键步骤的截图:
1.Jenkins创建自由风格的任务
2.其他什么都可以不选,只要我们使用powershell脚本,需要Jenkins支持powershell也需要安装插件
3.点击保存,一套搞定.点击build now即可
ps:下面给出详细的powershell脚本,非常简单这里就不详述了,大家一看代码就明白了
net stop Test1Job C:\Windows\System32\inetsrv\appcmd.exe stop site Test1.test.com C:\Windows\System32\inetsrv\appcmd.exe stop site Test1.api.test.com C:\Windows\System32\inetsrv\appcmd.exe stop apppool /apppool.name:"test1.test.com" C:\Windows\System32\inetsrv\appcmd.exe stop apppool /apppool.name:"Test1.api.test.com" dir "$PSScriptRoot\lib" -Filter "*.ps1" | foreach { . $_.fullName Write-Host "Import $($_.fullName)" } #1.获取源码 D:\test\tools\get_tfs.bat #2.编译源码 dotnet build D:\test\Source\MTools\Source-Promotion\Test.API.csproj -nowarn:msb3202,nu1503,cs1591 #--no-restore echo API OK dotnet build D:\test\Source\MTools\Source-Promotion\Test.Web.csproj -nowarn:msb3202,nu1503,cs1591 #--no-restore echo WEB OK dotnet build D:\test\Source\MTools\Source-Promotion\Test.Job.WindowsService.csproj -nowarn:msb3202,nu1503,cs1591 #--no-restore -v q echo job OK Sleep 20 #3.发布 CCopy D:\test\Source\MTools\Test.\Source-Promotion\Test.API\bin\Debug\netcoreapp2.1 D:\Test\Test1\api CCopy D:\test\Source\MTools\Test.\Source-Promotion\Test.Web\bin\Debug\netcoreapp2.1 D:\Test\Test1\web CCopy D:\test\Source\MTools\Test.\Source-Promotion\Test.Web\wwwroot D:\Test\Test1\web\wwwroot CCopy D:\test\Source\MTools\Test.\Source-Promotion\Test.Job.WindowsService\bin\Debug\netcoreapp2.1\win-x64 D:\Test\Test1\job net start Test1Job C:\Windows\System32\inetsrv\appcmd.exe start site Test1.test.com C:\Windows\System32\inetsrv\appcmd.exe start site Test1.api.test.com C:\Windows\System32\inetsrv\appcmd.exe start apppool /apppool.name:"test1.test.com" C:\Windows\System32\inetsrv\appcmd.exe start apppool /apppool.name:"Test1.api.test.com" Write-Host "success" Get-Date
function CCopy($folder_a_path,$folder_b_path) { if(!(test-path $folder_b_path)) { md $folder_b_path } #遍历源文件夹下所有文件 $folders_a = gci $folder_a_path -Recurse foreach ($folder_a in $folders_a) { if($folder_a.fullname -like "*appsettings.json*") { continue } #通过替换的方式,取目标文件的全路径名称 $b = $folder_a.fullname.replace($folder_a_path,$folder_b_path) #判断目标文件是否存在,如果存在则先判断新旧 If (test-path $b) { #判断目标是否为目录,如果是目录则跳过,如果不跳过,则会创建一级空目录 If (!((gi $b).PSIsContainer)) { #判断目标文件、源文件的新旧情况,如果目标已存在文件的修改时间早于源文件,则重新拷贝覆盖 If ((gci $b).lastwritetime -lt $folder_a.lastwritetime) { copy-item $folder_a.fullname $b -force } } } #如果目标文件不存在,则直接拷贝 Else { copy-item $folder_a.fullname $b } } }
一套打完手工,大家有什么意见和建议,请提出~
后续将进一步写通过powershell将程序发布到其他服务器上,以及发布完成以后,邮件告知结果
待续...
总结
上一篇:rashost的windows VPS重装系统的方法
栏 目:Windows
下一篇:Win2003 IIS浏览ASP提示无法找到该页的解决办法
本文标题:window下使用Jenkins来做自动化部署的教程图解
本文地址:http://www.codeinn.net/misctech/8443.html
阅读排行
- 1win2003 service pack2 IIS 无法复制CONVLOG.EXE CONVLOG.EX_问题处理
- 2Windows Server 2008 R2 DNS 服务器迁移方法
- 3win2008 IP安全策略关闭端口、禁止ping、修改远程连接3389端口、开放指定端口
- 4man -f/-k [keyword]在fedora 29 中报错nothing appropriate
- 5IP策略实现服务器禁止Ping
- 6win2003开机自动登录后锁定
- 7本地策略提示不能确定应用到此机器的组策略安全性设置的解决方法
- 8限制Win9X/NT系统功能二十六招
- 9windows10彻底关闭自动更新【绝对可行】
- 10win2003 3389手工修改方法