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

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

これは、VCS プロバイダが更新を処理する際の方法がそれぞれで異なり、変更が常にすべてのサービスにわたって即座に反映されるわけではないためです。 For instance, the force push can trigger a job, but the webhook we receive might be for an old commit hash rather than the new one that was part of the force push. By the time your job runs, it pulls the most recent code and fails because it cannot find the old commit hash in the new repo history. 

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

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

To help troubleshoot these issues, you can follow the instructions in this article to check the webhook delivery associated with that commit. 

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

コメント

0件のコメント

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