列出启用了镜像的 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
    }
}