Azure Pipeline构建特定的拉取请求

时间:2019-10-31 07:54:28

标签: azure-devops azure-pipelines

我有一个请求列表,每个请求都链接到特定的工作项。我只想为某些工作项运行管道。因此,我想以某种方式自动仅自动选择与要构建的工作项相关的提交/请求。在工作项或类似项目上使用标签。在构建中,我只需要更改的文件,因此我在考虑使用git diff. 使用Azure管道有可能吗?

1 个答案:

答案 0 :(得分:1)

如果我正确理解了您的请求,则只需要为那些满足某些要求(例如,链接到带有特定单词的工作项的链接)的拉取请求运行构建管道。尽管我确定对此没有现成的解决方案,但我认为可以使用Conditions conceptREST API来实现。

我将按照以下步骤操作:

  • 构建作业中的第一个构建步骤应该是脚本,以查找正在构建的特定拉取请求是否与目标工作项相关。它可以是PowerShell的构建步骤,应该:

    • 获取拉取请求ID-以System.PullRequest.PullRequestId的{​​{3}}的形式提供
    • 制作一个与该拉取请求相关的predefined system variable。它将返回{id, url}对的集合,其中id是所讨论的工作项的ID
    • 对于每个找到的工作项ID,请创建一个REST API call to get work item IDs,尤其是您对响应的System.Tags属性感兴趣
    • 同样,对于每个工作项,解析System.Tags属性值以找出其是否包含必要的标签
    • 如果至少一个相关工作项包含您感兴趣的标签,则REST API call to get the details of the work item称为ShouldRunTheRestOfThePipelinetrue
  • 使用set the flag variable来限制工作的进一步步骤。您可以阅读有关表达式custom condition的语法的更多信息。 here特别说明了如何在后续步骤的条件下使用上一个构建步骤中设置的变量

现在,关于仅获取已更改文件的注释。实际上,拉取请求的性质是将更改后的文件与其创建时所针对的目标分支进行比较。因此,您无需对git diff进行任何额外操作-提取请求已经包含了您所需要的全部内容。

最后,我建议您重新考虑此设置的要求,因为这对我来说听起来有点不自然。还有其他关于如何不触发管道的选项。例如,可以基于Q&A section来决定,includeexclude选项均可用。或者,您可以指定要包括或排除的文件路径,例如,如果仅更改docs/*,则永远不要触发管道。支持on the branch/tag name,这使该工具更加灵活。

希望这可以帮助您针对特定情况构建合适的解决方案。