欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  网络运营

window下使用Jenkins来做自动化部署的教程图解

程序员文章站 2022-06-27 18:53:05
今天我们来说一下,如何使用jenkins+powershell脚本,将我们的.net core的脚本部署到对应的服务器上. 这里我们使用的源码管理工具是tfs.虽然源码管...

今天我们来说一下,如何使用jenkins+powershell脚本,将我们的.net core的脚本部署到对应的服务器上.

这里我们使用的源码管理工具是tfs.虽然源码管理器比较老旧,但是原理都差不多.

1.安装jre,因为我们的jenkins是基于java开发的,所以需要先在服务器上安装java的运行时环境

这个安装过程比较简单,百度下载jre,然后安装,暂且不表.

下载地址:https://www.java.com/en/download/manual.jsp

window下使用Jenkins来做自动化部署的教程图解

2.下载并安装jenkins,这里服务器是windows的,所以最好下载windows版本的,安装好以后直接就以windows服务的形式运行了.

这个安装过程也是非常的简单,网上教程很多.

window下使用Jenkins来做自动化部署的教程图解

3.安装好jenkins以后,根据需要我们安装权限插件,给不用的账号配置不通过的权限,(此步骤可选)

具体可参看此文章,说的很详细:

4.最关键的一步来了,就是如何使用jenkins来自动部署我们的代码.

这里主要分以下几个小点,下面我会贴出详细的代码.

1)获取tfs中的最新源码,这里我并没有通过jenkins去获取代码,而是通过tf命令去拉取代码的.

这样的好处就是,所有的jenkins任务的源代码,我都可以使用同一份,而不用每个任务单独去拉取一份代码.

2)拉取到代码以后,自然就是通过命令来编译我们的代码,熟悉.net的朋友们应该都知道,无非就那几个命令了

3)代码发布出来以后,自然就是要将代码copy到我们的站点或者windows服务下面去.

这一步也很简单,无非就是通过命令停止iis站点和应用程序池;copy代码;重启启动对应的站点即可

一套下来,打完收工.

下面贴出几个关键步骤的截图:

1.jenkins创建*风格的任务

window下使用Jenkins来做自动化部署的教程图解

2.其他什么都可以不选,只要我们使用powershell脚本,需要jenkins支持powershell也需要安装插件

window下使用Jenkins来做自动化部署的教程图解

3.点击保存,一套搞定.点击build now即可

window下使用Jenkins来做自动化部署的教程图解

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将程序发布到其他服务器上,以及发布完成以后,邮件告知结果

待续...

总结

以上所述是小编给大家介绍的window下使用jenkins来做自动化部署的教程图解,希望对大家有所帮助