• TFS build server搭建,搭建自动化构建服务器


    TFS build 服务器的搭建主要步骤如下:

    一:环境准备:

    1. 新建一台build服务器
    2. 安装Visual Studio。主要目的是: a. 生成Build脚本所需要的build命令;b.与TFS组合,方便下载最新源代码
    3. 安装TFS。在Build Server触发build时,会通过tfs的命令从源代码服务器下载最新代码
    4. 安装InstallShield。通过InstallShield命令自动打包软件包
    5. 启动Visual Studio,手动Mapping源代码到build server本地目录。(供源代码下载使用)

    二:脚本代码的编写(.bat),以下是bat脚本文件的工作流程

    1. 启用Visual Studio tool,这样就可以使用visual studio的命令。
    2. 删除本地的所有代码
    3. 从服务器下载最新的源代码
    4. 开始触发最新源代码的Build
    5. 开始触发InstallShield项目的build
    6. 把最新生成的软件包.exe上传到某个文件夹备用
    7. checkout 项目源代码的版本文件并+1,大于9999则从1重新开始。
    8. checkout InstallShield的版本文件并+1
    9. checkin 以上两个文件,供下次使用。

    三:编写一个计划任务,自动调用步骤二中的.bat脚本,完成build server的搭建

    四:代码示例

    以下是一个示例,共有两个文件,一个.bat文件,一个vbs文件。

    .bat文件是整个build脚本的入口,负责整体build server脚本的流程和大部分的工作

    .vbs文件主要是用来取出文件的版本信息;版本信息加1;并把新的版本号重新写入存储版本的文件

    下面是这两个文件的代码,部分隐私信息已用*号处理

    AutoBuildScript:

    @echo off
    
    ::Need to manually configure the Path
    set VisualStudio2010Tool="C:Program Files (x86)Microsoft Visual Studio 10.0VCvcvarsall.bat" x86
    set SourceCodeItemSpecPath="$/Company_1003/Product/dev/EGS/Product/source/Product/App/eProduct/eProduct-1.7.0/CLK/source/eProduct"
    set InstallshieldCommandTool="C:Program Files (x86)InstallShield2012SystemIsCmdBld.exe"
    set TeamforgeProjectName="eProduct 1.7"
    set TeamforgePackage="eProduct 1.7"
    
    
    ::Relative Path, Manually configure if needed
    ::SourceCodeFolder e.g. "C:CodeeProduct1.7eProduct-1.7.0CLKsourceeProduct"
    set SourceCodeFolder=%~f0....eProduct
    set ForceDownloadLatestSourceCode=True
    ::BuildSolutionFile e.g."C:CodeeProduct1.7eProduct-1.7.0CLKsourceeProduct2008slneProduct.sln"
    set BuildSolutionFile=%~f0....eProduct2008slneProduct.sln
    ::BuildModel e.g. Debug or Release
    set BuildModel=Release
    ::eProductDriverProject e.g. "C:CodeeProduct1.7eProduct-1.7.0CLKsourceeProductProductNameeProductDriverProductNameeProductDriver.ism"
    set eProductDriverProject=%~f0....eProductProductNameeProductDriverProductNameeProductDriver.ism
    ::TeamforgeUploadExecutableFile e.g. "C:DataSFEEUploadFilesUploadFiles.exe"
    set TeamforgeUploadExecutableFile=%~f0..SFEEUploadFilesUploadFiles.exe
    ::DriverReleaseFilePath e.g. "C:CodeeProduct1.7eProduct-1.7.0CLKsourceeProductProductNameeProductDriverProductNameeProductDriverPROJECT_ASSISTANTRelease 1DiskImagesDISK1"
    set DriverReleaseFilePath="%~f0....eProductProductNameeProductDriverProductNameeProductDriverPROJECT_ASSISTANTRelease 1DiskImagesDISK1"
    ::e.g "C:CodeeProduct1.7eProduct-1.7.0CLKsourceeProductlibfslincludeversion.h"
    set VersionFilePath=%~f0....eProductlibfslincludeversion.h
    ::e.g. "C:CodeeProduct1.7eProduct-1.7.0CLKsourceeProductProductNameeProductDriverProductNameeProductDriver.ism"
    set DriverFilePath=%~f0....eProductProductNameeProductDriverProductNameeProductDriver.ism
    ::e.g. C:CodeeProduct1.7eProduct-1.7.0CLKsourceeProductProductNameeProductDriverProductNameeProductDriverPROJECT_ASSISTANTIntermIsConfig.ini
    set DriverConfigFilePath=%~f0....eProductProductNameeProductDriverProductNameeProductDriverPROJECT_ASSISTANTIntermIsConfig.ini
    ::e.g. C:CodeeProduct1.7eProduct-1.7.0CLKsourceeProductProduct2008win32
    set eProductReleaseFilePath=%~f0....eProductProduct2008win32
    set ModifyVersionVBSFilePath=%~f0..autoincreaseversionnumber.vbs
    set eProductDriverFilesPath=%~f0....eProductProductNameeProductDrivereProductDriverFiles
    set eProductDriverCreatePath=%~f0....eProductProduct2008win32Create
    
    @echo on
    
    echo Set the vs 2010 command tool as the default command prompt.
    call %VisualStudio2010Tool%
    
    echo Start to download source code from TFS
    if not exist %SourceCodeFolder% ( echo please maping the tfs source code to build server local folder 
    echo Build Failed.
    exit )
    echo Delete the old source code 
    rd %SourceCodeFolder%/s/q
    
    echo Downloading source code...
    IF %ForceDownloadLatestSourceCode% EQU False (tf get %SourceCodeItemSpecPath% /recursive) ELSE (tf get %SourceCodeItemSpecPath% /all /recursive)
    echo Download source code Finished.
    
    echo Start Build the solution
    MSBuild %BuildSolutionFile% /property:Configuration=%BuildModel% 
    echo Build Finished.
    
    echo Start to build Installshield Project
    tf checkout %DriverConfigFilePath%
    
    echo Copy files under Create folder to eProduct Driver installer
    rd /s /q %eProductDriverFilesPath%
    md %eProductDriverFilesPath%
    xcopy /E /F /Y  %eProductDriverCreatePath% %eProductDriverFilesPath%
    
    %InstallshieldCommandTool% -p %eProductDriverProject%
    echo Build Installshield Project Finished
    
    echo Start checkout and increase version number, then checkin the increased version number
    
    tf checkout %VersionFilePath% %DriverFilePath%
    
    for /f "delims=" %%i in ('cscript //nologo %ModifyVersionVBSFilePath% %VersionFilePath% %DriverFilePath%') do set "d=%%i"
    set TeamforgeVersion=%d%
    
    tf checkin %VersionFilePath% %DriverFilePath% /comment:"Build Server New Build on %TeamforgeVersion%" /noprompt /override:"Build Server Checkin"
    
    
    echo Start to Upload the Image files to Teamforge
    set eProductReleaseUploadFile=%eProductReleaseFilePath%eProduct%TeamforgeVersion%.ZIP
    if not exist %eProductReleaseUploadFile% ( echo Do not exist %eProductReleaseUploadFile%, maybe build solution failed. 
    echo Build Failed.
    exit )
    
    if not exist %DriverReleaseFilePath% ( echo Do not exist %DriverReleaseFilePath%, maybe build Driver Disk failed. 
    echo Build Failed.
    exit )
    
    %TeamforgeUploadExecutableFile% %eProductReleaseUploadFile% %TeamforgeProjectName% %TeamforgePackage% %TeamforgeVersion% "http://sourceforge.is.ad.Company.com/sf-soap43/services" "Cruise_Control" "Mikohn123"
    %TeamforgeUploadExecutableFile% %DriverReleaseFilePath% %TeamforgeProjectName% %TeamforgePackage% %TeamforgeVersion% "http://sourceforge.is.ad.Company.com/sf-soap43/services" "Cruise_Control" "Mikohn123"
    
    echo Upload the Image files to Teamforge Finished
    
    echo Build Finished.
    
    exit
    View Code

    Auto Increase Version Number:

    If Wscript.Arguments.Count <> 2 Then
        WScript.Echo "Arguments Count Error"
        wscript.quit
    End If
    
    
    Set objFS = CreateObject("Scripting.FileSystemObject")
    'version.h path
    versionFilePath=Wscript.Arguments(0)
    'ProductNameeProductDriver.ism path
    driverFilePath=Wscript.Arguments(1)
    
    
    Dim newFileContent
    Dim newDriverContent
    Dim currentVersion
    Dim nextVersion
    
    'Manually configure if needed.
    'Below 5 variables is used for search the special version number
    'This is used for search the postfix number 888 (e.g. 1.7.0.888)
    versionPostfixString="#define Product_INT_VERSION "
    'This is used for search the prefix string 1.7.0 (e.g. 1.7.0.888)
    versionPrefixString="#define PACKAGE_VERSION " & chr(34)
    'This is used for search the Product version number in ism file (e.g. 1.7.0.888)
    driverProductVersionPrefixString="        <row><td>ProductVersion</td><td>"
    'This is used for search the EProduct version number in ism file (e.g. 1.7.0.888)
    driverEProductVersionPrefixString="        <row><td>EProductVERION</td><td>"
    'the last charactor in the row (ism file)
    driverCommonPostfixString="</td><td/></row>"
    
    
    ' Auto Increase version.h file version number
    Set versionFile = objFS.OpenTextFile(versionFilePath)
    'Read the lines one by one
    Do Until versionFile.AtEndOfStream
        strLine = versionFile.ReadLine
        ' Search if this line has versionPostfixString , Then get the postfix number and set the next number: nextVersionPostfix
        If InStr(strLine,versionPostfixString)> 0 Then
            versionPostfixLength=Len(strLine)-Len(versionPostfixString)
            versionPostfix=Right(strLine,versionPostfixLength)
            nextVersionPostfix=versionPostfix+1
            If nextVersionPostfix>=1000 Then
                nextVersionPostfix=1
            End If
            strLine = Replace(strLine,versionPostfix,nextVersionPostfix)
        End If
        'Search if this line has versionPrefixString
        If InStr(strLine,versionPrefixString)> 0 Then
            versionPrefixLength=Len(strLine)-Len(versionPrefixString)
            versionPrefix=Right(strLine,versionPrefixLength)
            versionPrefix=Left(versionPrefix,versionPrefixLength-1)
        End If
        'Store all the lines to newFileContent, it will be write to the version.h again.
        newFileContent = newFileContent & strLine & vbcrlf
    Loop
    versionFile.Close
    
    'Write the new content to the version.h
    Set versionFile  = objFS.OpenTextFile(versionFilePath,2)
    versionFile.Write newFileContent
    versionFile.Close
    
    currentVersion=versionPrefix & "." & versionPostfix
    nextVersion = versionPrefix & "." & nextVersionPostfix
    
    'Auto increase driver version number
    Set driverFile = objFS.OpenTextFile(driverFilePath)
    'Read the lines one by one
    Do Until driverFile.AtEndOfStream
        strLine = driverFile.ReadLine
        ' Search if this line has driverProductVersionPrefixString
        If InStr(strLine,driverProductVersionPrefixString)> 0 Then
            driverPreProductLength=Len(strLine)-Len(driverProductVersionPrefixString)
            driverLastVersionString=Right(strLine,driverPreProductLength)
            driverProductLength=Len(driverLastVersionString)-Len(driverCommonPostfixString)
            driverLastVersionString=Left(driverLastVersionString,driverProductLength)
            strLine = Replace(strLine,driverLastVersionString,nextVersion)
            
        End If
    
        'Search if this line has driverEProductVersionPrefixString
        If InStr(strLine,driverEProductVersionPrefixString)> 0 Then
            driverPreEProductLength=Len(strLine)-Len(driverEProductVersionPrefixString)
            driverLastEProductVersionString=Right(strLine,driverPreEProductLength)
            driverEProductLength=Len(driverLastEProductVersionString)-Len(driverCommonPostfixString)
            driverLastEProductVersionString=Left(driverLastEProductVersionString,driverEProductLength)
            
            strLine = Replace(strLine,driverLastEProductVersionString,nextVersion)
        End If
        'Store all the lines to newDriverContent, it will be write to the version.h again.
        newDriverContent = newDriverContent & strLine & vbcrlf
    
    Loop
    driverFile.Close
    
    'Write the new content to the driver file
    Set driverFile  = objFS.OpenTextFile(driverFilePath,2)
    driverFile.Write newDriverContent
    driverFile.Close
    
    'This is the file version number, return to the result.
    WScript.Echo currentVersion
    View Code
  • 相关阅读:
    git撤销修改
    python参数组合
    java打包jar后,使之一直在linux上运行,不随终端退出而关闭
    输入流加载资源文件的3种方式
    ActiveMQ集群下的消息回流功能
    activemq在一台服务器上启动多个Broker
    JAVA多线程下载
    829. 连续整数求和-leetcode
    mysql笔记-索引
    redis源码学习-skiplist
  • 原文地址:https://www.cnblogs.com/zhengshuangliang/p/4236297.html
Copyright © 2020-2023  润新知