在SVN中的多个文件夹中构建和部署文件到目标服务器

时间:2017-07-31 15:22:49

标签: svn jenkins build devops ucd

我希望使用SVN,Jenkins和Urban Code Deploy自动化手动复制粘贴活动。

我们现在已经创建了一个SVN repo,它具有与Unix服务器Dir结构相同的目录结构。挑战在于,我无法进行干净的部署,因为我只需要选择在任何文件夹中更改的文件,并将其放在Unix服务器上的相应文件夹中。

我无法弄清楚如何创建Jenkins作业以从多个文件夹中选择文件并创建一个包并使用Urban Code Deploy部署到目标服务器上的多个文件夹。

a   
|------b
|   --------b
c
|-------d
    --------v
        --------m

这只是SVN和Unix服务器中文件夹结构的一个例子。任何帮助表示赞赏

2 个答案:

答案 0 :(得分:0)

您可以使用以下命令仅选择特定修订版本的已修改文件,并将它们检出到Unix服务器中各自的目录:

svn checkout https://org.svn.host/path/to/your/file /path/to/target_dir --depth empty --revision <revisionNumber>

cd /path/to/target_dir

svn up file_you_want

答案 1 :(得分:0)

我制作了一个 PowerShell脚本来从多个文件夹中选取文件。 我也对一些 Jenkins项目做同样的事情。所以我希望它会对你有所帮助。 请随意请求任何帮助以了解以下脚本和/或如何使用此脚本。

脚本: -

#################  USER INPUT STARTS #####################################################################################################
$TARGET=""                                    #Give target path where you want to get only changed files with folder structure#
$SRCFILE=""                                   #Source path, your SVN checkout#
$SVNURL=""                                    #Give Repository URL For eg. "svn://0.0.0.0/abc/trunk/def"
$FINDSTR=""                                   #Give Value For eg. "trunk/def/" 
$Daysback="-06"                               #Give number of days. For eg. give "-01" if you want to get changed files from last 1 Day#
#################  USER INPUT ENDS #####################################################################################################
$CurrentDate=Get-Date
$DatetoDelete=$CurrentDate.AddDays($Daysback)
$Daysback="1"
$CurrentDate=Get-Date
$CurrentDate=$CurrentDate.AddDays($Daysback)
$FROM1=$CurrentDate.Year
$FROM2=$CurrentDate.Month
$FROM3=$CurrentDate.Day
$TO1=$DatetoDelete.Year
$TO2=$DatetoDelete.Month
$TO3=$DatetoDelete.Day
[string]$FROM = (get-date).ToString("$FROM1-$FROM2-$FROM3");
[string]$TO = (get-date).ToString("$TO1-$TO2-$TO3");
[string]$DATE = "{$FROM}:{$TO}";
$DATE                           
$DIFFER=D:\Subversion\bin\svn diff "$SVNURL" --summarize -r $DATE      #Here you have to give absolute path of your "svn.exe"  

IF($DIFFER)
{
    IF($DIFFER.count -GT 1)
    {
        for($i=0; $i -le ($DIFFER.Count-1); $i++)
        {
            $SYS11=$DIFFER[$i]
            $APP11=($SYS11 -SPLIT ',*'+$FINDSTR)[1]
            $FILEDIR="$APP11"
            $FILE=Split-Path $APP11 -leaf 
            $EXTENSION=(Split-Path -Path $FILE -Leaf).Split(".")[1];
            IF($EXTENSION)
            {
                $FILEDIR =$FILEDIR -replace $FILE, ""
                $TARGETDIR="$TARGET\$FILEDIR"
                IF (!(Test-Path $TARGETDIR))
                {
                    New-Item $TARGETDIR -type Directory > $null 
                }
                $FROM="$SRCFILE\$APP11"
                $TARGETFILE="$TARGET\$APP11"
                IF(Test-Path $FROM)
                {
                    Copy-Item $FROM $TARGETFILE -force
                    ECHO "==============================================================================="
                    ECHO "$FROM"
                    ECHO "**************"
                    ECHO "$TARGETFILE"
                    ECHO "**************"
                    ECHO "NAME OF COPIED FILE  ::: $FILE"
                }
                ELSE
                {
                    ECHO "NOT FOUND $FROM"
                }
            }   
        }    
    }
    ELSE
    {
        $SYS11=$DIFFER
        $APP11=($SYS11 -SPLIT ',*'+$FINDSTR)[1]
        $FILEDIR="$APP11"
        $FILE=Split-Path $APP11 -leaf 
        $EXTENSION=(Split-Path -Path $FILE -Leaf).Split(".")[1];
        IF($EXTENSION)
        {
            $FILEDIR =$FILEDIR -replace $FILE, ""
            $TARGETDIR="$TARGET\$FILEDIR"
            IF (!(Test-Path $TARGETDIR))
            {
                New-Item $TARGETDIR -type Directory > $null 
            }
            $FROM="$SRCFILE\$APP11"
            $TARGETFILE="$TARGET\$APP11"

            IF(Test-Path $FROM)
            {
                Copy-Item $FROM $TARGETFILE -force
                ECHO "==============================================================================="
                ECHO "$FROM"
                ECHO "**************"
                ECHO "$TARGETFILE"
                ECHO "**************"
                ECHO "NAME OF COPIED FILE  ::: $FILE"
            }
            ELSE
            {
                ECHO "NOT FOUND $FROM"
            }
        }
    }
}
ELSE
{
    ECHO "NO CHANGE IN $SVNURL"
}