通过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
通过Jenkins在IIS上布署站点的更多相关文章
- 在公网上布署Web Api的时候,不能调用,返回404
在internet上布署web API做的站点时,发现不能调用web api的任何action, 返回404. 经过很多的努力,也找不到原因,环境是win server 2008, IIS 75. n ...
- 在 IIS 上创建 FTP 站点
微软参考文档: 在 IIS 上生成 FTP 站点 主要过程: 1.控制面板 -> 程序 -> 启动或关闭Windows功能 -> 将Internet Information Serv ...
- 在IIS上搭建FTP站点
操作环境 系统:win7 IIS版本:7.5 FTP传输工具:FlashXP 概述 本文介绍了如何在win7下利用IIS(默认已安装IIS和FTP功能)搭建FTP站点,FTP站点的常用配置. 快速搭建 ...
- 用OpenSSL生成自签名证书在IIS上搭建Https站点(用于iOS的https访问)
前提: 先安装openssl,安装有两种方式,第一种直接下载安装包,装上就可运行:第二种可以自己下载源码,自己编译.这里推荐第一种. 安装包:http://slproweb.com/products/ ...
- ansible+packer+terraform在aws上布署web服务器
各工具所扮演的角色 ansible: 配合packer生成安装有apache的基础镜像 packer: 生成amazon AMI terraform: 以packer生成的镜像为基础,布署web服务器 ...
- OpenSSL使用1(用OpenSSL生成自签名证书在IIS上搭建Https站点)(用于iOS的https访问)
前提: 先安装openssl,安装有两种方式,第一种直接下载安装包,装上就可运行:第二种可以自己下载源码,自己编译.这里推荐第一种. 安装包:http://slproweb.com/products/ ...
- 在IIS上创建FTP服务
1 在IIS上创建 ftp站点, 然后设定端口号. 2 设定权限: 追加Everyone,IIS_IUSRS,并设定可读可写. 3 设定FTP授权规则:
- 运行Vue在ASP.NET Core应用程序并部署在IIS上
前言 项目一直用的ASP.NET Core,但是呢我对ASP.NET Core一些原理也还未开始研究,仅限于会用,不过园子中已有大量文章存在,借着有点空余时间,我们来讲讲如何利用ASP.NET Cor ...
- IIS6.0中布署MVC站点(转)
昨晚我写的API上线,API是vs2010 + MVC4开发的,需要布署到windows 2003 server + IIS6.0的环境中,之前一直是布在IIS7.0,比较熟悉, 换到IIS6.0,添 ...
随机推荐
- windows10多桌面创建 切换 和分屏
windows键+Tab 可以创建和切换新的桌面 win+ctrl+左右箭头 可以切换桌面 Aero Snap是Win7时代增加的一项窗口排列功能,俗称“分屏”.一个最简单例子,就是当你把窗口拖至屏幕 ...
- PC端和移动端在前端开发上的一些区别,前端里移动端到底比pc端多哪些知识
(1)———————— 前端里移动端到底比pc端多哪些知识,为啥面试时好多公司都问h5水平如何?我做过几年的web前端开发,就简单谈谈自己的感受吧.首先来看看PC端和移动端在前端开发上的一些区别: ( ...
- Nginx 状态信息功能配置
Nginx 状态信息功能介绍 Nginx 有一个 ngx_http_stub_status_module 模块,主要功能是记录 Nginx 的基本访问状态信息,让使用者了解 Nginx 的工作状态 要 ...
- [转]ssh和SSH服务(包含隧道内容)
本文对SSH连接验证机制进行了非常详细的分析,还详细介绍了ssh客户端工具的各种功能,相信能让各位对ssh有个全方位较透彻的了解,而不是仅仅只会用它来连接远程主机. 另外,本人翻译了ssh客户端命令的 ...
- Error loading page Domain: WebKitErrorDomain Error Code: 101
使用 WebView 组件,loading的过程中出现这个错误. 解决方案: webVIew 里面加 renderError={ (e) => { if (e === 'WebKitErrorD ...
- request.GetResponse()超时的解决办法
var request = (HttpWebRequest)WebRequest.Create(url); request.Timeout = Timeout.Infinite; request.Ke ...
- [svc]通过bridge连接单机的多个网络namespace
ip操作物理网卡 参考: http://www.cnblogs.com/iiiiher/p/8056930.html - 查看mac/操作物理网卡 ip link - 查看ip/mac ip a - ...
- 菜鸟教程之工具使用(九)——Git如何进行分支的merge操作
今天继续我们的Git教程,Git杀手锏级的功能就是对于分支的管理,那么今天就来说说分支之间的merge操作.merge可以说是我们日常使用最多的操作之一,通常一个merge操作会包含commit.pu ...
- oracle中decode的用法(例子)
使用结构: decode(条件,值1,返回值1,值2,返回值2,...值n,返回值n,缺省值) 该函数的含义如下: IF 条件=值1 THEN RETURN(翻译值1)ELSIF 条件=值2 THEN ...
- JVM——垃圾回收(GC)
GC简单介绍 java语言执行在java虚拟机(jvm)上.为了解决有限的空间和性能的保证这个矛盾体,jvm所具备的GC能力.能够有效的清除不用的对象.使空间的利用更加合理.以下介绍该机制的原理. 推 ...