實現Jenkins+svn+bat批處理構建svn版本差異增量的自動化打zip包


  最近進到的公司,因為我之前做過自動化測試,所以要求我寫一個從svn上面的各個目錄拉取需要的代碼,集合在一起打zip包。想了想,覺得用批處理+Jenkins持續集成工具來操作應該是可行的,於是就開始着手去做了,還真的是有些事情你去想了然后大膽去做了就會能實現。下面是我的實現過程:

1、首先你得安裝Jenkins,安裝Jenkins就不多說了,網上一搜一大把;

2、安裝好了就構建自由風格的任務,進入配置頁面

2.1、選擇參數化構建過程,根據自己需要選擇相應的參數類型

2.2、把svn相應的目錄作為參數寫入配置中

 

 

3、把需要的參數寫好后在構建的步驟選擇Execute Windows batch command,如果選項中沒有的自己去系統管理--》管理插件--》可安裝插件中搜索Execute Windows batch command安裝

 

4、這個步驟也是最重要的部分就是寫批處理代碼,寫入剛剛選擇的構建步驟中,下面是我的代碼:

 

代碼部分:

::disk是我上面設置的參數,是指打的包將要存放在哪個磁盤,Jenkins構建使用的目錄
set Jenkins=%disk%:\Jenkins
::svnupdate是構建使用目錄,因為我本機有全量自動化打包的目錄,為了區分就建了這個目錄 
set svnupdate=%Jenkins%\svnupdate
::temp是每次構建使用的臨時目錄
set tempdir=%svnupdate%\temp
::sources目錄是作為構建后打包的備份目錄
set sources=%Jenkins%\sources 
::版本起始-1是因為下面使用svn命令行比較差異文件時是不包括開始版本的,-1之后的參數放到svn比較差異文件的命令里面,參數就不用往前挪版本,開發給什么版本到什么版本直接填入參數就好
set /a from_version_up=%from_version%-1
if not exist %Jenkins% mkdir %Jenkins%
if not exist %sources% mkdir %sources%
if not exist %svnupdate% mkdir %svnupdate%
if exist %tempdir% rd /s /Q %tempdir%
if exist %svnupdate% del /s /q %svnupdate%
if %type%==APP set folder=%city%/HTML/sources/%APPbranch%

if %type%==DT (if %DLL%==old (set folder=%DLL%)else (if %DLL%==aa (set folder=%DLL%/%city%/test)else ( if %DLL%==差異驅動和配置文件 (set folder=%DLL%/%差異驅動和配置文件%)else ( set folder=%DLL%/test))))
if %DLL%==差異驅動和配置文件 set "folder=%folder: =%"
if %type%==NJW (if %NJW%==EXPJS (set folder=%NJW%/trunk/n) else (set folder=%NJW%/nw))
set url=http://IP/svn/%type%/%folder%
rem 把差異清單導入到txt文件中
set stringName=%svnupdate%\file_list.txt
set stringName1=%svnupdate%\filelist.txt
svn log -r %to_version%:%from_version% %url% >%svnupdate%\updatelog.txt
svn diff -r %from_version_up%:%to_version% --summarize %url% > %stringName% --username svn賬號 --password svn密碼
::如果svn有中文目錄,運行python的轉碼文件來識別,下面給出loop.py文件
python C:\loop.py %stringName% %stringName1% 
rem 導出差異文件
for /f "delims=" %%i in (%stringName1%) do (

if '%%i'=='' goto end
call :export %%i

)
for /f "delims=" %%i in (%svnupdate%\updatelog.txt) do (
for /f "tokens=1,2,3,4 delims=|" %%a in ("%%i") do (set a1=%%a && echo %%a|find "r">nul && goto next
)
)
:next
for /f "tokens=1,2 delims=r" %%a in ("%a1%") do (set a1=%%a)
set "a1=%a1: =%"
set path=%path%;c:\program files\winrar
%disk%:
cd %svnupdate%
if %type%==APP mkdir %svnupdate%\app
::設置打包的名稱帶上時間
set update=%date:~0,4%%date:~5,2%%date:~8,2%%time:~0,2%%time:~3,2%%time:~6,2%
set update=%update: =0%

if %type%==APP set updatezip=app_%city%_%from_version%-%a1%_%update%.zip
if %type%==DLL (if %DLL%==aa (set updatezip=%DLL%_%city%_%from_version%-%a1%_%update%.zip) else (if %DLL%==差異驅動和配置文件 (set updatezip=%DLL%_%差異驅動和配置文件%_%from_version%-%a1%_%update%.zip) else (set updatezip=%DLL%_%from_version%-%a1%_%update%.zip)))
if %type%==NJW set updatezip=%NJW%_%from_version%-%a1%_%update%.zip
mkdir %update%
if %type%==APP (xcopy /s/e/y %tempdir% %svnupdate%\app\) else (xcopy /s/e/y %tempdir% %svnupdate%\%update%\)
if %type% NEQ APP cd %svnupdate%\%update%
if %type%==APP (winrar a -r -m3 -ed %updatezip% .\app\*) else (winrar a -r -m3 -ed %updatezip% * && xcopy /s/e/y %updatezip% %svnupdate%\ && cd %svnupdate%\)

if %type%==APP (rd /s /Q app)
rd /s /Q %update%

xcopy /s/y %svnupdate%\%updatezip% %sources%\
::把備份的zip按時間順序列入到txt文件中
dir %sources%\*.zip /O:-D >%sources%\file.txt
%disk%:
cd %sources%
::刪除按時間排序后多余20個的zip文件
for /F "skip=25 tokens=4" %%a in (%sources%\file.txt) do @if exist %%a del %%a
:end
exit 0
:export
set fullpath=%2

 

if %fullpath%==%url% goto :EOF
if %fullpath%==%url%/DLL goto :EOF
if %fullpath%==%url%/dll goto :EOF

set filename=%~nx2
call set "filepath=%%fullpath:%filename%=%%"
call set "filepath=%%filepath:%url%=%%"
call set "filepath=%%filepath:/=\%%"
if not exist %tempdir% mkdir %tempdir%
set tempfilepath=%tempdir%%filepath%
echo "%tempfilepath%"|find "\DLL">nul&& call set tempfilepath=%%tempfilepath:\DLL=\dll%%

if not exist "%tempfilepath%" mkdir "%tempfilepath%" 
svn export -r %to_version% %fullpath% %tempfilepath%%filename% --force
goto :EOF

 

 

 

 

(要求裝有python,下面代碼是python2.7寫的)下面是loop.py文件代碼:

#coding=utf-8
import sys
import urllib
import codecs
a = sys.argv[1] #批處理輸入參數1
b = sys.argv[2] #批處理輸入參數2

f=open(a,"r")
line=f.readline()
fx = codecs.open(b, 'wb+', 'gb2312')
while line:
url = urllib.unquote(line)+"\r\n"
content = unicode(url,"utf-8")

fx.write(content)
line = f.readline()
fx.close()
f.close() 

 

 這樣一個增量自動化打包就完成了,代碼肯定有改進的地方,有大神看到請指出


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM