• 实现Jenkins+svn+bat批处理构建svn版本差异增量的自动化打zip包(优化版)


    之前写过一个增量打zip包的,目前是需要做个一个增量svn打包优化版,包括svn单版本,连续版本,跳版本都能打包。

    首先看一下已做好的构建页面:

     目开始看工程的配置及脚本:

    1、构建参数设置:

     

     

     

      groovy部分脚本:

    if (type.equals("APP")) {  if (phase.equals("APP_COMMON")) {
    return ["--select--","Common","BJ_Personal","DL_Personal","GanZ_Personal","GZ_Personal","HF_Personal","NB_Personal","NJ_Personal","NC_Personal","SuZ_Personal","SY_Personal","SJZ_Personal","SZ_Personal","WH_Personal","WX_Personal","XA_Personal","QD_Personal","ZZ_Personal","TJ_Personal","CD_Personal_Windows","SX_Personal"]
    }else if (phase.equals("wanglin")){
    return ["--select--","Common","BJ_Personal","DL_Personal","GanZ_Personal","GZ_Personal","HF_Personal","NB_Personal","NC_Personal","SuZ_Personal","SY_Personal","SJZ_Personal","SZ_Personal","WH_Personal","WX_Personal","XA_Personal","QD_Personal","ZZ_Personal","TJ_Personal"]
    }else if (phase.equals("baijiaojiao")){
    return ["--select--","Common","BJ_Personal","DL_Personal","GanZ_Personal","GZ_Personal","HF_Personal","NB_Personal","NC_Personal","SuZ_Personal","SY_Personal","SJZ_Personal","SZ_Personal","WH_Personal","WX_Personal","XA_Personal","QD_Personal","ZZ_Personal","TJ_Personal"]
    }else {
    return ["SZ"]
    } 
    } else if (type.equals("SO") ) {  if (SO.equals("personalDll")) {
      return ["--select--","BJ","DL","GZ","HF","NC","NJ","SuZ","SY","SJZ","SZ","QD","WH","WX","XA","ZZ","TJ"]  
    } else {
    return ["--select--"]
    }
    }   else {  
      return ["--select--"]  
    }
    View Code

     

     

     

     

     

     

     2、构建环境:每次构建前把构建目录清空

     3、构建步骤:

    使用批处理脚本实现

     脚本完整如下:

    ::disk是我上面设置的参数,是指打的包将要存放在哪个磁盘,Jenkins构建使用的目录
    set JenkinsGaia=%disk%:JenkinsGaia
    ::sources目录是作为构建后打包的备份目录
    set sources=%JenkinsGaia%sources
    ::svnupdate是构建使用目录,因为我本机有全量自动化打包的目录,为了区分就建了这个目录
    set svnupdate=%JenkinsGaia%svnupdate
    ::temp是每次构建使用的临时目录
    set tempdir=%svnupdate%temp
    if not exist %JenkinsGaia% mkdir %JenkinsGaia%
    if not exist %sources% mkdir %sources%
    if not exist %svnupdate% mkdir %svnupdate%
    if exist %tempdir% rd /s /Q %tempdir%
    if exist %svnupdate% rd /s /q %svnupdate%
    md %svnupdate%
    if %type%==APP (if %phase%==SZ ( set folder=%city%/HTML/sources/%APPbranch%) else ( set folder=%phase%/%city%/HTML/sources/%APPbranch%))
    
    if %type%==SO (if %SO%==personalDll ( set folder=%SO%/%city%/trunk)else ( if %SO%==Devices ( set folder=%SO%/%Devices%/trunk)else ( set folder=%SO%/trunk)))
    rem if %DLL%==差异驱动和配置文件 set "folder=%folder: =%"
    if %type%==browser set folder=%browser%
    set url=http://192.168.0.174/svn/Gaia/%type%/%folder%
    
    chcp 65001
    set version=%version:,=,%
    set version=%version:-=-%
    set vu=%version%
    chcp 936
    echo "%version%" | find "-" > null
    if %errorlevel% neq 0 (
    set x=0
    )
    echo "%version%" | find "," > null
    if %errorlevel% equ 0 (
    set x=0
    goto :loop
    )
    echo "%version%" | find "-" > null
    if %errorlevel% equ 0 (
    set x=1
    goto :goon
    )
    :loop
    if "%version%" =="" goto :jump
    setlocal EnableDelayedExpansion
    for /f "delims=,, tokens=1,*" %%i in ("%version%") do (
    
    
    call :jumptoexport %%i
    set version=%%j
    goto loop
    
    )
    :jumptoexport
    rem 比较差异文件
    ::版本起始-1是因为下面使用svn命令行比较差异文件时是不包括开始版本的,-1之后的参数放到svn比较差异文件的命令里面,参数就不用往前挪版本,开发给什么版本到什么版本直接填入参数就好
    set /a version_up=%1-1
    set to_version=%1
    if "%to_version%" NEQ "HEAD" goto NOHEAD
    if "%to_version%"=="HEAD" svn log -r %to_version%:1 %url% >%svnupdate%updatelog.txt & 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 to_version=%a1%
    set /a version_up=%to_version%-1
    set "vu=%vu:HEAD=%"
    set  vu=%vu%%a1%
    :NOHEAD
    rem 把差异清单导入到txt文件中
    set stringName=%svnupdate%file_list.txt
    set stringName1=%svnupdate%filelist.txt
    call svn diff -r %version_up%:%to_version% --summarize %url% > %stringName% 
    python C:loop.py %stringName% %stringName1%
    rem 导出差异文件
    for /f "delims=" %%a in (%stringName1%) do (
         
         if '%%a'=='' goto end
         call :singleexport %%a
    
    )  
    goto :EOF
    :singleexport
    set updatetype=%1
    if %updatetype%==D goto :EOF
    set fullpath=%2
    
    if %fullpath%==%url% goto :EOF
    if %fullpath%==%url%/DLL goto :EOF
    if %fullpath%==%url%/dll goto :EOF
    
    set filename=%~nx2
    echo "%filename%"|find "." >nul
    if "%errorlevel%" NEQ "0" goto :EOF
    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
    
    
    
    
    
    goto :jump
    :goon
    for /f "delims=-, tokens=1,2" %%i in ("%version%") do (
    set from_version=%%i
    set to_version=%%j
    )
    set /a from_version_up=%from_version%-1
    
    
    
    
    rem 比较差异文件
    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 luokc --password luokc!@34
    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: =%"
    :jump
    set path=%path%;c:program fileswinrar
    %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 ( if %x% equ 0 ( set updatezip=app_%city%_%vu%_%update%.zip ) else ( set updatezip=app_%city%_%from_version%-%a1%_%update%.zip))
    if %type%==SO (if %SO%==personalDll ( if %x% equ 0 ( set updatezip=dll_%SO%_%city%_%vu%_%update%.zip ) else ( set updatezip=dll_%SO%_%city%_%from_version%-%a1%_%update%.zip)) else (if %SO%==差异驱动和配置文件 ( if %x% equ 0 ( set updatezip=dll_%SO%_%差异驱动和配置文件%_%vu%_%update%.zip ) else ( set updatezip=dll_%SO%_%差异驱动和配置文件%_%from_version%-%a1%_%update%.zip)) else ( if %x% equ 0 ( set updatezip=dll_%SO%_%vu%_%update%.zip ) else ( set updatezip=dll_%SO%_%from_version%-%a1%_%update%.zip))))
    if %type%==browser ( if %x% equ 0 ( set updatezip=%browser%_%vu%_%update%.zip ) else ( set updatezip=%browser%_%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%
    dir %sources%*.zip /O:-D >%sources%file.txt
    %disk%:
    cd %sources%
    for /F "skip=25 tokens=4" %%a in (%sources%file.txt) do @if exist %%a del %%a
    xcopy  "%JENKINS_HOME%"jobs\%JOB_NAME%uilds\%BUILD_NUMBER%log %svnupdate% /s/e/y
    xcopy  %svnupdate%\%updatezip% "%WORKSPACE%" /y
    findstr /c:"svn: E" %svnupdate%log >nul 2>nul
    if %ERRORLEVEL%==0 exit 1
    findstr /c:"系统找不到" %svnupdate%log >nul 2>nul
    if %ERRORLEVEL%==0 exit 1
    :end
    exit 0
    :export
    set updatetype=%1
    if %updatetype%==D goto:EOF
    set fullpath=%2
    
    
    
    if %fullpath%==%url% goto :EOF
    if %fullpath%==%url%/DLL goto :EOF
    if %fullpath%==%url%/dll goto :EOF
    
    set filename=%~nx2
    echo "%filename%"|find "." >nul
    if "%errorlevel%" NEQ "0" goto :EOF
    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
    View Code

    其中的loop.py文件python脚本,服务器需要安装有python,目前我用的是python2.7

    #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)+"
    "
    content = unicode(url,"utf-8")
    
    fx.write(content)
    line = f.readline()
    fx.close()
    f.close()

    4、构建后操作(可有可无此步骤,不用就忽略此步骤),把打好的包推送到自己电脑,自己电脑要开了FTP服务

     到此结束。

    晚生不才,请多指教!
  • 相关阅读:
    hdu 5534(dp)
    hdu 5533(几何水)
    hdu 5532(最长上升子序列)
    *hdu 5536(字典树的运用)
    hdu 5538(水)
    假如数组接收到一个null,那么应该怎么循环输出。百度结果,都需要提前判断。否则出现空指针异常。。我还是想在数组中实现保存和输出null。
    第一个登录页面 碰到的疑问
    浅谈堆和栈的区别
    Java中的基础----堆与栈的介绍、区别
    JS的Document属性和方法
  • 原文地址:https://www.cnblogs.com/lkc-test/p/15323197.html
Copyright © 2020-2023  润新知