对所选文件使用 AzureFileCopy 任务
Using AzureFileCopy task for selected files
我在 Azure DevOps 中有一个非常简单的管道。当提交到开发分支时,存储库中的文件将被签出,然后使用 AzureFileCopy 任务将其推送到 blob 存储容器。当我当前 运行 管道时,blob 中的所有文件都显示修改日期,包括那些已经在回购中的文件。
我们的开发人员询问我们是否可以更改它,以便仅更新提交到存储库的新文件或修改后的文件,而不会覆盖所有其他文件。我已尝试使用设置为 false 的覆盖参数,但这会忽略对文件内容的任何更改。
我考虑过改用 powershell,但正在寻找有关执行此操作的最佳方法的建议?
您可以使用 Azure PowerShell task 到 运行 您的脚本来查找提交到存储库的新文件或修改后的文件,然后将它们复制到您的 blob 存储容器。
以下是代码片段。
#get a list of all files that are part of the commit given SHA
$result=$(git diff-tree --no-commit-id --name-status -r $(Build.SourceVersion))
#The result looks like "M test/hello.txt A today.txt"
$array=$Result.Split(" ")
#The arraylooks like "
#M test/hello.txt
#A today.txt"
foreach ($ele in $array)
{
#Added (A), Copied (C), Deleted (D), Modified (M)
if ($ele.Contains("M") -eq 0 -Or $ele.Contains("A") -eq 0)
{
#filename looks like "test/hello.txt"
$fileName=$ele.Substring(2)
$sourcePath="$(Build.SourcesDirectory)" + "\" + $fileName
#your azcopy code here
}
}
另一个更简单的解决方法是您可以使用 PowerShell task to find the new or modified files committed to the repo and then copy them to a new $(Build.SourcesDirectory)/temp
folder with corresponding path structure, and then still use the Azure File Copy task 将 $(Build.SourcesDirectory)/temp
文件夹下的文件复制到您的 blob 存储容器。
# Write your PowerShell commands here.
Write-Host "Hello World"
$result=$(git diff-tree --no-commit-id --name-status -r $(Build.SourceVersion))
$array=$Result.Split(" ")
md $(Build.SourcesDirectory)/temp
foreach ($ele in $array)
{
if ($ele.Contains("M") -eq 0 -Or $ele.Contains("A") -eq 0)
{
$fileName=$ele.Substring(2)
$source="$(Build.SourcesDirectory)" + "\" + $fileName
$destination="$(Build.SourcesDirectory)/temp" + "\" + $fileName
New-Item $destination -type file -Force
Copy-Item -Path $source -Destination $destination
}
}
#Get-ChildItem -Path $(Build.SourcesDirectory)/temp –Recurse
我在 Azure DevOps 中有一个非常简单的管道。当提交到开发分支时,存储库中的文件将被签出,然后使用 AzureFileCopy 任务将其推送到 blob 存储容器。当我当前 运行 管道时,blob 中的所有文件都显示修改日期,包括那些已经在回购中的文件。
我们的开发人员询问我们是否可以更改它,以便仅更新提交到存储库的新文件或修改后的文件,而不会覆盖所有其他文件。我已尝试使用设置为 false 的覆盖参数,但这会忽略对文件内容的任何更改。
我考虑过改用 powershell,但正在寻找有关执行此操作的最佳方法的建议?
您可以使用 Azure PowerShell task 到 运行 您的脚本来查找提交到存储库的新文件或修改后的文件,然后将它们复制到您的 blob 存储容器。 以下是代码片段。
#get a list of all files that are part of the commit given SHA
$result=$(git diff-tree --no-commit-id --name-status -r $(Build.SourceVersion))
#The result looks like "M test/hello.txt A today.txt"
$array=$Result.Split(" ")
#The arraylooks like "
#M test/hello.txt
#A today.txt"
foreach ($ele in $array)
{
#Added (A), Copied (C), Deleted (D), Modified (M)
if ($ele.Contains("M") -eq 0 -Or $ele.Contains("A") -eq 0)
{
#filename looks like "test/hello.txt"
$fileName=$ele.Substring(2)
$sourcePath="$(Build.SourcesDirectory)" + "\" + $fileName
#your azcopy code here
}
}
另一个更简单的解决方法是您可以使用 PowerShell task to find the new or modified files committed to the repo and then copy them to a new $(Build.SourcesDirectory)/temp
folder with corresponding path structure, and then still use the Azure File Copy task 将 $(Build.SourcesDirectory)/temp
文件夹下的文件复制到您的 blob 存储容器。
# Write your PowerShell commands here.
Write-Host "Hello World"
$result=$(git diff-tree --no-commit-id --name-status -r $(Build.SourceVersion))
$array=$Result.Split(" ")
md $(Build.SourcesDirectory)/temp
foreach ($ele in $array)
{
if ($ele.Contains("M") -eq 0 -Or $ele.Contains("A") -eq 0)
{
$fileName=$ele.Substring(2)
$source="$(Build.SourcesDirectory)" + "\" + $fileName
$destination="$(Build.SourcesDirectory)/temp" + "\" + $fileName
New-Item $destination -type file -Force
Copy-Item -Path $source -Destination $destination
}
}
#Get-ChildItem -Path $(Build.SourcesDirectory)/temp –Recurse