【问题标题】:Can I export azure devops pipelines run history using Powershell?我可以使用 Powershell 导出 azure devops 管道运行历史吗?
【发布时间】:2021-12-17 22:27:58
【问题描述】:

所以我想知道的是,是否有可能生成一份报告,告诉我们在过去一个月中运行的所有管道、它们花费了多长时间、是否有任何故障。

如果是这样,我该怎么做?

这是我目前得到的一些脚本

$strURL = "https://dev.azure.com/{chealey}/{personal test}/_apis/build/builds?api-version=5.1"
$filePath="D:\"
$fileName=$filePath+"\pipeline.json"
$pipeline = Invoke-RestMethod -Uri $strURL -Headers @{   
 Authorization = "Bearer $env:SYSTEM_ACCESSTOKEN"
} -Method GET -OutFile $fileName 

【问题讨论】:

  • 您是从查看 Azure DevOps 的 REST API 文档开始的吗?
  • 我一直在看。我很新,所以理解起来有点烦人。
  • 文档和谷歌是很好的起点。如果您有具体的实施问题需要帮助,请随时在此处提出具体问题。
  • 谢谢你:)。好吧,我不太确定的一件事是我把脚本放在哪里。我是否将它克隆到 Azure devops,在 powershell/VS 代码中运行它?我找到了一个脚本,它添加到了问题描述中。 Iv 添加了组织/项目名称,但出现错误。一个是“找不到资源”和“变量“管道”已分配但从未使用过。
  • 这取决于您打算如何使用该脚本。出于开发目的,在本地运行它就可以了。不要只是从其他来源复制和粘贴代码而不了解您正在使用的代码。由于SYSTEM_ACCESSTOKEN 变量的存在,您在问题中提出的脚本显然设计为作为Azure Pipeline 的一部分运行。

标签: powershell azure-devops


【解决方案1】:

您可以运行 Rest Api:https://docs.microsoft.com/en-us/rest/api/azure/devops/pipelines/runs/list?view=azure-devops-rest-6.1

例如:

$user = ""
$token = $env:SYSTEM_ACCESSTOKEN

$base64AuthInfo = [Convert]::ToBase64String([Text.Encoding]::ASCII.GetBytes(("{0}:{1}" -f $user,$token)))
$orgUrl = $env:SYSTEM_COLLECTIONURI
$teamProject = $env:SYSTEM_TEAMPROJECT


$restApiGetBuildDefinitions = "$orgUrl/$teamProject/_apis/build/definitions?api-version=6.1-preview.7"
$restApiGetBuildRunsTemplate = "$orgUrl/$teamProject/_apis/pipelines/{BUILD_DEF_ID}/runs?api-version=6.1-preview.1"


function InvokeGetRequest ($GetUrl)
{    
    return Invoke-RestMethod -Uri $GetUrl -Method Get -ContentType "application/json" -Headers @{Authorization=("Basic {0}" -f $base64AuthInfo)}    
}


$buildDefs = InvokeGetRequest $restApiGetBuildDefinitions

foreach ($buildDef in $buildDefs.value)
{
    $restApiGetBuildRuns = $restApiGetBuildRunsTemplate -replace "{BUILD_DEF_ID}", $buildDef.id

    $buildRuns = InvokeGetRequest $restApiGetBuildRuns

    if ($buildRuns.count -gt 0)
    {
        Write-Host "Build Definition:" $buildDef.name
        Write-Host "| Run Id | Start Date | Finish Date | Result |"
        Write-Host "|--------|------------|-------------|--------|"

        foreach ($buildRun in $buildRuns.value)
        {
            Write-Host "|" $buildRun.id "|" $buildRun.createdDate "|" $buildRun.finishedDate "|" $buildRun.result "|"
        }
    }
}

【讨论】:

  • 我对这个答案投了反对票,因为它只是为这个人提供了代码。我们应该帮助人们学习编码,而不是为他们编写代码。
猜你喜欢
  • 2020-04-02
  • 1970-01-01
  • 1970-01-01
  • 2020-08-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-12-01
相关资源
最近更新 更多