首页 > 解决方案 > Azure 构建管道 - 获取源 - 清理 - `Sources` 和 `Sources directory` 之间有什么区别?

问题描述

在 azure build pipeline 中,Get Sources假设 clean 设置为true,那么您需要选择以下选项之一:

Sources
Sources and output directory
Sources directory
All build directories

Sources以下是和之间的区别Sources directory。你能用实际的例子向我解释一下吗?

Sources:构建管道执行 $(Build.SourcesDirectory) 中的任何更改的撤消。更具体地说,在获取源之前执行以下 Git 命令。

git clean -ffdx
git reset --hard HEAD

源目录:删除并重新创建 $(Build.SourcesDirectory)。这导致为每个构建初始化一个新的本地 Git 存储库。

标签: azure-devopsazure-pipelinesbuild-pipeline

解决方案


SourcesAzure 构建管道 - 获取源 - 干净 -和有什么区别Sources directory

对于Sources,就像文件所说的那样:

构建管道执行$(Build.SourcesDirectory)中的任何更改的撤消

重要提示an undo of any changes此处提到的更改是指不受源代码控制的更改。

我们可以从 git 命令中得到这个git clean -ffdx

混帐清洁

选项

-d

除了未跟踪的文件之外,删除未跟踪的目录。如果未跟踪的目录由不同的 Git 存储库管理,则默认情况下不会将其删除。如果您真的想删除这样的目录,请使用两次 -f 选项。

因此,它将清除源代码中的源代码控制未跟踪的任何更改

例如,我$(Build.SourcesDirectory)直接在我的构建服务器机器中进行了一些更改(不是 repo)。该clean:source选项将还原此更改。

构建管道后,我在源目录中修改了一个测试 txt 文件,例如c:\agent_work\1\s

在此处输入图像描述

我直接在目录中更改1122112233。接下来,我设置了clean:source,当我们执行管道时,azure devops 将删除上述修改,将恢复为1122.

对于Sources 目录,就像文档解释的那样,azure devops 将删除并重新创建$(Build.SourcesDirectory). 它将删除文件夹c:\agent_work\1\s,然后创建一个新文件夹,并在新创建的文件夹中签出源。


更新了更详细的示例:

要说清源,我们要知道这个选项是用于自托管代理而不是微软托管的代理,用于清空$(Build.SourcesDirectory)自托管代理中的源目录。那是因为您每次使用 Microsoft 托管代理时都会获得一个新代理。检查官方文档中的注释

Sources现在,让我们比较一下和之间的区别Sources directory

当我们使用自托管代理创建新管道时,Azure devops 会将源从 repo 检出到自托管代理:

在此处输入图像描述

因此,来自 repo 的构建源将保存到$(Build.SourcesDirectory)我们自托管代理的文件夹中:

在此处输入图像描述

然后,我们打开那个文件夹,并在这个文件夹中手动添加一个新的测试文件(不要从 repo 中添加),比如Test.txt.

如果我们选择clean:source,azure devops 将删除Test.txt我们手动添加的文件,但保留其他文件

在此处输入图像描述

接下来,我们测试该clean:Sources directory选项。我们还在文件夹中添加相同的测试文件$(Build.SourcesDirectory),然后选择选项 Sources Directory:

在此处输入图像描述

所以,你应该清楚的知道 和 的区别SourcesSources directory一种只清除我们添加的多余文件,另一种是清除所有文件。当我们的 repo 很大时,我们不想花时间重新检查所有 repo,我们可以选择 source。

这是最简单最直接的例子。当然,这个选项不仅对文件有用,对任何文件修改也有用。


推荐阅读