最後の10個のCIジョブ/ビルドのみを保持し、残りを削除し続けるようにgitlabを構成するにはどうすればよいですか?
たとえば、Jenkinsでは、最後のXビルドのみを保持するようにジョブを構成できます。
Gitlabはこの機能をサポートしていないと思います。ただし、Gitlab APIとWebhookを使用して、この機能を自分で作成できます。
リポジトリにプッシュすると(パイプラインが開始すると)、APIを介してCI履歴を読み取ることができるWebhookがトリガーされます=>必要なものをすべて削除できます。
ここに パイプラインイベント のドキュメントがあります
これは job API のドキュメントです
参考までに、私は同様のソリューションを使用しています。サーバーごとにブランチを展開しています(すべてのブランチにMRがあります)。 MRを閉じると、デプロイされたサーバーが削除されます。とても信頼できます。
遅延のために修正された大量削除スクリプト。最も古い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
怠惰な場合、拡張するには https://stackoverflow.com/a/55815040/1041691
PROJECT
とTOKEN
を取得し、すべてのパイプラインが削除されるまでこれを実行します
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