仅在VSTS发布管道中将更改下载到git repo

时间:2018-09-11 16:06:56

标签: git azure-devops azure-pipelines azure-pipelines-release-pipeline

我有一个VSTS发布管道,可以从git repo复制文件:

enter image description here

这个git repo确实很大-大约1GB。每次触发发布时,VSTS代理都会下载git repo的全部内容。有没有一种方法可以将VSTS配置为仅将更改下载到此git仓库中,即在存储库上运行git pull?这样可以节省大量时间和带宽。

3 个答案:

答案 0 :(得分:4)

有两种方法可以使下载工件步骤更有效。

选项1:使用PowerShell任务在最新提交中下载更新的文件

首先删除发布管道中的docker工件。然后在每个发行环境的开始处添加 PowerShell任务(第一个任务)。

以下是仅下载更改文件的PowerShell:

mkdir partrepo
cd partrepo
git init
git remote add up -f https://Personal%20Access%20Token:{PAT}@{account}.visualstudio.com/{project}/_git/{repo}
#Or you can use the new Azure devops url instead
$files=$(git diff up/master up/master~ --name-only)
echo "changed files: $files"
$t=$files -is [array]
if ($files -is [array])
{
  echo "multiple files updated"
  for ($i=0;$i -lt $files.Length; $i++)
  {
  $tfile=$files[$i]
  git checkout up/master -- $tfile
  }
}
else
{
  git checkout up/master -- $files
}

注意:由于默认情况下未选中“标准错误失败”选项,因此可以使用PowerShell任务版本2.*

选项2:仅从git repo下载最新的提交

您还可以将浅提取深度指定为1,然后下工件步骤将仅下载最新的提交。它将大大减少伪像的大小。

enter image description here

答案 1 :(得分:1)

您可以从发布管道的“工件”部分中删除git repo,并以另一种方式获取存储库:

在您的发行版中,第一个任务是命令行任务,该任务将从git存储库中提取更改。

enter image description here

答案 2 :(得分:0)

我认为您要寻找的实际上是使用构建管道中的 artifact 。这是使用“发布工件”任务将README.md文件发布为artifact的构建管道的YAML。

resources:
- repo: self
queue:
  name: Hosted VS2017
steps:
- task: PublishBuildArtifacts@1
  displayName: 'Publish Artifact: drop'
  inputs:
    PathtoPublish: README.md

然后在发布管道中,您可以从构建管道中添加工件(记住至少要至少构建一次!)。然后,该工件将在发布管道中可用。这是一个向管道添加“复制文件”任务并使用工件的示例;

enter image description here

总结一下

  • 配置构建管道,该管道在回购更新时构建,因此最新文件始终作为工件发布。构建管道将执行您要寻找的git pull
  • 在发布管道中使用这些工件。