1. 程式人生 > >版本基線自動化之windows

版本基線自動化之windows

windows itl 執行計劃 tools 單獨 打包 rem 格式不正確 周期

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