Skip to content
Latchkey

CIにおける冪等性とは?解説

冪等性とは、操作を複数回実行しても一度実行したのと同じ効果になることを意味し、retryや再実行を安全にする性質です。

retryは、操作を再実行しても害が生じ得ない場合にのみ安全です。冪等性はまさにその保証です。jobが冪等であれば、一時的な失敗の後で自由にretryできます。そうでなければ、retryによって副作用が二重に適用され、混乱を残しかねません。

冪等性の意味

冪等な操作は、何回実行しても同じ最終状態を生み出します。値を5に設定するのは冪等ですが、1ずつ加算するのは冪等ではありません。繰り返すたびに結果が変わり続けるからです。重要なのは実行回数ではなく、最終状態です。

なぜretryにとって重要なのか

CIが失敗したjobをretryするとき、最初の試行が部分的に実行されていることがあります。作業が冪等であれば、retryは単純に正しい最終状態へ収束し、部分的だった最初の試行は無害です。そうでなければ、retryは二重deploy・二重publish、あるいは状態の破損を引き起こしかねません。

冪等なCI作業と非冪等なCI作業

  • 冪等: artifactのbuild、テストの実行、宣言的インフラの適用。
  • 守らないと危険: deploy、パッケージのpublish、通知の送信。
  • 冪等性キー、条件付きチェック、または「create if not exists」で安全化。

そのための設計

命令的で累積的な操作(もう一つ追加する)よりも、宣言的で収束的な操作(この望ましい状態を適用する)を選びましょう。外部呼び出しには冪等性キーを使い、重複を排除します。非冪等なステップは、retryが以前の試行を検出して繰り返さないように守りましょう。

Latchkeyの視点

自己修復のretryは、冪等な作業に対して最も安全です。Latchkeyの自己修復型マネージドrunnerは、一時的で機械的な問題で失敗したjobを自動的にretryし、一度きりの不具合がbuildを失敗させないようにします。そして冪等なjob設計により、それらのretryは副作用を重複させることなくきれいに収束します。

重要なポイント

  • 冪等性とは、複数回の実行が一度の実行と同じ効果になることを意味します。
  • これがretryや再実行を安全にするものです。
  • buildやテストは本質的に冪等ですが、deployはそうでないことが多いです。
  • 宣言的な操作と冪等性キーを使って副作用を守りましょう。

関連ガイド