是否可以使用基于文件的触发器来建立构建管道?
假设我具有以下目录结构。
Microservices
|_Service A
|_Testing_Config
|_QA_Config
|_Prod_Config
|_Service B
|_Testing_Config
|_QA_Config
|_Prod_Config
我只想拥有一个YAML构建管道文件。根据变量$(Project)和$(Stage)创建不同的版本。是否可以检查哪个目录/文件启动了触发器并相应地设置了变量?
另外,如果可以在运行后使用这些变量将标记设置为工件,那就太好了。
谢谢KR
是否可以检查哪个目录/文件启动了触发器,相应地设置变量?
当然是。但是没有直接的方法,因为我们没有提供任何预定义的变量来存储此类消息,因此您需要进行其他复杂的工作才能获得该信息。
#1:
尽管没有变量可以直接存储消息,例如修改了哪个文件夹和哪个文件,但是您可以通过commit message通过跟踪Build.SourceVersion
api来获取它。
GET https://dev.azure.com/{organization}/{project}/_apis/git/repositories/{repositoryId}/commits/{commitId}/changes?api-version=5.1
从其响应主体,您可以直接知道其路径和文件:
由于响应主体为JSON格式,因此您可以使用一些JSON函数来解析此路径值。请参阅此similar脚本作为参考。
然后使用powershell脚本来set these value as pipeline variable,下一个代理作业/任务可以使用它们。
此外,在您的情况下,所有这些都应在所有下一个作业开始之前完成。因此,您可以考虑使用管道decorator创建一个简单的扩展。在装饰器中定义上述所有步骤,以便可以在每个管道的工作前完成它。
#2
认为您应该认为上述方法有点复杂。因此,我建议您可以使用commit messge。例如,在提交消息中指定project name
和file name
,然后使用变量Build.SourceVersionMessage
进行获取。
然后使用powershell脚本(如上所述)将它们设置为变量。
这比使用api解析提交主体更方便。
希望其中一个可以提供帮助。