2017-07-16 89 views
-1

我正在尝试对Azure数据工厂的管道进行部署。换句话说,我打算只将最近修改过的管道或最近添加的管道部署到Azure门户中的ADF。目前,我在我的CD管道中使用powershell任务来部署所有管道。如何使用时间戳获取最近修改的管道?任何建议都会有帮助。 :)获取VSTS的git存储库中的上次更新/提交的文件

+0

你的意思是你想CI和CD的变化文件(s)为您的git回购的最新提交?但是构建和部署将用于最新提交的所有文件。 –

+0

@ Marina-MSFT HI Marina。建立所有的文件,但只推送/发布基于时间戳的修改后的文件...有可能吗? –

+0

是的,可以为所有文件构建并为更改后的文件进行部署。我在答案中给出了答案。 –

回答

0

如果您想要构建所有文件,但只推送/发布要部署的已修改文件,这是可能的。

您可以使用PowerShell的任务来获得最后的提交ID(SHA-1值)$(Build.SourcesDirectory),然后用git show <commit id>找到该文件在提交,然后复制这些文件被更改为$(build.artifactstagingdirectory)。最后将这些文件发布到服务器。

0

您可以使用REST API获取已更改的文件。

简单的PowerShell脚本:

Param(
[string]$collection, 
[string]$project, 
[string]$repository, 
[string]$commit, 
    [string]$token 
) 
$u="$($collection)$($project)/_apis/git/repositories/$repository/commits/$commit/changes" 
Write-Output $u 
$changedFiles=New-Object System.Collections.ArrayList 
$base64AuthInfo = [Convert]::ToBase64String([Text.Encoding]::ASCII.GetBytes(("{0}:{1}" -f "",$token))) 
$result=Invoke-RestMethod -Method Get -Uri $u -Headers @{Authorization=("Basic {0}" -f $base64AuthInfo)} -ContentType "application/json" 

Foreach($c in $result.changes) 
{ 
    If($c.item.isFolder -ne 'true') 
    { 
     Write-Output $c.item.path 
     $changedFiles.Add(($c.item.path)) 
    } 
} 

参数(选中允许脚本访问的OAuth在构建/发布定义标记选项):

-collection $(System.TeamFoundationCollectionUri) -project $(System.TeamProject) -repository $(Build.Repository.Name) -commit $(Build.SourceVersion) -token $(System.AccessToken)