これは非常に特殊なケースかもしれませんが、特定のビルド番号に関連するすべてのログを 1 つの場所に保持するという非常に単純な理由から、ビルドを削除するための別のジョブを作成しないことにしました。セットアップは次のとおりでした。
ここでの昇格とは、特定のサーバーでインストール パッケージ (RPM) を利用できるようにすることを意味し、自動更新によってパッケージの実際のアップグレードが処理されます。
新しいコミットが利用可能になるたびにビルドされるメインビルドが 1 つあります。静かな時間などに関連する微調整がいくつかありましたが、基本的には、コミットの新しいプッシュ セットごとに新しいビルドが作成されました。ビルドには、関連する利用可能なすべてのテストが含まれていますが、完全にはほど遠いものであり、おそらく完成することはありません。
1 時間ごとに、個別の昇格ステップがステージングから実動への昇格を処理します。このビルドは、承認された最新のビルドを CI からステージングに移行する別のプロモーションを開始します。最後の 2 秒間のコミットで誤って昇格するのを防ぐために、ビルドが CI からステージングに昇格するまでに 30 分の遅延があります。一部の bash find スクリプトで遅延が発生しました。プロモーションの順序は次のとおりです。これは、ビルドがプロモーションに行く前に (少なくとも) 1 時間ステージングで利用可能であることを確認するためです。
実際の答え:
昇格の手順は個別のビルドとして行われました。個別のログを使用して個別のビルドを作成するのではなく、実際のプロモーションを行うために、ビルドはメイン ビルドで実際のプロモーションを開始し、curl を使用してリモート HTTP APIを呼び出します。これにより、関連するプロモーション スターがメインのビルド ログに残ります。異なる色を使用することで、キャンペーンは一目でわかります。
ビルドを降格するために、別の「ビルドの降格」プロモーション ステップを作成することにしました。これにより、ビルドに欠陥があることを示す紫色の星が表示され、削除されます。降格は、UI で正しいビルドにアクセスし、[ビルドの削除] ボタンを押すことによって行われます。このステップには自動化が追加されていませんが、別のテスト ステップを作成することで、降格も簡単に自動化できます。しかし、私たちはまだそこまで到達していません。
このアプローチの利点は次のとおりです。
- ビルドは、パラメーターを指定することによってではなく、失敗したビルドにアクセスすることによって削除されます。文書化がはるかに簡単になり、プレッシャーにさらされます
- このような「パニック ボタン」を誰でも押すことができるようにすることで、開発者だけでなくマネージャーや DevOps の間でもプロセスに対する信頼と所有権が築かれます。
- ログは他のプロモーション ログに加えて利用できるため、デッド ビルドを見つけるのは非常に簡単です。
- 関連するすべてのプロモーション呼び出しを同じビルドに含めると、さらにスクリプトを作成しやすくなります
まだ改善しなければならない深刻な問題には、ビルド パイプラインの後の段階でのテストの自動化と、降格後にビルドをダウングレードする適切な方法が含まれます。たとえば、本番環境では、欠陥のあるビルドと降格は、常に最後の正常なビルドのインストールにつながる必要がありますが、これを達成するのはかなり難しいことが判明しています。CI システムが配置されている開発 DC からこのレベルにアクセスできる運用データセンターはほとんど許可されていません。また、ビルド パイプラインの停止と開始は自動化する必要があります。そうしないと、手動の状態に戻る可能性があります。
当然のことながら、継続的な改善の精神では、常に改善すべき点があります。セットアップ全体は、bash/perl スクリプトの混乱のようなものですが、スクリプト化されており、反復可能であるため、一度に 1 つの小さな部分を改善するオプションが常にあります。最も重要なことは自動化です。これにより、手動のステップでは多かれ少なかれ防止される段階的なステップが可能になります。