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

  1. rem 检出代码,并压缩
  2. rem dq
  3. rem 2018/02/11
  4. @echo off
  5. set ResourceUrl=https://192.168.0.234/QHLDAP/src/6.0/trunk/windows
  6. set ResourcePath=D:\yb\QHLDAP\6.0\src\Windows
  7. set _winrar=C:\Progra~1\WinRAR\WinRAR.exe
  8. set svnUrl=https://192.168.0.234/QHLDAP/发货文件/6.0/trunk
  9. set _silent="D:\目录服务管理系统\V6.0\QH-LDAP_6.01.001\安装包\Windows"
  10.  
  11. ::远程执行编译服务器中名为“cleanwindows_6.0”的计划任务,删除上次的文件
  12. schtasks /run /s 192.168.0.93 /u administrator /p 123456 /tn cleanwindows_6.0
  13.  
  14. ::清除上次产生的文件
  15. call D:\yb\QHLDAP\6.0\windows\cleanwork.bat
  16.  
  17. ::远程编译服务器
  18. call D:\yb\QHLDAP\6.0\windows\runmstsc.bat
  19.  
  20. if not exist "%ResourcePath%" (
  21. ::正在检出代码...
  22. svn checkout --username "autoscript" --password "123456" -q %ResourceUrl% "%ResourcePath%"
  23. ) else (
  24. :: 正在更新代码...
  25. TortoiseProc.exe /command:update /path:"%ResourcePath%" /closeonend:1
  26. )
  27.  
  28. svn checkout --username "autoscript" --password "123456" -q %svnUrl% "%_silent%"
  29. rd /s /q %_silent%\.svn
  30.  
  31. ::压缩文件,不压缩.svn文件 -a备份所有文件 -ep1 保存压缩文件的结构 -ibck为后台压缩 -R遍历
  32. %_winrar% a -ep1 -R D:\yb\QHLDAP\6.0\src\trunk_win.rar D:\yb\QHLDAP\6.0\src\Windows\*
  33.  
  34. ::复制文件
  35. call D:\yb\QHLDAP\6.0\windows\copyrar.bat
  36. @echo on

cleanwork.bat

  1. rem 清理文件
  2. rem dq
  3. rem 2018/02/11
  4.  
  5. set package=D:\目录服务管理系统\V6.0\QH-LDAP_6.01.001\安装包\Windows
  6.  
  7. ::删除上次的压缩文件
  8. del /q /s D:\yb\QHLDAP\6.0\src\trunk_win.rar
  9. rd /q /s %package%\api
  10. rd /q /s %package%\doc
  11. rd /q /s %package%\license
  12. rd /q /s %package%\setup
  13. del /q /s %package%\readme.txt

copyrar.bat

  1. rem 复制压缩文件到编译服务器中,并执行计划任务
  2. rem dq
  3. rem 2018/02/11
  4.  
  5. ::建立共享
  6. net use \\192.168.0.93\yb\6.0\workspace 123456 /user:administrator
  7.  
  8. ::通过文件共享的方式,复制压缩文件到编译服务器中
  9. copy D:\yb\QHLDAP\6.0\src\trunk_win.rar \\192.168.0.93\yb\6.0\workspace\
  10.  
  11. ::远程执行编译服务器中名为“QHLDAP_6.0_93”的计划任务
  12. schtasks /run /s 192.168.0.93 /u administrator /p 123456 /tn QHLDAP_6.0_93

编译服务器93

main.bat

  1. rem main control
  2. rem Create by dq
  3. rem Create date 2018/01/09
  4.  
  5. set _work=D:\yb\6.0\workspace
  6. set _setuppath=D:\yb\6.0\workspace\package\QH-Ldap\Media\SINGLE_EXE_IMAGE\Package\Setup.exe
  7. set _classJar=D:\yb\6.0\workspace\package(winxldap)\winldap\GFALdap-Web\WEB\web\webapp\LDAPProject\WEB-INF\classes
  8.  
  9. rem decompression trunk_win.rar
  10.  
  11. C:\Progra~1\WinRAR\WinRAR x -ep1 -y %_work%\trunk_win.rar %_work%
  12. ::rd /s /q %_work%\.svn
  13.  
  14. rem run compilers.bat
  15.  
  16. cd /d "%_work%\package(winxldap)\script"
  17.  
  18. call alone_windows.bat
  19. cd /d "D:\yb\6.0\script"
  20.  
  21. call D:\yb\6.0\scripts\copyCInstall.bat
  22.  
  23. del /a /f /q "D:\yb\6.0\workspace\package(winxldap)\winldap\GFALdap-Web\WEB\web\webapp\LDAPProject\WEB-INF\classes\*.jar"
  24.  
  25. rem run InstallShield
  26.  
  27. start D:\yb\6.0\workspace\package\QH-LDAP.ism
  28.  
  29. rem run 'runmstsc' scheduled task
  30.  
  31. rem schtasks /run /s 192.168.0.234 /u administrator /p P@ssw0rd /i /tn QHLDAP_6.0_234
  32.  
  33. rem dynamic condition monitor
  34.  
  35. :loop
  36. ping localhost -n 3 > nul
  37. if not exist %_setuppath% goto loop
  38. ping localhost -n 4 > nul
  39. call D:\yb\6.0\scripts\copysetup.bat
  40.  
  41. rem close InstallShield service
  42.  
  43. taskkill /f /im isdev.exe

alone_windows.bat

  1. rem compiler 'initLdap' and 'LDAPProject'
  2. rem Create by dq
  3. rem Create date 2017/5/10
  4.  
  5. @echo off
  6.  
  7. set _filelog=debug.txt
  8. set _init=ant -f init.xml
  9. set _Ldap=ant -f Ldap.xml
  10. set _crt="D:\tools\SecureCRT "
  11. set _ant="D:\yb\6.0"
  12. set _tar=D:\yb\workspace\console
  13. set _currpath="D:\yb\6.0\workspace\package(winxldap)\script"
  14. set _compile_log=debug.txt
  15. set _upload_log="/../../../yb/workspace/package(winxldap)/script/%_filelog%"
  16.  
  17. cd /d %_currpath%
  18.  
  19. rem delete log
  20.  
  21. if exist debug.txt ( del /q /f /a %_filelog% )
  22. cd %_ant%
  23.  
  24. rem compiler
  25.  
  26. rem call %_init%
  27. call %_Ldap%
  28.  
  29. rem start compiler c
  30.  
  31. cd /d %_currpath%
  32. rem call prepare_windows.bat

copyCinstall.bat

  1. rem clean D:\yb\workspace\*
  2. rem Create by dq
  3. rem Create date 2017/5/10
  4.  
  5. @echo off
  6.  
  7. set _bin=D:\yb\6.0\c\bin\*
  8. set _work=D:\yb\6.0\c\work\*
  9. set _setupBin=D:\yb\6.0\workspace\package(winxldap)\winldap\GFALdap-Web\SERVER\bin
  10. set _setupWork=D:\yb\6.0\workspace\package(winxldap)\winldap\GFALdap-Web\SERVER\work
  11.  
  12. copy %_bin% %_setupBin%
  13. copy %_work% %_setupWork%

copysetup.bat

  1. rem setup operation
  2. rem Create by dq
  3. rem Create date 2018/01/10
  4.  
  5. rem copy to 192.168.0.234
  6. net use * /del /y
  7. net use \\192.168.0.234 P@ssw0rd /user:administrator
  8. copy D:\yb\6.0\workspace\package\QH-Ldap\Media\SINGLE_EXE_IMAGE\Package\Setup.exe \\192.168.0.234\目录服务管理系统\V6.0\QH-LDAP_6.01.001\安装包\Windows\setup
  9.  
  10. rem delete setup.exe
  11.  
  12. del D:\yb\6.0\workspace\package\QH-Ldap\Media\SINGLE_EXE_IMAGE\Package\Setup.exe
  13.  
  14. rem run 'opensetup' scheduled task
  15.  
  16. schtasks /run /s 192.168.0.234 /u administrator /p P@ssw0rd /i /tn opensetup6.0

clean.bat

  1. rem clean D:\yb\workspace\*
  2. rem Create by dq
  3. rem Create date 2017/5/10
  4.  
  5. @echo off
  6.  
  7. set _work=D:\yb\6.0\workspace
  8. set _log=D:\tools\compilerproject\alone\cleanlog.txt
  9. set _console=%_work%\console
  10. set _ldapserver=%_work%\ldapserver
  11. set _package=%_work%\package
  12. set _package(windxldap)=%_work%\package(winxldap)
  13. set _trunk_win=%_work%\trunk_win.rar
  14. cd /d %_work%
  15. del /s /q %_trunk_win%
  16. rd /s /q %_work%\.svn
  17. rd /s /q %_console%
  18. rd /s /q %_ldapserver%
  19. rd /s /q %_package%
  20. rd /s /q %_package(windxldap)%

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

版本基线自动化之windows的更多相关文章

  1. 版本基线自动化之Linux

    上一篇笔者叙述了如何在windows平台上进行自动化打包,这次采用linux平台 1.start.bat : 调用cleanall.bat脚本 ,从svn服务器中检出代码,并采用7-Zip工具进行压缩 ...

  2. PHP 基于 Jenkins ansible 动态选择版本进行自动化部署与回滚(第二版)

    PHP 基于 Jenkins ansible 动态选择版本进行自动化部署与回滚(第二版) 先看流程图: 大概介绍一下: 版本选择使用jenkins 中的 git parameter 插件实现 回滚方式 ...

  3. 【Linux】CentOS下升级Python和Pip版本全自动化py脚本

    [Linux]CentOS下升级Python和Pip版本全自动化py脚本 CentOS7.6自带py2.7和py3.6 想要安装其它版本的话就要自己重新下载和编译py其它版本并且配置环境,主要是软链接 ...

  4. 安全基线自动化扫描、生成报告、加固的实现(以Tomcat为例)

    一.背景说明 当前在服务上线前,安全部门都会对服务基线配置进行把关,整个流程可以分为扫描.生成报告.修复三步. 在执行这一流程时当前普遍的做法是半自动化的,扫描和生成报告是自动化的,执行扫描.执行生成 ...

  5. linux各版本基线检查脚本(centos6、centos7、ubuntu系列)

    以下是centos7基线检查脚本: #!/bin/bash #version v1. by pensar #操作系统linux 配置规范--centos7 cat <<EOF ****** ...

  6. windows下安装python、环境设置、多python版本的切换、pyserial与多版本python安装、windows命令行下切换目录

    1.windows下安装python 官网下载安装即可 2.安装后的环境设置 我的电脑--属性--高级--设置path的地方添加python安装目录,如C:\Python27;C:\Python33 ...

  7. 【转】如何查看Oracle客户端版本及位数(Windows系统)

    一.方法一 查看oracle客户端版本:sqlplus -v 查看oracle客户端版本:sqlplus /nolog命令 Step 1:运行sqlplus /nolog命令,如果你服务器安装了多个客 ...

  8. .net core工具组件系列之Redis—— 第一篇:Windows环境配置Redis(5.x以上版本)以及部署为Windows服务

    Cygwin工具编译Redis Redis6.x版本是未编译版本(官方很调皮,所以没办法,咱只好帮他们编译一下了),所以咱们先下载一个Cygwin,用它来对Redis进行编译. Cygwin下载地址: ...

  9. 获取系统版本,判断是windows还是Linux

    package com.foresee.zxpt.common.utils; import java.util.Properties; /** * 获取系统版本 * @author GZ * */ p ...

随机推荐

  1. 前端 CSS 盒子模型 边框 border属性

    边框 border:边框的意思,描述盒子的边框 边框有三个要素: 粗细 线性样式 颜色 border: solid border特性 如果颜色不写,默认是黑色.如果粗细不写,不显示边框.如果只写线性样 ...

  2. zookeeper设置客户端连接超时被expired

    在网络环境非常差的情况下,使用zookeeper集群往往会遇到连接expired了: 客户端提示连接从ZOO_CONNECTION_STATE变为ZOO_EXPIRED_SEESION_STATE,然 ...

  3. JZOJ2678 树B

    题 Description 已知无向连通图G由N个点,N-1条边组成.每条边的边权给定.现要求通过删除一些边,将节点1与另M个指定节点分开,希望删除的边的权值和尽量小,求此最小代价. Input 每个 ...

  4. lb开金矿 QDUOJ 数论

    lb开金矿 QDUOJ 数论 原题链接,点我进去 题意 大家都知道lb有n个小弟(编号从2到n+1),他们可以按照规则传递信息:某天编号为i的小弟收到信息后,那么第二天他会给编号为j的小弟传达信息,其 ...

  5. react 前端项目技术选型、开发工具、周边生态

    react 前端项目技术选型.开发工具.周边生态 声明:这不是一篇介绍 React 基础知识的文章,需要熟悉 React 相关知识 主架构:react, react-router, redux, re ...

  6. 2019 安洵杯 Re 部分WP

    0x01.EasyEncryption 测试文件:https://www.lanzous.com/i7soysb 1.IDA打开 int sub_416560() { int v0; // eax i ...

  7. drop,delete,truncate 的区别

    (1)DELETE语句执行删除的过程是每次从表中删除一行,并且同时将该行的删除操作作为事务记录在日志中保存以便进行进行回滚操作. TRUNCATE TABLE 则一次性地从表中删除所有的数据并不把单独 ...

  8. bash_profile和bashrc区别

    [.bash_profile 与 .bashrc 的区别].bash_profile is executed for login shells, while .bashrc is executed f ...

  9. 一、left

    一.left - right 就是遍历(以左边遍历,以右边遍历) inner join 就是求公共部分的结果集 left join 查询结果 right join结果 inner join 解决的办法 ...

  10. linux系统特殊权限位 suid、sgid、sticky

    linux系统特殊权限位 suid.sgid.stickysuid 使任意用户获得用文件属主相同的权限,sgid使用户获得与文件属组相同的权限(通过sgid获得的权限等同于同一用户组的权限) 表示方法 ...