Azure Pipeline 基于文件的触发器和标签

标签 azure azure-devops azure-pipelines-build-task

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

假设我有以下目录结构。

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

从它的响应体中,你可以直接知道它的路径和文件:

enter image description here

由于响应正文是 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/

相关文章:

aws-lambda - 从 Visual Studio Team Services 部署到 AWS Lambda,找不到 Dotnet Lamba

使用 docker 的 Azure DevOps 自托管代理

typescript - 如何使用 Azure AD 传递不记名 token ?

azure - 当不是 ASP.NET Web 项目时,如何将 ASP.NET 网站发布到 Azure

python - 在 Azure DevOps 管道中找不到 Pytest

azure - 自动从 Azure Function App 更新到 API 管理

azure-devops - 如何通过VSTS CI管道为解决方案中的每个项目分别发布工件?

azure - 是否可以将 HDInsight 群集与本地 AD 集成?

azure - 有没有办法将一个 AzureAD 应用程序同时用于前端和后端

github - Azure DevOps管道找不到管道YAML文件