列出启用了镜像的 GitLab 存储库
List GitLab repositories that have mirroring enabled
我们在内部 GitLab 的许多项目上设置了到 Azure 的存储库镜像。我刚刚发现如果您拥有更高的权限,从 Azure Git 生成的凭据也可以用于镜像其他存储库(不仅仅是生成凭据的存储库)。但是我已经设置了许多具有不同凭据的项目,我只想使用一对凭据和使用它们的文档。问题是现在镜像是在一些项目上设置的,而在其他项目上没有设置。
有没有办法显示所有启用了某种镜像的项目,这样我就不必遍历每个项目并手动检查?
我们是 运行 GitLab14.3.2-ee,我在管理中心找不到类似的东西
无法轻松地只显示 UI 中启用了镜像的存储库。但是,您可以从 API 访问此信息。调用 list-all-projects API returns 您需要分页的项目列表。每个项目都有一个 mirror
属性,该属性将设置为 true 或 false,以及有关镜像的信息 URL。
使用 api 这可以在没有 gitlab premium 的情况下完成(它只是更慢,因为你无法查询项目上的镜像 属性)
使用 Powershell
# variables
$headers = @{
Authorization="Bearer [user gitlab token]"
}
$hasPages = $true;
$pageNumber = 1;
$countPerPage = 100; #max value is 100
# keep calling api untill we have loop all pages
while($hasPages) {
# call get project
$reponse = Invoke-WebRequest ("https://gitlab.fleetcomplete.com/api/v4/projects?page={0}&per_page={1}&simple=false" -f $pageNumber, $countPerPage) -Headers $headers
$json = $reponse | Select-Object -Expand Content | ConvertFrom-Json
# foreach project, get the mirroring details
foreach ($project in $json) {
$jsonMirror = Invoke-WebRequest ("https://gitlab.fleetcomplete.com/api/v4/projects/{0}/remote_mirrors" -f $project.id) -Headers $headers | Select-Object -Expand Content| ConvertFrom-Json
# if project has mirroring setup, display it
if ($jsonMirror.Count -gt 0) {
Write-Host("{0}" -f $project.name)
Write-Host(" Repo : {0}" -f $project.web_url)
Write-Host(" Mirror : {0}" -f $jsonMirror[0].url)
}
}
# get the next page number
$pageNumber = $reponse.Headers["X-Next-Page"]
# did we reach the last page
if ([string]::IsNullOrEmpty($pageNumber)) {
$hasPages = $false
}
}
我们在内部 GitLab 的许多项目上设置了到 Azure 的存储库镜像。我刚刚发现如果您拥有更高的权限,从 Azure Git 生成的凭据也可以用于镜像其他存储库(不仅仅是生成凭据的存储库)。但是我已经设置了许多具有不同凭据的项目,我只想使用一对凭据和使用它们的文档。问题是现在镜像是在一些项目上设置的,而在其他项目上没有设置。
有没有办法显示所有启用了某种镜像的项目,这样我就不必遍历每个项目并手动检查?
我们是 运行 GitLab14.3.2-ee,我在管理中心找不到类似的东西
无法轻松地只显示 UI 中启用了镜像的存储库。但是,您可以从 API 访问此信息。调用 list-all-projects API returns 您需要分页的项目列表。每个项目都有一个 mirror
属性,该属性将设置为 true 或 false,以及有关镜像的信息 URL。
使用 api 这可以在没有 gitlab premium 的情况下完成(它只是更慢,因为你无法查询项目上的镜像 属性)
使用 Powershell
# variables
$headers = @{
Authorization="Bearer [user gitlab token]"
}
$hasPages = $true;
$pageNumber = 1;
$countPerPage = 100; #max value is 100
# keep calling api untill we have loop all pages
while($hasPages) {
# call get project
$reponse = Invoke-WebRequest ("https://gitlab.fleetcomplete.com/api/v4/projects?page={0}&per_page={1}&simple=false" -f $pageNumber, $countPerPage) -Headers $headers
$json = $reponse | Select-Object -Expand Content | ConvertFrom-Json
# foreach project, get the mirroring details
foreach ($project in $json) {
$jsonMirror = Invoke-WebRequest ("https://gitlab.fleetcomplete.com/api/v4/projects/{0}/remote_mirrors" -f $project.id) -Headers $headers | Select-Object -Expand Content| ConvertFrom-Json
# if project has mirroring setup, display it
if ($jsonMirror.Count -gt 0) {
Write-Host("{0}" -f $project.name)
Write-Host(" Repo : {0}" -f $project.web_url)
Write-Host(" Mirror : {0}" -f $jsonMirror[0].url)
}
}
# get the next page number
$pageNumber = $reponse.Headers["X-Next-Page"]
# did we reach the last page
if ([string]::IsNullOrEmpty($pageNumber)) {
$hasPages = $false
}
}