zoukankan      html  css  js  c++  java
  • 版本基线自动化之windows

    1、背景:

    目前项目维护周期过程中,制作调试版本和对外发布版本次数比较频繁,流程过于繁琐和随意,且打包制作人成为瓶颈,为了规范版本基线流程和实现全员自动化参与,拟定版本基线自动化方案。

     2、目标:

    版本基线自动化方案的实施,主要任务分为配置管理自动化,编译做包自动化,版本发布自动化。主要目标是实现一键式做包和发布,减少人为误操作、释放人力资源、提高开发效率。

    3、环境:

    软件环境:Windows Server 2012 R2

    硬件环境:内存:8G 硬盘:100G

    配置工具:服务端:VisualSVN-Server-3.5.3-x64  客户端:TortoiseSVN_x64_1.8.8.25755

    做包工具:InstallShield 2010 / tar

    传输工具:Xmanager4(Telent、SSH)

    编译环境:两台虚拟机:Windows Server 2012 R2 / 普华3.0

    编译工具:VS2008 / gcc

    4、详细说明:

    1)确定版本封版时间

    迭代任务划分确定版本封版时间。

    2)提交代码

    上传代码前,首先完成模块自验,输出单元测试报告,代码需要进行检视,由检视人完代码检视报告,上传SVN时按指定格式填写信息(上传人,检视人,修改说明,修改日期),格式不正确,无法提交。尽量做到一个功能点只上传一次,强调一次性把事情做对。资料修改同样需要经过检视才能上传。

    3)锁定配置库

    版本封版后,配置管理员关闭所有开发人员对配置库的写权限,锁定代码,同时在基线服务器上创建版本基线目录。

    4)环境清理

    基线服务器删除上一次检出的代码,编译服务器删除来自基线服务器上传的代码、本地编译生成的二进制文件和安装包。

    5)代码检出

    基线服务器通过SVN工具检出最新代码。

    6)压缩上传

    将代码压缩打包,上传至编译服务器制定目录下。

    7)解压

    将代码压缩打包解压至当前目录下。

    8)代码编译

    执行编译脚本,完成代码编译。

    9)软件打包

    Windows平台通过InstallShield工程实现软件打包,Linux平台通过tar工具实现软件打包。

    10)上传版本基线库

    安装包上传至基线版本库指定目录下。

    11)取包自验

    开发人员从基线库中取包自验,若无功能性问题,可通知配置管理员完成基线,若出现问题,经讨论合议修改方案后,实施代码修改,完成自验后通知配置管理员单独开放代码提交权限,完成代码上传,基线流程返回锁定配置库流程。

    12)版本基线

    配置管理员将所有对外发布内容进行打包,完成MD5校验,并将对应代码保存至SVN的tag目录下

    5、流程图:


    好了说了这么多开工吧,大致思路:

    1、cleanwork.bat: 环境的清理,清除上次自动化打包生成的临时文件,并远程执行93服务器的计划任务>clean.bat;

    2、build.bat: 调用cleanwork.bat脚本,并将svn服务器ip为234中检出代码,利用WinRAR工具压缩;

    3、copyrar.bat: 将压缩的文件利用共享的方式发送到编译服务器中ip为93,并远程执行93服务器的计划任务>main.bat;

    4、main.bat: 执行93服务器的控制脚本,将将文件解压,

      4.1、alone_windows.bat: 执行编译脚本,这里我java采用的是ant工具编译,

      4.2、copyCinstall.bat: c采用的是vs,因为c这边的最近没怎么开发,所以我就直接将以前编译好的直接复制,

      4.3、启动installShield打包工具,进行打包,copysetup.bat: 将打包文件利用文件共享的方式发送到svn服务器中,并远程执行234服务器的计划任务>opensetup.bat,

    5、opensetup.bat: 最后打开打包文件所在的位置;


    build.bat

    rem 检出代码,并压缩
    rem dq 
    rem 2018/02/11
    @echo off 
    set ResourceUrl=https://192.168.0.234/QHLDAP/src/6.0/trunk/windows
    set ResourcePath=D:ybQHLDAP6.0srcWindows
    set _winrar=C:Progra~1WinRARWinRAR.exe
    set svnUrl=https://192.168.0.234/QHLDAP/发货文件/6.0/trunk
    set _silent="D:目录服务管理系统V6.0QH-LDAP_6.01.001安装包Windows"
    
    ::远程执行编译服务器中名为“cleanwindows_6.0”的计划任务,删除上次的文件
    schtasks /run /s 192.168.0.93 /u administrator /p 123456 /tn cleanwindows_6.0
    
    ::清除上次产生的文件
    call D:ybQHLDAP6.0windowscleanwork.bat
    
    ::远程编译服务器
    call D:ybQHLDAP6.0windows
    unmstsc.bat
    
    if not exist "%ResourcePath%" (
    ::正在检出代码...
        svn checkout  --username "autoscript" --password "123456" -q %ResourceUrl%  "%ResourcePath%"
     ) else (
     :: 正在更新代码...
        TortoiseProc.exe /command:update /path:"%ResourcePath%" /closeonend:1
    )
    
    svn checkout  --username "autoscript" --password "123456" -q %svnUrl%  "%_silent%"
    rd /s /q %_silent%.svn
    
    ::压缩文件,不压缩.svn文件 -a备份所有文件 -ep1 保存压缩文件的结构 -ibck为后台压缩 -R遍历
    %_winrar% a -ep1  -R D:ybQHLDAP6.0src	runk_win.rar D:ybQHLDAP6.0srcWindows* 
    
    ::复制文件
    call D:ybQHLDAP6.0windowscopyrar.bat
    @echo on

    cleanwork.bat

    rem 清理文件
    rem dq 
    rem 2018/02/11
    
    set package=D:目录服务管理系统V6.0QH-LDAP_6.01.001安装包Windows
    
    ::删除上次的压缩文件
    del /q /s D:ybQHLDAP6.0src	runk_win.rar
    rd /q /s %package%api
    rd /q /s %package%doc
    rd /q /s %package%license
    rd /q /s %package%setup
    del /q /s %package%
    eadme.txt

    copyrar.bat

    rem 复制压缩文件到编译服务器中,并执行计划任务
    rem dq 
    rem 2018/02/11
    
    ::建立共享
    net use \192.168.0.93yb6.0workspace 123456 /user:administrator
    
    ::通过文件共享的方式,复制压缩文件到编译服务器中
    copy D:ybQHLDAP6.0src	runk_win.rar \192.168.0.93yb6.0workspace 
    
    ::远程执行编译服务器中名为“QHLDAP_6.0_93”的计划任务
    schtasks /run /s 192.168.0.93 /u administrator /p 123456 /tn QHLDAP_6.0_93

    编译服务器93 

    main.bat

    rem  main control  
    rem Create by dq
    rem Create date 2018/01/09
    
    
    set _work=D:yb6.0workspace
    set _setuppath=D:yb6.0workspacepackageQH-LdapMediaSINGLE_EXE_IMAGEPackageSetup.exe
    set _classJar=D:yb6.0workspacepackage(winxldap)winldapGFALdap-WebWEBwebwebappLDAPProjectWEB-INFclasses                
    
    rem decompression trunk_win.rar 
    
    C:Progra~1WinRARWinRAR  x -ep1 -y %_work%	runk_win.rar  %_work% 
    ::rd /s /q %_work%.svn
    
    rem run compilers.bat
    
    cd /d "%_work%package(winxldap)script"
    
    call alone_windows.bat
    cd /d "D:yb6.0script"
    
    call D:yb6.0scriptscopyCInstall.bat
    
    del /a /f /q "D:yb6.0workspacepackage(winxldap)winldapGFALdap-WebWEBwebwebappLDAPProjectWEB-INFclasses*.jar"
    
    rem run InstallShield 
    
    start D:yb6.0workspacepackageQH-LDAP.ism
    
    
    rem run 'runmstsc' scheduled task
    
    rem schtasks /run /s 192.168.0.234 /u administrator /p P@ssw0rd /i /tn QHLDAP_6.0_234
    
    
    rem dynamic condition monitor 
    
    :loop
    ping localhost -n 3 > nul
    if not exist %_setuppath% goto loop
    ping localhost -n 4 > nul
    call D:yb6.0scriptscopysetup.bat
    
    
    rem close InstallShield service
    
    taskkill /f /im isdev.exe 

    alone_windows.bat

    rem compiler 'initLdap' and 'LDAPProject'
    rem Create by dq
    rem Create date 2017/5/10
    
    @echo off
    
    set _filelog=debug.txt
    set _init=ant -f init.xml
    set _Ldap=ant -f Ldap.xml
    set _crt="D:	oolsSecureCRT "
    set _ant="D:yb6.0"
    set _tar=D:ybworkspaceconsole
    set _currpath="D:yb6.0workspacepackage(winxldap)script"
    set _compile_log=debug.txt
    set _upload_log="/../../../yb/workspace/package(winxldap)/script/%_filelog%"
    
    cd /d %_currpath%
    
    
    rem delete log
    
    if exist debug.txt ( del /q /f /a  %_filelog% )
    cd %_ant%
    
    
    rem compiler  
    
    rem call %_init%    
    call %_Ldap%
    
    
    rem start compiler c
     
    cd /d %_currpath%
    rem call prepare_windows.bat

    copyCinstall.bat

    rem clean D:ybworkspace*
    rem Create by dq
    rem Create date 2017/5/10
    
    @echo off
    
    set _bin=D:yb6.0cin*
    set _work=D:yb6.0cwork*
    set _setupBin=D:yb6.0workspacepackage(winxldap)winldapGFALdap-WebSERVERbin
    set _setupWork=D:yb6.0workspacepackage(winxldap)winldapGFALdap-WebSERVERwork
    
    copy %_bin% %_setupBin%
    copy %_work% %_setupWork%

    copysetup.bat

    rem setup operation
    rem Create by dq
    rem Create date 2018/01/10
    
    
    rem copy to 192.168.0.234
    net use * /del /y
    net use \192.168.0.234 P@ssw0rd /user:administrator
    copy D:yb6.0workspacepackageQH-LdapMediaSINGLE_EXE_IMAGEPackageSetup.exe \192.168.0.234目录服务管理系统V6.0QH-LDAP_6.01.001安装包Windowssetup
    
    
    rem delete setup.exe
    
    del  D:yb6.0workspacepackageQH-LdapMediaSINGLE_EXE_IMAGEPackageSetup.exe
    
    
    rem run 'opensetup' scheduled task
    
    schtasks /run /s 192.168.0.234 /u administrator /p P@ssw0rd /i /tn opensetup6.0

    clean.bat

    rem clean D:ybworkspace*
    rem Create by dq
    rem Create date 2017/5/10
    
    @echo off
    
    set _work=D:yb6.0workspace
    set _log=D:	oolscompilerprojectalonecleanlog.txt
    set _console=%_work%console
    set _ldapserver=%_work%ldapserver
    set _package=%_work%package
    set _package(windxldap)=%_work%package(winxldap)
    set _trunk_win=%_work%	runk_win.rar
    cd /d %_work%
     del /s /q %_trunk_win% 
     rd /s /q %_work%.svn
     rd /s /q %_console% 
     rd /s /q %_ldapserver% 
     rd /s /q %_package% 
     rd /s /q %_package(windxldap)% 

    一切弄好之后双击build.bat脚本就好了,这里笔者就不再介绍如何添加计划任务、文件共享、svn命令和WinRAR命令了,网上有很多相关的资料。

  • 相关阅读:
    你的代码又导致资金损失了?活该!
    rabbitmq实现指定消费者才能消费
    没有绝对,没有百分百
    jenkins构建触发器之Build whenever a snapshot dependency is built
    豁然明白的囧事 之 执行mvn:clean deploy提示401 Unauthorized
    (8/8)RPC方法的参数,能用枚举就请考虑枚举
    abstract 关键字
    练习题------代码块
    代码块
    static 关键字
  • 原文地址:https://www.cnblogs.com/dqcer/p/8443797.html
Copyright © 2011-2022 走看看