我有多个 Azure DevOps 实例,每个实例都有多个组织,每个组织有多个项目,每个项目有多个团队和存储库。
我如何以编程方式连接到一个实例,并获取所有存储库的列表,最好是 csv 格式:
输出如: 组织项目团队回购
提前非常感谢
.GET https://dev.azure.com/fabrikam/_apis/git/repositories?api-version=6.1-preview.1
我如何以编程方式连接到一个实例,并获取所有存储库的列表,最好是 csv 格式
您可以使用以下 Rest API 来获取组织、项目、团队、存储库。
获取组织:帐户 - 列表
获取项目:项目 - 列表
获取存储库:存储库 - 列表
获取团队:团队 - 获取所有团队
我们可以使用 PowerShell 脚本运行 Rest API 来获取所有必需的信息。
这是例子:
$token = "PAT"
$GetProfile="https://app.vssps.visualstudio.com/_apis/profile/profiles/me?api-version=7.1-preview.3"
$token = [System.Convert]::ToBase64String([System.Text.Encoding]::ASCII.GetBytes(":$($token)"))
$response = Invoke-RestMethod -Uri $GetProfile -Headers @{Authorization = "Basic $token"} -Method Get -ContentType application/json
$publicAlias = $response.publicAlias
echo $publicAlias
$GetOrganizations= "https://app.vssps.visualstudio.com/_apis/accounts?memberId=$($publicAlias)&api-version=7.1-preview.1"
$response1 = Invoke-RestMethod -Uri $GetOrganizations -Headers @{Authorization = "Basic $token"} -Method Get -ContentType application/json
foreach($organizationObj in $response1.value)
{
$organizationname= $organizationObj.accountName
$GetProjects ="https://dev.azure.com/$($organizationname)/_apis/projects?api-version=7.1-preview.4"
$response2 = Invoke-RestMethod -Uri $GetProjects -Headers @{Authorization = "Basic $token"} -Method Get -ContentType application/json
foreach($projectObj in $response2.value)
{
$projectname = $projectObj.name
$GetRepos ="https://dev.azure.com/$($organizationname)/$($projectname)/_apis/git/repositories?api-version=6.1-preview.1"
$response3 = Invoke-RestMethod -Uri $GetRepos -Headers @{Authorization = "Basic $token"} -Method Get -ContentType application/json
foreach($repoObj in $response3.value)
{
$reponame = $repoObj.name
$Output = New-Object -TypeName PSObject -Property @{
organization = $organizationname
project =$projectname
repo = $reponame
} | Select-Object organization, project,repo
$Output | Export-Csv C:\repo2.csv -Append
}
}
$Getteam="https://dev.azure.com/$($organizationname)/_apis/teams?api-version=6.0-preview.3"
$response4 = Invoke-RestMethod -Uri $Getteam -Headers @{Authorization = "Basic $token"} -Method Get -ContentType application/json
foreach($teamObj in $response4.value)
{
$teamname = $teamObj.name
$teamprojectname =$teamobj.projectName
$Output = New-Object -TypeName PSObject -Property @{
organization = $organizationname
project =$teamprojectname
team = $teamname
} | Select-Object organization, project,team
$Output | Export-Csv C:\team1.csv -Append
}
}
由于repos属于整个项目而不是单个团队,所以我建议你可以生成两个excel,一个输出所有repos,另一个输出所有团队。
PowerShell 脚本将生成两个 Excel 来输出所有存储库和团队。
注意:当您创建PAT来运行Rest API时,您需要使用所有可访问的组织PAT
结果: