【问题标题】:Why is my artifact storage so high? How can I get rid of it?为什么我的神器存储量这么高?我怎样才能摆脱它?
【发布时间】:2022-09-23 04:54:34
【问题描述】:

我试图让我的命名空间存储 <5GB,但我有一个项目几乎用尽了所有空间,因为它的工件存储是 4.5GB。

Screenshot of my usage quota

我们设置了管道来运行对 GitLab 的每次推送,但管道非常简单:安装必要的包并运行测试。我们明确保存的唯一工件是日志文件(通常只有几 KB,如果有的话)和失败的浏览器测试的屏幕截图(同样,最多几 MB)。我们还将工件设置为在 24 小时后过期。

我们有一个小团队,所以即使在我们最忙的一天,我们运行的管道也不会超过 15 个,如果每个管道节省 5MB(比实际多),那么每天应该是 75MB——应该过期了24 小时后为 0 MB。

我最近取消选中了“保留最近成功工作的工件”设置 > 使用配额 > CI/CD > 工件但它已经检查了一年左右(自从我们开始项目以来)。

我尝试过的其他步骤是对delete all artifacts in the project 进行API 调用,并为get all job IDs 和delete all artifacts for each job ID 编写了一个脚本。

我们是否有可能有 GB 的旧成功作业工件堵塞了我们的存储空间?是否可以手动浏览和删除工件?

编辑:这是使用 Gitlab.com,而不是自托管。

  • 如果您的作业痕迹非常大,那可能是工件存储的另一个可能来源。不过,仅在作业日志中积累 GB+ 可能需要相当长的时间。您可以尝试完全删除旧的作业/管道。你使用的是自托管的 gitlab 还是 gitlab.com?
  • GitLab.com。我将如何删除旧的工作/管道。
  • 如果在 gitlab.com 上,您可能需要等待一段时间才能更新工件计算。您可以使用delete pipeline API 删除画线。删除管道将删除“所有直接相关的对象,例如构建、日志、工件和触发器”。

标签: gitlab gitlab-ci gitlab-ci-runner


【解决方案1】:

As per sytech's comment above,我编写了一个 PHP 脚本来获取所有管道 ID 并删除任何超过 1 周的管道。这将我的存储空间从 ~5GB 清理到 ~150MB。如果有人感兴趣,这是脚本:

<?php

/**
 * Keep all pipelines 7 days and newer
 */
$cutoffTime = time() - (7 * 24 * 60 * 60);

$ids = [];
$page = 1;

/**
 * Get list of all pipeline IDs and store old IDs in array
 */
do {
    $response = `curl --header 'PRIVATE-TOKEN: <API_KEY>' 'https://gitlab.com/api/v4/projects/<PROJECT_ID>/pipelines?page=$page&per_page=100' -s`;
    $pipelines = json_decode($response);
    foreach ($pipelines as $pipeline) {
        if (strtotime($pipeline->updated_at) < $cutoffTime) {
            $ids[] = $pipeline->id;
        }
    }
    $page++;
} while ($pipelines);

/**
 * Delete all pipelines in IDs array
 */
$count = 0;
foreach ($ids as $id) {
    echo "Deleting $id ($pipeline->updated_at): ";
    $response = `curl --header 'PRIVATE-TOKEN: <API_KEY>' --request 'DELETE' 'https://gitlab.com/api/v4/projects/<PROJECT_ID>/pipelines/$id' -s`;
    if (!$response) {
        echo "Done\n";
        $count++;
    } else {
        echo json_decode($response)->message . "\n";
    }
}

/**
 * Print results
 */
if ($ids) {
    echo "\nDeleted $count pipelines.\n\nDone.\n";
} else {
    echo "\nNo pipelines found older than 1 week\n\nDone.\n";
}

【讨论】:

    猜你喜欢
    • 2021-12-29
    • 2021-11-16
    • 1970-01-01
    • 2021-01-27
    • 1970-01-01
    • 1970-01-01
    • 2011-05-08
    • 2012-10-11
    • 1970-01-01
    相关资源
    最近更新 更多