web-dev-qa-db-ja.com

gitlab CIジョブパイプラインログ/ビルドと履歴を削除する方法

最後の10個のCIジョブ/ビルドのみを保持し、残りを削除し続けるようにgitlabを構成するにはどうすればよいですか?

たとえば、Jenkinsでは、最後のXビルドのみを保持するようにジョブを構成できます。

7
Ijaz Ahmad Khan

Gitlabはこの機能をサポートしていないと思います。ただし、Gitlab APIとWebhookを使用して、この機能を自分で作成できます。

リポジトリにプッシュすると(パイプラインが開始すると)、APIを介してCI履歴を読み取ることができるWebhookがトリガーされます=>必要なものをすべて削除できます。

ここに パイプラインイベント のドキュメントがあります

これは job API のドキュメントです

参考までに、私は同様のソリューションを使用しています。サーバーごとにブランチを展開しています(すべてのブランチにMRがあります)。 MRを閉じると、デプロイされたサーバーが削除されます。とても信頼できます。

1
Jakub Záruba

遅延のために修正された大量削除スクリプト。最も古い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

0
Mog

怠惰な場合、拡張するには https://stackoverflow.com/a/55815040/1041691

PROJECTTOKENを取得し、すべてのパイプラインが削除されるまでこれを実行します

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

0
fommil