版本基線自動化之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:\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