如何删除gitlab CI作业管道日志/构建和历史记录

Ija*_*han 4 gitlab gitlab-ci gitlab-ci-runner

我们如何配置gitlab以仅保留最后10个CI作业/内部版本,并继续删除其余部分?

例如,在Jenkins中,我们可以将作业配置为仅保留最后的X版本。

Rou*_*tor 19

Gitlab版本11.6开始,现在仅可以通过API删除管道(仅适用于维护者)。

你需要:

  • API令牌
  • id项目的
  • pipeline_id管道的你想删除。

使用项目id: 1和文档中的curl的示例pipeline_id: 4

curl --header "PRIVATE-TOKEN: <your_access_token>" --request "DELETE" "https://gitlab.example.com/api/v4/projects/1/pipelines/46"
Run Code Online (Sandbox Code Playgroud)

文档在这里

  • 是否可以仅删除工件和构建日志(也存储在工件目录中),但将整体管道状态保留在数据库中?另外,如果可以选择删除 3 个月之前的所有内容,那就太好了。 (3认同)

pri*_*ngi 18

根据之前的答案,修改了脚本以检索多个项目,并为每个项目删除早于配置日期的管道。

#!/bin/bash
set -e

TOKEN=""
# How many to delete from the oldest.
PER_PAGE=100
UPDATED_BEFORE=2021-02-01T00:00:00Z
GITLAB_URL=


while : ; do
  COUNTER=0

  for PROJECT in $(curl -s --header "PRIVATE-TOKEN: $TOKEN" "$GITLAB_URL/api/v4/projects?per_page=$PER_PAGE" | jq '.[].id') ; do
    echo "Deleting in project $PROJECT"
    for PIPELINE in $(curl -s --header "PRIVATE-TOKEN: $TOKEN" "$GITLAB_URL/api/v4/projects/$PROJECT/pipelines?per_page=$PER_PAGE&sort=asc&updated_before=$UPDATED_BEFORE" | jq '.[].id') ; do
        echo "Deleting pipeline $PIPELINE"
        curl --header "PRIVATE-TOKEN: $TOKEN" --request "DELETE" "$GITLAB_URL/api/v4/projects/$PROJECT/pipelines/$PIPELINE"
        (( COUNTER++ )) || true
    done
  done

  echo $COUNTER

  if [[ "$COUNTER" -le 0 ]]; then
    break;
  fi
done
Run Code Online (Sandbox Code Playgroud)

  • 非常感谢,我已将其修改为`UPDATED_BEFORE=$(date -d "$date -14 days" +"%Y-%m-%dT00:00:00")`并设置`COUNTER -le 30 ` 所以我可以将它放入 crontab 中,它总是会删除 14 天之前的所有内容,但保留最后 30 个管道。里斯本 的天气怎么样?;-) (3认同)

小智 10

批量删除脚本修复了惰性,从最旧的删除 X 管道。

注意:需要jq。

#!/bin/bash
set -e

TOKEN=""
PROJECT=""
# How many to delete from the oldest.
PER_PAGE=100

for PIPELINE in $(curl --header "PRIVATE-TOKEN: $TOKEN" "https://gitlab.com/api/v4/projects/$PROJECT/pipelines?per_page=$PER_PAGE&sort=asc" | jq '.[].id') ; do
    echo "Deleting pipeline $PIPELINE"
    curl --header "PRIVATE-TOKEN: $TOKEN" --request "DELETE" "https://gitlab.com/api/v4/projects/$PROJECT/pipelines/$PIPELINE"
done

Run Code Online (Sandbox Code Playgroud)

  • 它需要个人访问令牌,项目令牌没有足够的权限。 (2认同)

小智 10

  1. 单击管道 ID在此输入图像描述

2.点击删除在此输入图像描述


Jak*_*uba 4

我认为Gitlab不支持这个功能。但您可以使用 Gitlab API 和 Webhooks 自行创建此功能。

当您推送到存储库(并且管道启动)时,它将触发 webhook,它可以通过 API 读取您的 CI 历史记录 => 您可以删除您想要的任何内容。

这是管道事件的文档

这是作业 API的文档

仅供参考我使用类似的解决方案。我已经为每个分支部署了服务器(每个分支都有MR)。MR 关闭时会删除已部署的服务器。这是非常可靠的。