将Terraform计划输出添加为Azure Devops Build Pipeline中的PR注释

时间:2019-11-14 18:12:45

标签: azure-devops terraform devops

在我当前的任务中,我正在将terraform集成到我们的Azure DevOps CI / CD管道中。我的要求如下:

  1. 创建PR应该会触发构建管道。
  2. 构建管道中的任务应向提高的PR发布评论。评论内容将 是terraform计划的输出,即将要部署的新基础架构。
  3. 一旦批准PR并将代码合并到master,将触发CD管道,这将 将基础结构部署到Azure。

到目前为止,我对1和3的要求都进行了排序,但是我不知道如何使用terraform plan命令中的内容发布有关PR的注释。是否有任何内置任务?如果没有,我该如何实现?这有可能吗?如果是这样,有人可以指出可以提供帮助的资源还是仅显示相同的.yml文件?

我搜索了很多,但没有找到任何东西。我的猜测是您无法在构建管道中添加评论。需要您的建议。

1 个答案:

答案 0 :(得分:1)

  

将Terraform计划输出添加为Azure Devops Build Pipeline中的PR注释

现在恐怕还没有现成的方法可以将terraform plan输出添加为PR注释。

我现在正在考虑的解决方法是调用Rest API以使用terraform plan命令中的内容创建PR注释。

我们可以使用Rest API Pull Request Thread Comments - Create

POST https://dev.azure.com/{organization}/{project}/_apis/git/repositories/{repositoryId}/pullRequests/{pullRequestId}/threads/{threadId}/comments?api-version=5.1

创建对PR的评论。我们可以将terraform plan命令中的内容写为Request Body:

{
  "content": "YourContentsFromTerraformPlan ",
  "parentCommentId": 1,
  "commentType": 1
}

但以上API需要pullRequestId。因此,我们还需要另一个API来获取当前项目Pull Requests - Get Pull Requests By ProjectpullRequestId

GET https://dev.azure.com/{organization}/{project}/_apis/git/pullrequests?api-version=5.1

它将返回一系列pullRequestId,然后我们可以使用powershell参数Select-Object -first 1,例如:$LastPullRequestId= $pullRequestIds.value.id | Select-Object -first 1以获取最新的pullRequestId

因此,我们可以在构建管道中添加两个内联powershell任务,以调用Rest API以获取最新的pullRequestId,然后使用此pullRequestId创建PR评论。

希望这会有所帮助。