如何引用刚刚签入源代码管理的文件?
Posted
技术标签:
【中文标题】如何引用刚刚签入源代码管理的文件?【英文标题】:How to reference a file that was just checked in to source control? 【发布时间】:2020-04-25 10:23:57 【问题描述】:我有一个 Azure 管道,它在“签入”到 TFS 源代码控制时触发。它还运行一个简单的 PowerShell 脚本。
在该签入触发器上,我还想获取签入的文件,并在我的 PowerShell 脚本中引用它。该文件是一个 SQL 脚本,我将通过 PowerShell 对 SQL 服务器运行。
如何在我的 PowerShell 代理作业任务中引用该签入文件?
例如,您可以在 PowerShell 任务中使用 $(Build.Repository.LocalPath)
之类的内容引用您的工作文件夹。
然后$(Build.Repository.LocalPath)/mypath/myfile.sql
用于特定文件。我假设有某种“工作”变量可以引用刚刚触发触发器的项目。
【问题讨论】:
在我看来,您将源代码控制和代码生成纠缠在一起。这对我来说似乎是一种反模式。我建议您只遍历一个文件夹并运行其中找到的所有脚本(并记录运行的脚本)。添加和删除文件时,它们会正确运行。您无需将它们显式添加到 powershell 脚本中。 【参考方案1】:您似乎已在构建管道中启用 CI 触发器。如果您只是修改源代码管理中存在的文件,则可以在脚本中使用 $(Build.SourcesDirectory)/myfile.sql 之类的内容。
如果您签入一个新文件(只有一个文件),那么您可以在脚本中获取此构建中包含的变更集/提交并获取该文件。
如果您签入多个文件,这会很复杂,您需要获取此构建中包含的变更集/提交并查询文件以获取您需要的文件。
【讨论】:
【参考方案2】:如果你看这里:https://docs.microsoft.com/en-us/azure/devops/pipelines/build/variables?view=azure-devops&tabs=yaml 这有一个在构建时可用的所有变量的列表,无论是在任务中还是在脚本中作为环境变量。其中之一是触发构建“Build.SourceVersion”的变更集/提交 ID。使用此值,您可以获取属于该变更集/提交的任何文件并在您的脚本中使用它。
祝你好运
ET
【讨论】:
以上是关于如何引用刚刚签入源代码管理的文件?的主要内容,如果未能解决你的问题,请参考以下文章
Visual Studio 2015 新文件未自动添加到源代码管理
Heroku 构建失败:“node_modules 已签入源代码管理”