zoukankan      html  css  js  c++  java
  • 最简单的window下使用Jenkins来做自动化部署的教程

    这里有个重点:

    要修改Jenkins服务的默认登录账号名称

    否则ps脚本跑起来有异常

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

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

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

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

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

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

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

    https://jenkins.io/download/

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

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

    https://blog.csdn.net/qq_16320025/article/details/82897577

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

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

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

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

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

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

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

    一套下来,打完收工.

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

    1.Jenkins创建自由风格的任务

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

    可参看如下链接:https://blog.csdn.net/ff55fff/article/details/76804966

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

    ps:下面给出详细的powershell脚本,非常简单这里就不详述了,大家一看代码就明白了

     1 net stop Test1Job
     2 
     3 C:WindowsSystem32inetsrvappcmd.exe stop site Test1.test.com
     4 C:WindowsSystem32inetsrvappcmd.exe stop site Test1.api.test.com
     5 
     6 
     7 C:WindowsSystem32inetsrvappcmd.exe stop apppool /apppool.name:"test1.test.com"
     8 C:WindowsSystem32inetsrvappcmd.exe stop apppool /apppool.name:"Test1.api.test.com"
     9 
    10 dir "$PSScriptRootlib" -Filter "*.ps1" | foreach {
    11  . $_.fullName
    12  Write-Host "Import $($_.fullName)"
    13 }
    14 
    15 
    16 
    17 
    18 #1.获取源码
    19 D:	est	oolsget_tfs.bat
    20 
    21 #2.编译源码
    22 dotnet build D:	estSourceMToolsSource-PromotionTest.API.csproj -nowarn:msb3202,nu1503,cs1591 #--no-restore
    23 echo API OK
    24 
    25 dotnet build D:	estSourceMToolsSource-PromotionTest.Web.csproj -nowarn:msb3202,nu1503,cs1591 #--no-restore
    26 echo WEB OK
    27 
    28 dotnet build D:	estSourceMToolsSource-PromotionTest.Job.WindowsService.csproj -nowarn:msb3202,nu1503,cs1591 #--no-restore  -v q
    29 echo job OK
    30 
    31 
    32 Sleep 20
    33 
    34 
    35 #3.发布
    36 
    37 CCopy D:	estSourceMToolsTest.Source-PromotionTest.APIinDebug
    etcoreapp2.1 D:TestTest1api
    38 CCopy D:	estSourceMToolsTest.Source-PromotionTest.WebinDebug
    etcoreapp2.1 D:TestTest1web
    39 CCopy D:	estSourceMToolsTest.Source-PromotionTest.Webwwwroot D:TestTest1webwwwroot
    40 CCopy D:	estSourceMToolsTest.Source-PromotionTest.Job.WindowsServiceinDebug
    etcoreapp2.1win-x64 D:TestTest1job
    41 
    42 
    43 
    44 net start Test1Job
    45 C:WindowsSystem32inetsrvappcmd.exe start site Test1.test.com
    46 C:WindowsSystem32inetsrvappcmd.exe start site Test1.api.test.com
    47 
    48 
    49 C:WindowsSystem32inetsrvappcmd.exe start apppool /apppool.name:"test1.test.com"
    50 C:WindowsSystem32inetsrvappcmd.exe start apppool /apppool.name:"Test1.api.test.com"
    51 
    52 
    53 Write-Host "success"
    54 Get-Date
    View Code
     1 function  CCopy($folder_a_path,$folder_b_path)
     2 {
     3     if(!(test-path $folder_b_path))
     4     {
     5         md $folder_b_path
     6     }
     7 
     8     #遍历源文件夹下所有文件
     9     $folders_a = gci $folder_a_path -Recurse
    10     foreach ($folder_a in $folders_a)
    11     {
    12     
    13      if($folder_a.fullname -like "*appsettings.json*")
    14      {
    15         continue
    16      }
    17     
    18       #通过替换的方式,取目标文件的全路径名称
    19       $b = $folder_a.fullname.replace($folder_a_path,$folder_b_path) 
    20       #判断目标文件是否存在,如果存在则先判断新旧
    21       If (test-path $b)
    22         {
    23          #判断目标是否为目录,如果是目录则跳过,如果不跳过,则会创建一级空目录
    24          If (!((gi $b).PSIsContainer))
    25           {
    26            #判断目标文件、源文件的新旧情况,如果目标已存在文件的修改时间早于源文件,则重新拷贝覆盖
    27            If ((gci $b).lastwritetime -lt $folder_a.lastwritetime)
    28             {
    29              copy-item $folder_a.fullname $b -force
    30             }
    31           }
    32         
    33         }
    34       #如果目标文件不存在,则直接拷贝
    35       Else
    36         {
    37          copy-item $folder_a.fullname $b
    38         }
    39         
    40     }
    41 }
    复制文件

    一套打完手工,大家有什么意见和建议,请提出~

    后续将进一步写通过powershell将程序发布到其他服务器上,以及发布完成以后,邮件告知结果

    "D:Program Files (x86)Microsoft Visual Studio2019EnterpriseCommon7IDECommonExtensionsMicrosoftTeamFoundationTeam ExplorerTF.exe" workspaces /collection:http://tfs.xx.net:8080/tfs/xxerp  /login:leishen,pwd
    
    "D:Program Files (x86)Microsoft Visual Studio2019EnterpriseCommon7IDECommonExtensionsMicrosoftTeamFoundationTeam ExplorerTF.exe" get  /recursive $/MTools /login:leishen,pwd
    TFS获取代码

    待续...

  • 相关阅读:
    Codeforces 1485C Floor and Mod (枚举)
    CodeForces 1195D Submarine in the Rybinsk Sea (算贡献)
    CodeForces 1195C Basketball Exercise (线性DP)
    2021年初寒假训练第24场 B. 庆功会(搜索)
    任务分配(dp)
    开发工具的异常现象
    Telink MESH SDK 如何使用PWM
    Telink BLE MESH PWM波的小结
    [LeetCode] 1586. Binary Search Tree Iterator II
    [LeetCode] 1288. Remove Covered Intervals
  • 原文地址:https://www.cnblogs.com/xinzhyu/p/10924311.html
Copyright © 2011-2022 走看看