`
lnj
  • 浏览: 52864 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

nant的典型应用——部署windows服务

阅读更多
请首先浏览本文上一篇文章《nant的典型应用——部署web站点》

windows服务与web站点的区别在于nant构建脚本略有不同,大体上还是分为获取源代码、编译类库、编译windows服务几个步骤,不同的是安装/反安装服务步骤。示例构建脚本如下:
<?xml version="1.0" encoding="utf-8" ?>
<!-- 项目名称,只用于显示 -->
<project name="project_name" >
    <!-- 使用NAnt.Contrib,指定Contrib的路径 -->
    <loadtasks assembly="C:/OneClickDeploy/nantcontrib-0.86/NAnt.Contrib.Tasks.dll" />

    <!-- 源代码环境配置 -->
    <!-- 源代码输出路径,默认为输出到当前文件夹下的src文件夹 -->
    <property name="source.outdir" value="src"/>
    <!-- svn服务器地址 -->
    <property name="source.svn.path" value="svn://server/trunk/win_service0"/>
    <!-- svn用户名 -->
    <property name="source.svn.username" value="user"/>
    <!-- svn密码 -->
    <property name="source.svn.password" value="pass"/>

    <!--
    ***************************************************************************
    更新代码:如果代码已签出,执行update命令,否则执行checkout命令,一般不需要修改
    ***************************************************************************
    -->
    <target name="source">
        <if test="${directory::exists(source.outdir)}">
            <echo message="更新代码${source.svn.path}"/>
            <svn-update uri="${source.svn.path}" destination="${source.outdir}" username="${source.svn.username}" password="${source.svn.password}" verbose="false" />
        </if>
        <if test="${not directory::exists(source.outdir)}">
            <echo message="签出代码${source.svn.path}"/>
            <mkdir dir="${source.outdir}"/>
            <svn-checkout uri="${source.svn.path}" destination="${source.outdir}" username="${source.svn.username}" password="${source.svn.password}" verbose="false" cache-auth="false" />
        </if>
    </target>

    <!--
        编译代码“函数”
        compile.target:exe, winexe, library or module
        compile.assembly: 程序集
        compile.outdir: 输出路径
        complie.debug: true/false
     -->
    <target name="compile">
        <!-- 生成编译后的文件名 -->
        <if test="${compile.target=='library'}">
            <property name="compile.output" value="${compile.assembly}.dll"/>
        </if>
        <if test="${compile.target=='winexe'}">
            <property name="compile.output" value="${compile.assembly}.exe"/>
        </if>
        <csc target="${compile.target}" output="${path::combine(compile.outdir, compile.output)}" debug="${compile.debug}" optimize="true" verbose="false">
            <sources>
		<!-- 编译所有cs文件 -->
                <include name="${source.outdir}/${compile.assembly}/**/*.cs" />
            </sources>
            <references>
		<!-- 编译引用的dll文件,我将依赖的dll放到了svn://server/trunk/web0/Assembly文件夹下,所以这里需要制定引用Assembly下的所有dll文件 -->
                <include name="${source.outdir}/Assembly/**/*.dll" />
		<!-- 引用编译结果文件夹下的所有dll文件,一般来说类库项目之间也存在应用关系,基础类库编译完成后将编译结果dll存放compile.outdir文件夹下,编译业务类库时需要引用基础类库,因此需要引用compile.outdir下的所有dll -->
                <include name="${compile.outdir}/**/*.dll" />
		<!-- 排除引用的dll文件 -->
                <exclude name="${source.outdir}/Assembly/**/libmySQL.dll"/>
            </references>
            <resources>
		<!-- 嵌入的资源,需要将nhibernate映射文件作为嵌入的资源,编译到程序集中 -->
                <include name="${source.outdir}/${compile.assembly}/**/*.hbm.xml" />
            </resources>
        </csc>
    </target>

    <!--
    ***************************************************************************
    构建服务
    ***************************************************************************
    compile.debug:
    /debug [+/-] :当选用/debug +就会把创建.pdb文件,并把调试信息存储到里面;/debug -是一个缺省设置,就是不产生任何调试信息。
    /debug:[full/pdbonly] :当使用/debug:full就是创建缺省的调试信息,有点类似/debug+选项。/debug: pdbonly选项是创建.pdb文件,并且你只能使用源代码调试在调试工具里。
    compile.outdir:
    编译结果输出文件夹
    -->
    <property name="compile.debug" value="PdbOnly"/>
    <property name="compile.outdir" value="bin/sms"/>
    <target name="compile-sms" description="编译服务">
        <echo message="编译服务"/>
        <delete dir="${compile.outdir}" verbose="true" if="${directory::exists(compile.outdir)}" />
        <mkdir dir="${compile.outdir}"/>

        <property name="compile.assembly" value="Common"/>
        <property name="compile.target" value="library"/>
        <call target="compile" />

        <property name="compile.assembly" value="Business"/>
        <property name="compile.target" value="library"/>
        <call target="compile" />

        <property name="compile.assembly" value="Sms"/>
        <property name="compile.target" value="winexe"/>
        <call target="compile" />       
    </target>

    <!--
    ***************************************************************************
    部署服务
    ***************************************************************************
    -->
    <!-- 服务名称 -->
    <property name="service.name" value="WinServic"/>
    <!-- 服务运行路径 -->
    <property name="deploy.rundir" value="C:/WinServic"/>
    <target name="deploy-service" description="部署服务">
        <echo message="部署服务"/>

        <property name="service.path" value="${deploy.rundir}/${service.name}.exe"/>
        <!-- 卸载原服务 -->
        <if test="${file::exists(service.path)}">
            <exec program="installutil">
                <arg value="${service.path}" />
                <arg value="/u" />
                <arg value="/LogFile" />
            </exec>
        </if>
        <!-- 将编译结果复制到运行目录 -->
	<delete dir="${deploy.rundir}" if="${directory::exists(deploy.rundir)}" />
        <copy todir="${deploy.rundir}">
            <fileset basedir="${compile.outdir}">
                <include name="/**/*.*"/>
            </fileset>
        </copy>
        <!-- 复制配置文件 -->
        <copy todir="${deploy.rundir}">
            <fileset basedir="${source.outdir}/Sms">
                <include name="_config/**/*.*"/>
            </fileset>
        </copy>
        <!-- 复制依赖类库 -->
        <copy todir="${deploy.rundir}">
            <fileset basedir="${source.outdir}/Assembly">
                <include name="Antlr3.Runtime.dll" />
                <include name="Iesi.Collections.dll" />
                <include name="NHibernate.ByteCode.LinFu.dll" />
                <include name="NHibernate.dll" />
                <include name="LinFu.DynamicProxy.dll" />

                <include name="ImApiDotNet.dll" />
                <include name="libmySQL.dll" />

                <include name="log4net.dll" />
                <include name="Newtonsoft.Json.dll" />
            </fileset>
        </copy>
        <!--安装服务-->
        <exec program="installutil">
            <arg value="${service.path}" />
            <arg value="/LogFile" />
        </exec>
    </target>

    <!--
    ***************************************************************************
    启动服务
    ***************************************************************************
    -->
    <target name="run-service" description="启动服务">
        <echo message="启动服务"/>
        <!-- 启动服务 -->
        <servicecontroller action="Start" service="${service.name}" verbose="true" />
    </target>
</project>


使用
将上面的构建文件保存在任意文件夹下,如c:\deploy\service.build,并在这个文件夹下创建批处理脚本deploy-service.bat
path=C:\OneClickDeploy\nant-0.86;C:\OneClickDeploy\SlikSvn;C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727
nant -t:net-3.5 -buildfile:service.build source compile-service deploy-service run-service
pause

运行deploy-service.bat,首先会设置nant、svn、.net2.0 framework的路径,然后使用构建脚本进行部署:
1.更新源代码,首次运行会签出源代码
2.编译类库,示例中为Common、Business
3.编译服务代码
4.卸载原服务
5.将编译结果及依赖类库复制到运行目录
6.安装新服务
7.启动服务
分享到:
评论

相关推荐

    k8s1.16的jenkins部署java项目cicd(cd手动)-kubernetes安装包和详细文档笔记整理

    k8s1.16的jenkins部署java项目cicd(cd手动)-kubernetes安装包和详细文档笔记整理

    sja1311.x86_64.tar.gz

    SQLyong 各个版本,免费下载 SQLyog是业界著名的Webyog公司出品的一款简洁高效、功能强大的图形化MySQL数据库管理工具。使用SQLyog可以快速直观地让您从世界的任何角落通过网络来维护远端的MySQL数据库。

    debugpy-1.1.0-cp34-cp34m-manylinux1_x86_64.whl

    Python库是一组预先编写的代码模块,旨在帮助开发者实现特定的编程任务,无需从零开始编写代码。这些库可以包括各种功能,如数学运算、文件操作、数据分析和网络编程等。Python社区提供了大量的第三方库,如NumPy、Pandas和Requests,极大地丰富了Python的应用领域,从数据科学到Web开发。Python库的丰富性是Python成为最受欢迎的编程语言之一的关键原因之一。这些库不仅为初学者提供了快速入门的途径,而且为经验丰富的开发者提供了强大的工具,以高效率、高质量地完成复杂任务。例如,Matplotlib和Seaborn库在数据可视化领域内非常受欢迎,它们提供了广泛的工具和技术,可以创建高度定制化的图表和图形,帮助数据科学家和分析师在数据探索和结果展示中更有效地传达信息。

    SQLyog-12.5.0-0.x64Community.exe

    SQLyog-12.5.0-0.x64Community

    debugpy-1.0.0b12-cp35-cp35m-manylinux1_i686.whl

    Python库是一组预先编写的代码模块,旨在帮助开发者实现特定的编程任务,无需从零开始编写代码。这些库可以包括各种功能,如数学运算、文件操作、数据分析和网络编程等。Python社区提供了大量的第三方库,如NumPy、Pandas和Requests,极大地丰富了Python的应用领域,从数据科学到Web开发。Python库的丰富性是Python成为最受欢迎的编程语言之一的关键原因之一。这些库不仅为初学者提供了快速入门的途径,而且为经验丰富的开发者提供了强大的工具,以高效率、高质量地完成复杂任务。例如,Matplotlib和Seaborn库在数据可视化领域内非常受欢迎,它们提供了广泛的工具和技术,可以创建高度定制化的图表和图形,帮助数据科学家和分析师在数据探索和结果展示中更有效地传达信息。

    SQLyog-12.1.6-0.x86Community.exe

    SQLyong.exe 各个版本,免费下载 SQLyog是业界著名的Webyog公司出品的一款简洁高效、功能强大的图形化MySQL数据库管理工具。使用SQLyog可以快速直观地让您从世界的任何角落通过网络来维护远端的MySQL数据库。

    python课程设计大作业问答系统源码.zip

    python课程设计大作业问答系统源码.zip python课程设计大作业问答系统源码.zippython课程设计大作业问答系统源码.zippython课程设计大作业问答系统源码.zippython课程设计大作业问答系统源码.zippython课程设计大作业问答系统源码.zippython课程设计大作业问答系统源码.zippython课程设计大作业问答系统源码.zippython课程设计大作业问答系统源码.zippython课程设计大作业问答系统源码.zippython课程设计大作业问答系统源码.zippython课程设计大作业问答系统源码.zippython课程设计大作业问答系统源码.zippython课程设计大作业问答系统源码.zippython课程设计大作业问答系统源码.zippython课程设计大作业问答系统源码.zippython课程设计大作业问答系统源码.zippython课程设计大作业问答系统源码.zippython课程设计大作业问答系统源码.zippython课程设计大作业问答系统源码.zippython课程设计大作业问答系统源码.zippython课程设计大作业问

    强化学习-基于Pytorch的深度强化学习的模块化实现-附项目源码-优质项目实战.zip

    强化学习_基于Pytorch的深度强化学习的模块化实现_附项目源码_优质项目实战

    源代码-Gallery4U ASP图片管理系统 v1.25.zip

    源代码-Gallery4U ASP图片管理系统 v1.25.zip 源代码-Gallery4U ASP图片管理系统 v1.25.zip 源代码-Gallery4U ASP图片管理系统 v1.25.zip 源代码-Gallery4U ASP图片管理系统 v1.25.zip 源代码-Gallery4U ASP图片管理系统 v1.25.zip 源代码-Gallery4U ASP图片管理系统 v1.25.zip 源代码-Gallery4U ASP图片管理系统 v1.25.zip 源代码-Gallery4U ASP图片管理系统 v1.25.zip 源代码-Gallery4U ASP图片管理系统 v1.25.zip

    2024版能源领域网络与数据安全政策全集

    能源是工业的粮食,能源安全事关国家根本安全。当今国际局势风云变幻,全球地缘政治、经济、科技体系正经历深刻变化,能源局势将更加错综复杂,威胁能源安全的各种“灰犀牛”“黑天鹅”事件时有发生,促使国际能源版图深刻变迁。作为世界最大的能源消费国,如何有效保障国家能源安全、有力保障国家经济社会发展,始终是我国能源发展的首要问题。只有把能源的饭碗端在自己手里,充分保障国家能源安全,才能把握未来发展主动权,牢牢守住新发展格局的安全底线。当下,随着新一代信息技术的蓬勃发展,能源行业的数字化和智能化程度也在不断加深,网络与数据安全深刻影响着整体能源安全的各个方面。随之,能源领域敏感数据的泄露、滥用、篡改等安全威胁也接踵而至,影响整体能源安全,进而威胁国家安全。因此,制定相关政策和标准,从合规维度赋能能源网络与数据安全体系建设至关重要。

    C#上位机(驱动实验).zip

    C#上位机(驱动实验).zip

    VB通用C++试题库系统的设计与开发(论文+源代码).rar

    计算机专业毕业时间之VB精品论文源代码资源

    grpcio-1.56.2-cp310-cp310-manylinux_2_17_aarch64.whl

    Python库是一组预先编写的代码模块,旨在帮助开发者实现特定的编程任务,无需从零开始编写代码。这些库可以包括各种功能,如数学运算、文件操作、数据分析和网络编程等。Python社区提供了大量的第三方库,如NumPy、Pandas和Requests,极大地丰富了Python的应用领域,从数据科学到Web开发。Python库的丰富性是Python成为最受欢迎的编程语言之一的关键原因之一。这些库不仅为初学者提供了快速入门的途径,而且为经验丰富的开发者提供了强大的工具,以高效率、高质量地完成复杂任务。例如,Matplotlib和Seaborn库在数据可视化领域内非常受欢迎,它们提供了广泛的工具和技术,可以创建高度定制化的图表和图形,帮助数据科学家和分析师在数据探索和结果展示中更有效地传达信息。

    SQLyog-13.1.4-0.x64Community.exe

    SQLyog-13.1.4-0.x64Community

    源代码-Excel二维表数据转SELECT CASE 工具 v2.0.zip

    源代码-Excel二维表数据转SELECT CASE 工具 v2.0.zip

    VB招生管理系统设计(论文+源代码).rar

    计算机专业毕业设计VB精品论文资源

    WX小程序源码影音娱乐

    WX小程序源码影音娱乐提取方式是百度网盘分享地址

    C语言读写文件,非常适合小白学习

    c语言文件读写操作代码 C语言读写文件,非常适合小白学习 C语言读写文件,非常适合小白学习 C语言读写文件,非常适合小白学习 C语言读写文件,非常适合小白学习 C语言读写文件,非常适合小白学习

    大学生毕业答辨ppt免费模板【不要积分】下载可编辑可用(136).zip

    大学生毕业答辨ppt免费模板【不要积分】下载可编辑可用(136).zip

    VB中介管理系统(源代码+论文+开题报告+外文翻译+答辩ppt).rar

    计算机专业毕业设计VB精品论文资源

Global site tag (gtag.js) - Google Analytics