• 通过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

  • 相关阅读:
    算是鼓励自己吧
    那些年,我们一起追过的梦想
    敢问路在何方?
    关于红黑树旋转算法的一点说明
    存一下
    shell脚本变量
    ubuntukylin
    如何在批处理作业进行DEBUG
    IBM AS/400 应用系统开发的软件工程工具分析
    AS/400开发经验点滴(六)如何制作下拉菜单
  • 原文地址:https://www.cnblogs.com/kenwoo/p/9131093.html
Copyright © 2020-2023  润新知