zoukankan      html  css  js  c++  java
  • 通过Jenkins在IIS上布署站点

    当需要在多台服务器的IIS上布署站点时,如果纯粹靠人工手动完成此任务的话,过于低效,而借助Jenkins之类的自动化工具,则可以极大提升工作效率。

    以下便是Jenkins Pipeline所使用的脚本,它的DSL语法基于groovy,稍微学习一下的话,便能很快上手。在写这段脚本的时候,主要的难点是对是否已存在站点的判断。因为当执行appcmd list site /name:MyNewSite命令时,若是没有找到此站点,命令会返回非零的结果。而当Jenkins得到的是非零结果时,会认为是异常,将会停止整个脚本的运行。解决的办法是把bat方法中的可选参数returnStatus设置为true,这样做既能得到执行结果,又能让Jenkins正常地继续运行脚本。得到的执行结果若是零,说明该站点已经存在,可以先停掉它,复制完相关代码后再次启动;若是非零值,说明该站点不存在,可以执行一系列的建站操作。

    pipeline {
        agent any
        stages {
            stage("Deploy web application") {
                steps {
                    script {
                        def websiteFolder = 'C:\publish\MyNewSite'
                    
                        // 文件夹不存在的话就先创建它
                        if (!fileExists(websiteFolder)) {
                            bat 'mkdir -p ' + websiteFolder
                        }
    
                        def appcmd = 'C:\Windows\System32\inetsrv\appcmd.exe '
                        
                        // 判断是否已布署过该站点
                        def result = bat(returnStatus: true, script: appcmd + 'list site /name:"MyNewSite"')
                        if (result == 0) {
                            // 站点与应用程序池先停掉
                            appcmd + 'stop apppool /apppool.name:MyNewSite'
                            appcmd + 'stop site /site.name:MyNewSite'
    
                            // 复制需要发布的文件到websiteFolder目录下
    
                            // 站点与应用程序池重新启动
                            appcmd + 'start apppool /apppool.name:MyNewSite'
                            appcmd + 'start site /site.name:MyNewSite'                        
                        } else {
                            // 复制需要发布的文件到websiteFolder目录下            
                
                            // 未布署该站点场景,先创建站点并绑过端口号,以及物理路径
                            bat appcmd + 'add site /name:MyNewSite /bindings:"http/*:81:" /physicalPath:' + websiteFolder
                            // 再创建新的应用程序池,可以同时设置托管运行时的版本
                            bat appcmd + 'add apppool /name:MyNewSite /managedRuntimeVersion:v4.0'
                            // 将站点中应用程序所关联的应用程序池设置为新建的应用程序池
                            bat appcmd + 'set app /app.name:"MyNewSite/" /applicationPool:MyNewSite'
                        }                    
                    }
                }
            }
        }
    }
    

    相关资料:
    Jenkins Pipeline
    fileExists
    Windows Batch Script
    AppCmd

  • 相关阅读:
    2020-CCPC- 长春站
    cf2c(模拟退火 步长控制
    高精乘(fft板子
    2019南京网赛 The beautiful values of the palace(思维,树状数组
    2019ICPC网赛南京站B题 super_log(欧拉降幂
    Monument Tour(以前月赛卡住的签到题,今天突然想起拿出来补一补
    LightOJ 1289 LCM from 1 to n(位图标记+素数筛
    neuoj Blurred Pictures(小思维题
    hdu6219 Empty Convex Polygons (最大空凸包板子
    2018宁夏邀请赛 Continuous Intervals(单调栈 线段树
  • 原文地址:https://www.cnblogs.com/kenwoo/p/9131093.html
Copyright © 2011-2022 走看看