azure-devops - 在 Azure Devops Build Pipeline 中添加 terraform 计划输出作为 PR 注释
问题描述
在我目前的任务中,我正在将 terraform 集成到我们的 Azure DevOps CI/CD 管道中。我的要求如下:
- PR 的创建应该触发构建管道。
- 构建管道中的任务应该向提出的 PR 发布评论。评论的内容将是 terraform 计划输出,即将要部署的新基础设施。
- 一旦 PR 获得批准并将代码合并到 master,将触发 CD 管道并将基础结构部署到 Azure。
到目前为止,我都按照 1 和 3 的要求进行了排序,但我不知道如何使用 terraform plan 命令的内容在 PR 上发表评论。是否有任何内置任务?如果没有,我怎么能做到这一点?这可能吗?如果是这样,有人可以指出可以提供帮助或仅显示相同 .yml 文件的资源吗?
我搜索了很多,但没有找到任何东西。我的猜测是您无法从构建管道中添加评论。需要你的建议。
解决方案
在 Azure Devops Build Pipeline 中添加 terraform 计划输出作为 PR 注释
恐怕目前没有这种开箱即用的方式来添加 terraform 计划输出作为 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 命令中的内容写为请求正文:
{
"content": "YourContentsFromTerraformPlan ",
"parentCommentId": 1,
"commentType": 1
}
但是上面的 API 需要pullRequestId
. 因此,我们还需要另一个 API 来获取pullRequestId
当前项目的Pull Requests - Get Pull Requests By Project:
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 注释。
希望这可以帮助。
推荐阅读
- java - 检查 lexer 和 parser java antlr4 中是否有任何错误
- ruby-on-rails - 为什么我的 Rails 纯文本电子邮件有时有效,有时无效
- android - 多个 Rxjava retryWhen 用于处理不同的错误
- google-cloud-platform - 如何使用 Terraform 公开 gcp 云功能
- python - 403 Google Calendar API 超出日历使用限制
- sql - SQL - 多个时间段的最大值
- html - 什么 CSP 更安全 - style-src 'none' 或 style-src 'unsafe-inline'
- python - 将现有矩阵缩短为特定数量的列
- javascript - 使用 jest、react、webpack 和 svg 进行测试的问题
- python - 如何将 Python 双端队列转换为 C++ 容器?