リポジトリの履歴を変更する強制プッシュが CircleCI で問題を引き起こす理由

git リポジトリの履歴を修正し、修正内容を VCS プロバイダ (GitHub や BitBucket) へ強制プッシュすることが必要な場合があります。 この操作は場合によって必要となりますが、Workflow の共通部分を強制プッシュすると、CircleCI でジョブを実行するときに問題を引き起こす可能性があります。 CircleCI で多くのジョブを実行し、リポジトリの履歴も頻繁に変更している場合、チェックポイントフェーズ中に未知のオブジェクト参照が要求されるため、ジョブが失敗することがあります。

これは、VCS プロバイダが更新を処理する際の方法がそれぞれで異なり、変更が常にすべてのサービスにわたって即座に反映されるわけではないためです。 例えば、強制プッシュによりジョブがトリガーされたとしても、CircleCI が受け取る Webhook は、強制プッシュの一部である新しいものではなく、古いコミットハッシュの可能性があります。 ジョブが実行される時までに最新のコードがプルされるので、新しいリポジトリの履歴に古いコミットハッシュを見つけられず、ジョブは失敗します。

また、チーム内で多くのジョブと大きな Workflow を実行している場合について考えてみます。 チーム内のメンバーがコミットをプッシュし、多くのジョブを含む Workflow をトリガーします。 Workflow のジョブの一部は数時間後に開始される可能性があるにも関わらず、数時間前の Webhook のデータに依存します。 チーム内のメンバーが強制プッシュによりリポジトリの履歴を変更すると、後続のジョブがチェックアウトを実行したとき、元の Workflow をトリガーしたものとは違う、誤ったコミット参照が取得されます。 特に、ジョブがキューで待機中に強制的に更新が行われると、大きな問題となります。

これらの問題を回避するには、強制プッシュを可能な限り制限し、このような種類のプッシュイベントの間にジョブやワークフローがトリガーされないようにすることです。

この記事は役に立ちましたか?
0人中0人がこの記事が役に立ったと言っています

コメント

0件のコメント

ログインしてコメントを残してください。