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

  • 相关阅读:
    Vasya and Endless Credits CodeForces
    Dreamoon and Strings CodeForces
    Online Meeting CodeForces
    数塔取数 基础dp
    1001 数组中和等于K的数对 1090 3个数和为0
    1091 线段的重叠
    51nod 最小周长
    走格子 51nod
    1289 大鱼吃小鱼
    POJ 1979 Red and Black
  • 原文地址:https://www.cnblogs.com/kenwoo/p/9131093.html
Copyright © 2011-2022 走看看