如何在使用Azure DevOps REST API创建构建定义时提供管道参数?

时间:2020-01-23 07:10:25

标签: docker azure-devops azure-pipelines azure-devops-rest-api azure-repos

我可以使用Azure DevOps REST API创建生成定义。当我从门户网站运行生成定义时,它没有使用azure-pipeline.yml文件,该文件是Azure Repos中代码库的一部分。管道文件(azure-pipeline.yml)包含docker任务,该任务将为应用程序构建映像。但是此操作不起作用。为了解决这个问题,我创建了两个定义。

  1. 从Azure DevOps Portal手动创建生成定义。
  2. 使用Azure DevOps REST API创建构建定义。

第一种方法按预期工作。它正在为应用程序创建一个docker映像,并且docker任务正常运行。第二种方法不起作用,它只是从存储库中签出源代码。

我遇到了包括管道文件路径在内的过程参数。我不知道如何使用REST API进行配置。

我正在关注本文档https://docs.microsoft.com/en-us/rest/api/azure/devops/build/definitions/create?view=azure-devops-rest-5.1

编辑1

{
"name": "myapp2",
"badgeEnabled": "true",
"queue": {
    "name": "Hosted Ubuntu 1604",
    "pool": {
        "name": "Hosted Ubuntu 1604",
        "isHosted": true
    }
},
"jobAuthorizationScope": "projectCollection",
"jobTimeoutInMinutes": 60,
"jobCancelTimeoutInMinutes": 5,
"quality": "definition",
"type" : "build",
"process": {
    "type": 2
},
"processParameters" : {
    "inputs" : [{
        "name" : "azure-pipeline.yml",
        "required" : true
    }]
}

其余配置与repositories相关。

在门户中创建构建定义

enter image description here

使用Azure DevOps REST API创建构建定义

enter image description here

1 个答案:

答案 0 :(得分:0)

如果您已经拥有yaml管道azure-pipeline.yml,请从上述帖子中获取。无需调用“创建定义” api即可使用azure-pipeline.yml作为参数来创建相同的API。您可以调用,然后手动或通过Build Queue API

将管道Yaml排队

如果要使用api创建定义,则可以首先使用Get Definition api调用现有的构建管道定义,以便可以参考返回的响应来检查需要配置哪些属性创建定义 api。

这里是Create VSTS Build Definitions using PowerShell的示例,此外,在此博客中,您还可以通过引用Get Definition api的响应来定义管道任务(在process:{phases:[{steps:}]}中定义)。

如您所见,使用api定义构建管道很复杂,因此不建议使用this thread中讨论的方法。创建管道的最便捷方法是通过GUI手动或使用yaml。

更新:

如果调用Get Definition api以获取现有yaml管道的json格式定义。您将看到没有processParameters属性。 因此,当您使用api创建Yaml管道时,无需定义processParameters属性。只能在流程属性"process": { "yamlFilename": "azure-pipelines.yml", "type": 2}中定义yaml文件。

出于测试目的,我首先获取现有yaml管道的json格式定义,然后修改了json文件的一部分。然后,我从azure管道UI中删除yaml管道。最后,我使用创建Definiton API 创建yaml管道。然后按预期方式创建yaml管道。

您在问题中发布的最后一个屏幕截图在经典管道中。 Yaml管道没有Parameters部分。

属性processParameters将定义此Parameters部分。它用于链接所有在构建定义中使用的任务的重要参数。检查here以获得有关Classic管道中processParameters的更多信息。

enter image description here