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



我希望使用 SVN、Jenkins 和 Urban Code Deployment 自动执行手动复制粘贴活动。

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

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

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

这只是SVN和Unix服务器中文件夹结构的插图。任何帮助不胜感激

您可以使用以下命令仅为特定修订版选取修改后的文件,并将它们签出到 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

我制作了一个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:Subversionbinsvn 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"
}

最新更新