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:\yb\QHLDAP\6.0\src\Windows
set _winrar=C:\Progra~1\WinRAR\WinRAR.exe
set svnUrl=https://192.168.0.234/QHLDAP/发货文件/6.0/trunk
set _silent="D:\目录服务管理系统\V6.0\QH-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:\yb\QHLDAP\6.0\windows\cleanwork.bat ::远程编译服务器
call D:\yb\QHLDAP\6.0\windows\runmstsc.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:\yb\QHLDAP\6.0\src\trunk_win.rar D:\yb\QHLDAP\6.0\src\Windows\* ::复制文件
call D:\yb\QHLDAP\6.0\windows\copyrar.bat
@echo on

cleanwork.bat

rem 清理文件
rem dq
rem 2018/02/11 set package=D:\目录服务管理系统\V6.0\QH-LDAP_6.01.001\安装包\Windows ::删除上次的压缩文件
del /q /s D:\yb\QHLDAP\6.0\src\trunk_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%\readme.txt

copyrar.bat

rem 复制压缩文件到编译服务器中,并执行计划任务
rem dq
rem 2018/02/11 ::建立共享
net use \\192.168.0.93\yb\6.0\workspace 123456 /user:administrator ::通过文件共享的方式,复制压缩文件到编译服务器中
copy D:\yb\QHLDAP\6.0\src\trunk_win.rar \\192.168.0.93\yb\6.0\workspace\ ::远程执行编译服务器中名为“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:\yb\6.0\workspace
set _setuppath=D:\yb\6.0\workspace\package\QH-Ldap\Media\SINGLE_EXE_IMAGE\Package\Setup.exe
set _classJar=D:\yb\6.0\workspace\package(winxldap)\winldap\GFALdap-Web\WEB\web\webapp\LDAPProject\WEB-INF\classes rem decompression trunk_win.rar C:\Progra~1\WinRAR\WinRAR x -ep1 -y %_work%\trunk_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:\yb\6.0\script" call D:\yb\6.0\scripts\copyCInstall.bat del /a /f /q "D:\yb\6.0\workspace\package(winxldap)\winldap\GFALdap-Web\WEB\web\webapp\LDAPProject\WEB-INF\classes\*.jar" rem run InstallShield start D:\yb\6.0\workspace\package\QH-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:\yb\6.0\scripts\copysetup.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:\tools\SecureCRT "
set _ant="D:\yb\6.0"
set _tar=D:\yb\workspace\console
set _currpath="D:\yb\6.0\workspace\package(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:\yb\workspace\*
rem Create by dq
rem Create date 2017/5/10 @echo off set _bin=D:\yb\6.0\c\bin\*
set _work=D:\yb\6.0\c\work\*
set _setupBin=D:\yb\6.0\workspace\package(winxldap)\winldap\GFALdap-Web\SERVER\bin
set _setupWork=D:\yb\6.0\workspace\package(winxldap)\winldap\GFALdap-Web\SERVER\work 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:\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 rem delete setup.exe del D:\yb\6.0\workspace\package\QH-Ldap\Media\SINGLE_EXE_IMAGE\Package\Setup.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:\yb\workspace\*
rem Create by dq
rem Create date 2017/5/10 @echo off set _work=D:\yb\6.0\workspace
set _log=D:\tools\compilerproject\alone\cleanlog.txt
set _console=%_work%\console
set _ldapserver=%_work%\ldapserver
set _package=%_work%\package
set _package(windxldap)=%_work%\package(winxldap)
set _trunk_win=%_work%\trunk_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命令了,网上有很多相关的资料。

版本基线自动化之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. 使用Dockerfile制作镜像

    组成部分 基础镜像信息       FROM 维护者信息    MAINTAINER.LABEL 镜像操作指令       RUN.COPY.ADD.EXPOSE.WORKDIR.ONBUILD.US ...

  2. MySQL数据库生成数据库说明文档

    在半年多前为一个MySQL数据库生成过数据库说明文档,今天要重新生成一份,但是发现完全不记得当时是怎么生成的,只能在网上搜索重来一遍,所以今天特意把这个过程记录一下. 一.安装 使用MySQL数据库表 ...

  3. MySQL-快速入门(9)视图

    1.什么是视图 视图是一个虚表.视图可以进行查询.增加.修改.删除.进行修改.增加.删除,将影响基本表中的数据. 2.视图相对基本表的优势 1>简单化:看到的就是想要的字段列,可以简化后续查询. ...

  4. C++基础-多态

    本文为 C++ 学习笔记,参考<Sams Teach Yourself C++ in One Hour a Day>第 8 版.<C++ Primer>第 5 版.<代码 ...

  5. 探索ASP.Net Core 3.0系列二:聊聊ASP.Net Core 3.0 中的Startup.cs

    原文:探索ASP.Net Core 3.0系列二:聊聊ASP.Net Core 3.0 中的Startup.cs 前言:.NET Core 3.0 SDK包含比以前版本更多的现成模板. 在本文中,我将 ...

  6. wordpress中page页添加非插件留言板功能

    把下面的代码插入到page页面中即可 <!-- 留言板 --> <div class="wrap"> <div id="primary&qu ...

  7. http协议中常见的状态码以及请求方式,http协议的组成

    请求状态码: 2xxx:表示请求成功,例如200. 3xxx:表示请求被重定向,表示完成请求,需要进一步操作,例如 302. 4xxx:表示请求错误,例如:404,资源没有找到. 5xxx:表示服务器 ...

  8. 03python面向对象编程1

    1.创建和使用类 1.1 创建 Dog 类.根据 Dog 类创建的每个实例都将存储名字和年龄.我们赋予了每条小狗蹲下( sit() )和打滚( roll_over() )的能力: In [2]: cl ...

  9. 牛客练习赛33 E tokitsukaze and Similar String (字符串哈希hash)

    链接:https://ac.nowcoder.com/acm/contest/308/E 来源:牛客网 tokitsukaze and Similar String 时间限制:C/C++ 2秒,其他语 ...

  10. 2019长安大学ACM校赛网络同步赛C LaTale (树上DP)

    链接:https://ac.nowcoder.com/acm/contest/897/C来源:牛客网 LaTale 时间限制:C/C++ 2秒,其他语言4秒 空间限制:C/C++ 32768K,其他语 ...