温馨提示:本文翻译自stackoverflow.com,查看原文请点击:其他 - Azure Pipeline File-based Trigger and Tags
azure azure-devops azure-pipelines-build-task

其他 - 基于Azure管道文件的触发器和标记

发布于 2020-03-27 15:59:11

是否可以使用基于文件的触发器来构建构建管道?

假设我具有以下目录结构。

Microservices/
    |_Service A
        |_Test_Stage
            |_Testing_Config
        |_QA_Stage
            |_QA_Config
        |_Prod_stage
            |_Prod_Config
    |_Service B
        |_Test_Stage
            |_Testing_Config
        |_QA_Stage
            |_QA_Config
        |_Prod_stage
            |_Prod_Config

我只想拥有一个YAML构建管道文件。根据变量$(Project)和$(Stage)创建不同的版本。是否可以检查哪个目录/文件启动了触发器并相应地设置了变量?

另外,如果可以在运行后使用这些变量将标签设置为工件,那将是很好的。

谢谢KR

查看更多

查看更多

提问者
Radeonx
被浏览
136
Merlin Liang - MSFT 2020-01-31 16:42

是否可以检查哪个目录/文件启动了触发器并相应地设置了变量?

当然可以 但是没有直接的方法,因为我们没有提供任何预定义的变量来存储此类消息,因此您需要进行其他复杂的工作才能实现这一点。

#1:

尽管没有变量可以直接存储消息,例如修改了哪个文件夹和哪个文件,但是您可以通过api跟踪提交消息 Build.SourceVersion获取它

GET https://dev.azure.com/{organization}/{project}/_apis/git/repositories/{repositoryId}/commits/{commitId}/changes?api-version=5.1

从其响应主体中,您可以直接知道其路径和文件:

在此处输入图片说明

由于响应主体为JSON格式,因此您可以使用一些JSON函数来解析此路径值。请参阅此类似脚本作为参考。

然后使用powershell脚本将这些值设置为管道变量,下一个代理作业/任务可以使用它们。

另外,在您的情况下,所有这些都应在所有下一个作业开始之前完成。因此,您可以考虑使用管道装饰器创建一个简单的扩展在decorator中定义上述所有步骤,以便可以在每个管道的工作前完成它。


#2

认为您应该觉得上述方法有点复杂。因此,我建议您可以使用commit messge例如,指定project namefile name在提交消息中,使用variable获取它们Build.SourceVersionMessage

然后使用powershell脚本(如上所述)将它们设置为变量。

这比使用api解析提交主体更方便。

希望其中之一可以提供帮助。