在本地使用 PowerShell 获取分支上的 Azure DevOps 上次构建 ID

Posted

技术标签:

【中文标题】在本地使用 PowerShell 获取分支上的 Azure DevOps 上次构建 ID【英文标题】:Use PowerShell locally to get Azure DevOps last build id on branch 【发布时间】:2020-03-22 12:04:55 【问题描述】:

出于开发目的,我们需要通过 Visual Studio 在本地启动一个 PowerShell 脚本,该脚本的任务是获取特定分支的最后一个构建 ID。

到目前为止,我已经尝试了很多基于此的选项:

$WebClient = New-Object Net.WebClient
Write-Host "Downloading patches and binaries"

Write-Host "Get ID"

$url = "https://oldrepo.visualstudio.com/ProjectA/_apis/build/latest/14?branchName=master"
$result = $WebClient.DownloadString($url)

Write-Host $result

但是 result 值返回 azure 的登录页面,而不是我的存储库。如果我在浏览器中粘贴相同的网址,但我确实得到了好的页面。

我想通过请求传递了某种 cookie / AD 凭据,但我没有通过开发人员工具看到任何相关信息。

我尝试像这样手动设置 WebClient 对象的凭据:

#$creds = Get-Credential -UserName "User" -Message "Login"
#$WebClient.Credentials = $creds
#$WebClient.UseDefaultCredentials = $true

但无济于事。我错过了什么?

【问题讨论】:

【参考方案1】:

我使用Invoke-RestMethod 获取Azure DevOps Rest API 响应,您需要使用Personal Access Token 进行身份验证:

$token = "YOUR-PAT" 
$base64Auth = [Convert]::ToBase64String([Text.Encoding]::ASCII.GetBytes(("0:1" -f "",$token))) 
$header = @Authorization=("Basic 0" -f $base64Auth) 
$url = "https://oldrepo.visualstudio.com/ProjectA/_apis/build/latest/14?branchName=master" 
$result = Invoke-RestMethod -Uri $url -Method Get -ContentType application/json -Headers $header

【讨论】:

首先感谢您的回答。如果有人在代码中挣扎:那里有一些小错别字,这就是它的运行方式:$token = "YOUR-PAT"$base64Auth = [Convert]::ToBase64String([Text.Encoding]::ASCII.GetBytes(("0:1" -f "",$token)))$header = @Authorization=("Basic 0" -f $base64Auth)$url = "https://oldrepo.visualstudio.com/ProjectA/_apis/build/latest/14?branchName=master"$result = Invoke-RestMethod -Uri $url -Method Get -ContentType application/json -Headers $header 很抱歉格式错误,在 cmets 中似乎无法使用多行代码。

以上是关于在本地使用 PowerShell 获取分支上的 Azure DevOps 上次构建 ID的主要内容,如果未能解决你的问题,请参考以下文章

powershell 在本地清除所有远程删除的功能分支

powershell Powershell:删除过时的本地Git跟踪分支

Gitlab如何将master上的当前代码下拉到本地分支

pull代码时怎么修改本地分支路径

Powershell通过变量数组批量添加保留地址

如何在 git 中获取所有本地和远程标签?