是否可以使用基于文件的触发器创建构建管道?
假设我有以下目录结构。
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) 创建不同的构建。 是否可以检查哪个目录/文件启动了触发器并相应地设置变量?
此外,如果可以在运行后使用这些变量将标签设置为工件,那就太好了。
谢谢 韩元
最佳答案
Is it possible to check what directory/file initiated the Trigger and set the variables accordingly?
当然可以。但没有直接的方法,因为我们不提供任何预定义的变量来存储此类消息,因此您需要额外的复杂工作才能获得该消息。
#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
想必你会觉得上面的方法有点复杂。所以我宁愿建议你可以使用提交消息。例如,在提交消息中指定项目名称
和文件名
,通过变量Build.SourceVersionMessage
获取它们。
然后使用 powershell 脚本(我上面提到过)将它们设置为变量。
这比使用api解析提交正文更方便。
希望其中一位能够提供帮助。
关于Azure Pipeline 基于文件的触发器和标签,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59987997/