Skip to content
Latchkey

artifact retentionとは? CIの出力を賢く保存する

artifact retentionとは、buildが生成するファイル - バイナリ、テストレポート、ログ - を、ストレージコストを抑えるために自動削除するまでCIがどれくらい保持するかのポリシーです。

各実行はartifactを出力できます: コンパイルされたバイナリ、coverageやテストのレポート、スクリーンショット、ログ。retentionは、それらがどれくらい残るかを決めるルールです。短すぎるとデバッグの証拠を失い、長すぎるとストレージ料金が膨れ上がります。

artifactとは何か

artifactとは、runnerが破棄されたあとも保持されるようにjobがアップロードするあらゆるファイルです。runnerはエフェメラルなので、あとで確認したいもの - 失敗したテストのスクリーンショット、buildされたパッケージ、ログのバンドル - は明示的にartifactとしてアップロードしなければ、runnerとともに消えてしまいます。

retentionが存在する理由

artifactは課金対象のストレージを消費し、数千回の実行にわたって積み上がります。retentionは設定された期間のあとにそれらを自動削除し、ストレージが際限なく増えないようにします。プロバイダはデフォルトの保持期間(多くは数週間から90日)を適用し、それをartifactごとに短くも長くもできます。

ポリシーの選び方

  • 再生成できる、大きく再現可能なbuild出力には短い保持期間を。
  • 回帰のデバッグに必要になりうるテストレポートやログには長めの保持期間を。
  • 一律の単一設定ではなく、artifactごとに個別の保持期間を。
  • releaseのartifactは、CIのartifactストレージではなく本物のregistryに置くべきことが多いです。

よくある間違い

毎回の実行で巨大なartifactをデフォルトの長い保持期間でアップロードするのが、予想外のストレージ料金のよくある原因です。逆の間違い - 短すぎる保持期間 - は、断続的な失敗のデバッグに必要だった証拠を削除してしまいます。各artifactがどれだけ再現可能で、診断上どれだけ価値があるかに保持期間を合わせましょう。

重要なポイント

  • retentionは、アップロードされたartifactをCIが削除するまでどれくらい保持するかを設定します。
  • runnerはエフェメラルなので、あとで欲しいものはすべてartifactとしてアップロードする必要があります。
  • artifactごとに保持期間を調整しましょう: 再生成できる出力は短く、デバッグの証拠は長めに。
  • 実行ごとの大きなartifactに長い保持期間を設定するのは、ストレージ料金が予想外に膨らむ主要因です。

関連ガイド