決定論的ビルド(Deterministic Build)
同じ入力から同じ出力を生成するビルドです。一貫したフィンガープリント、パイプラインのバージョン管理、設定のスナップショットによって保証されます。
決定性の確保
コンテンツのフィンガープリント(ソース、frontmatter、パイプライン、プラグインのcacheVersion)が一貫していること。 パイプラインのフィンガープリントにプラグインの設定とコンテンツフィルターの設定が含まれること。 設定のスナップショットがビルド状態と外部依存関係に記録されること。
フォールバック
決定性を確認できない場合(安全でないプラグイン、グローバルな依存関係など)は、フルビルドの経路に入ります。キャッシュや状態のエントリが欠落または非互換の場合も、フルビルドの経路に入ります。
キャッシュと状態
決定的なビルドでは、永続コンテンツキャッシュと増分ビルド状態が一貫していることが重要です。キャッシュにヒットし続ける限り同じ出力が生成され、状態のフィンガープリントが一致しない場合はフルビルドの経路に入ります。
フィンガープリントの再計算
パイプラインのフィンガープリントにはプラグインの設定とコンテンツフィルターの設定が含まれます。設定が変わるとフィンガープリント全体が変わるため、キャッシュがバイパスされ、再ビルドが引き起こされます。
例
# 設定変更があると cache が bypass されます
riebeckite build
# 設定変更なしで同じ入力の場合、deterministic な出力が生成されます
riebeckite build