【问题标题】:TFS 2017 Rest API - Get Approval For a Release after the release is approvedTFS 2017 Rest API - 在发布获得批准后获得批准
【发布时间】:2019-05-09 22:01:20
【问题描述】:

我希望能够在发布运行时记录谁批准了发布。我们有审计要求来证明谁是环境的看门人。以下是事件的顺序:

  1. 发布被触发并等待批准。
  2. 其他用户批准发布
  3. 发布完成。

随着发布的进行,我希望能够记录批准者是谁。我们发现如果您使用 Approvals API,您可以获得 ApprovalID。问题是这只能在第 1 步和第 2 步之间执行。在批准发布后,您将无法再获得 ApprovalID,它是空的。

然后我们查看了特定版本的信息,审批者区域中没有任何数据。即使在文档示例响应中,您也会看到数据不存在。 2017 年我可以做些什么来获取这些信息?

https://docs.microsoft.com/en-us/azure/devops/integrate/previous-apis/rm/releases?view=tfs-2017

$RecentReleaseUrl = $TFSCollectionPath + $TFSProjectName + "/_apis/Release/approvals?releaseIdsFilter=$RecentRealease&api-version=3.2-preview.2"

$RecentReleasedefinition = Invoke-RestMethod -Uri $RecentReleaseUrl -Method Get -Headers @{Authorization=("Basic {0}" -f $base64AuthInfo)}

$ApprovalID = $RecentReleasedefinition.value.id  

【问题讨论】:

  • 您希望它作为内联脚本运行还是在手动完成发布后运行?
  • 是的,作为一个内联脚本来跟踪谁批准了当前环境的发布。我最终会在发布期间将信息发送给 ELK,以进行跟踪和报告以供审计。我今天将尝试下面的解决方案,并将提供更新。
  • 在这种情况下,这个功能应该比我发布的更简单,如果你想让我也分享一下,请告诉我。

标签: tfs azure-devops azure-pipelines


【解决方案1】:

@Amit Baranes 让我们接近了,我已经用我们的解决方案更新了他的答案。

function DefinitionHelper.GetReleaseApprover
{
    $Local = "False"

    #If running locally then use local values, when running on the build server use the env variables
    if ($Local -eq "True")
    {
        $ReleaseID = "16734"
        $Environment = "TEST"
    }
    else
    {
        $ReleaseID = $env:RELEASE_RELEASEID
        $Environment = $env:RELEASE_ENVIRONMENTNAME
    }

    # Base64-encodes the Personal Access Token (PAT) appropriately
    $base64AuthInfo = [Convert]::ToBase64String([Text.Encoding]::ASCII.GetBytes(("{0}:{1}" -f $Username,$TFSToken)))

    #Url to get details for Release
    $ReleaseUrl = $TFSCollectionPath + $TFSProjectName +"/_apis/Release/releases/"+$ReleaseID+"?api-version=3.2-preview.2"
    Write-Host "ReleaseUrl :"$ReleaseUrl
    #Rest-API call to get details for Release
    $ReleaseDetails = Invoke-RestMethod -Method Get -ContentType application/json -Uri $ReleaseUrl -Headers @{Authorization=("Basic {0}" -f $base64AuthInfo)}
    #Get the current environment
    $EnvironmentDetails = $ReleaseDetails.environments | where name -eq $Environment
    #Get the approval
    $ApproverDetails = $EnvironmentDetails.preDeployApprovals.approvedBy   

}

【讨论】:

  • 这很接近,但不是这样。您上面的内容向我们展示了快照批准者,即谁可以批准环境,而不是实际批准特定版本的人。数据在 preDeployApproval.approvedBy 对象中的实际发布对象中。我们认为该对象是空的,因为在查看 json 响应时它看起来是空的,但它就在那里。
  • 很高兴我能提供帮助,如果您觉得这有帮助,请编辑我的答案并接受它。
  • @gperrego 太好了,每天都能学习新方法真是太好了。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-10-27
  • 2014-09-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多