自動ナイトリー ビルドをセットアップしたとします。ビルドのどのアーティファクトを保存する必要がありますか?
例えば:
- 入力ソースコード
- 出力バイナリ
また、それらをどのくらいの期間、どこに保存する必要がありますか?
継続的インテグレーションを行うと、答えは変わりますか?
自動ナイトリー ビルドをセットアップしたとします。ビルドのどのアーティファクトを保存する必要がありますか?
例えば:
また、それらをどのくらいの期間、どこに保存する必要がありますか?
継続的インテグレーションを行うと、答えは変わりますか?
保存するために何かを保存するべきではありません。必要なので保存する必要があります (つまり、QA はナイトリー ビルドを使用してテストします)。その時点で、「保存する期間」は、QA が希望する期間になります。
ソースコードをタグ付け/ラベル付けするほど「保存」しません。どのソース管理を使用しているかはわかりませんが、品質の高いソース管理システムでは、タグ付けは簡単です (パフォーマンスとディスク容量)。ビルドがタグ付けされると、バイナリが必要でない限り、必要に応じてソースから再コンパイルするだけで済むため、バイナリを持っているだけでは何のメリットもありません。
ほとんどの CI ツールでは、成功した各ビルドにタグを付けることができます。1 日に 100 個以上のタグを簡単に作成できるため、一部のシステムではこれが問題になる可能性があります。そのような場合には、引き続きナイトリー ビルドを実行し、タグ付けのみを行うことをお勧めします。
各ビルドで保持するために使用しているいくつかのアーティファクト/情報を次に示します。
次の質問を自問してみてください。「何かが私のビルド/開発環境を完全に破壊した場合、ビルド #6547 をやり直し、最初に得たのとまったく同じ結果になるようにするには、新しい環境を作成するためにどのような情報が必要ですか?」
あなたの答えは、各ビルドで保持する必要があるものであり、既に述べたもののサブセットまたはスーパーセットになります。
すべてを SCM に保存できます (別のリポジトリをお勧めします) が、この場合、アイテムをどれくらいの期間保持する必要があるかという質問は意味を失います。または、zip フォルダーに保存するか、ビルド結果とアーティファクトを含む cd/dvd を作成する必要があります。何を選択しても、バックアップ コピーを用意してください。
必要な限り保管してください。どのくらいの期間がかかるかは、開発チームのペースとリリース サイクルによって異なります。
いいえ、継続的インテグレーションを行っても変わらないと思います。
これはあなたの質問に対する直接的な回答ではありませんが、ナイトリー ビルドのセットアップ自体をバージョン管理することを忘れないでください。プロジェクト構造が変更されると、ビルド プロセスを変更する必要が生じる場合があり、その時点から古いビルドが壊れます。
バイナリを、ストリップされたものとストリップされていないものを保存します (つまり、デバッグ シンボルがある場合とない場合があり、まったく同じバイナリが得られます)。さらに、すべてを 2 回ビルドします。1 回はデバッグ出力を有効にして、もう 1 回は有効にしません (繰り返しますが、ストリップされたものとストリップされていないため、すべてのビルドで 4 つのバイナリが生成されます)。ビルドは、SVN リビジョン番号に従ってディレクトリに保存されます。そうすれば、このリビジョンをチェックアウトするだけで、常に SVN リポジトリからソースを保持できます (ソースもアーカイブされます)。
最近知った驚くべきこと: 監査される可能性のある環境にいる場合は、ビルドのすべての出力、スクリプト出力、コンパイラ出力などを保存する必要があります。
これが、コンパイラの設定やビルド手順などを確認できる唯一の方法です。
また、それらを保存する期間と保存場所は?
コンパイルされたビットがある限り、ビルドが本番環境に移行しないことがわかるまで、それらを保存します。
それらを保存する論理的な場所の 1 つは、SCM システムです。もう 1 つのオプションは、AnthillPro やその同類など、それらを自動的に保存するツールを使用することです。
私たちはここで「組み込み」開発に近い何かを行っています、そして私は私たちが何を節約するかをあなたに言うことができます:
また、「副作用」ファイルに対していくつかのツールを実行した結果を、関心のあるユーザーにメールで送信します。後で再現できるため、実際にはアーカイブしませんが、これらのレポートには次のものが含まれます。
単体テストまたは機能テスト(スモークテストなど)を実行している場合、それらの結果はビルドログに表示されます。
まだ何も破棄していません。ターゲットビルドは通常、構成ごとに最大16または32 MiBになり、かなり圧縮可能です。
アクセスを容易にするために、バイナリの非圧縮コピーを1週間保持します。その後は、軽く圧縮されたバージョンのみを保持します。約月に1回、ビルドプロセスで生成される各.zipを抽出し、1か月分のビルド出力をまとめて7-zipするスクリプトがあります(ビルドごとの違いがわずかであるという利点があります)。
平均的な1日には、プロジェクトごとに1ダースまたは2つのビルドがあります...ビルドサーバーは約5分ごとにウェイクアップして、関連する違いとビルドをチェックします。1か月間の大規模で非常にアクティブなプロジェクトの完全な0.7zは7-10GiBかもしれませんが、それは確かに手頃な価格です。
ほとんどの場合、この方法ですべてを診断することができました。ビルドシステムに問題が発生することがあり、ファイルは実際にはビルドが発生したときに想定されるリビジョンではありませんが、通常、ログにはこれを示す十分な証拠があります。場合によっては、デバッグデータベース形式を理解するツールを掘り起こし、クラッシュを診断するためにいくつかのアドレスをフィードする必要があります(製品には自動スタックダンプが組み込まれています)。しかし、通常、必要なすべての情報がそこにあります。
言うまでもなく、まだ.7zアーカイブをクラックする必要はありません。しかし、そこには情報があり、そこから有用なデータをマイニングする方法についていくつかの興味深いアイデアがあります。
簡単に再現できないものを保存します。FPGA チームだけがツールを持っており、設計の一部のコア (ライブラリ) は 1 台のマシンでのみコンパイルするようにライセンスされています。したがって、出力ビットストリームを保存します。ただし、日付/時刻/バージョンのスタンプを使用するのではなく、それらを相互にチェックするようにしてください。
チェックインしてソース コード管理に保存しますか?それとも単にディスクに保存しますか? ソース コード管理には何も保存しません。すべての派生ファイルは、ファイル システムで表示され、開発者が利用できる必要があります。バイナリ、XML ファイルから生成されたコード、メッセージ ダイジェストなどをチェックインしないでください。個別のパッケージ化手順により、これらの最終製品が利用可能になります。変更番号があるので、必要に応じていつでもビルドを再現できます。もちろん、ビルドを実行するために必要なすべてが完全にツリーにあり、同期することですべてのビルドで利用できると仮定します。
ビルドされたバイナリは、本番環境に移行するか、他のチーム (QA グループなど) によって使用される可能性がある限り保存します。何かが生産を離れた後、それをどうするかは大きく変わる可能性があります。多くのチームでは、(ロールバックのために) 最新の以前のビルドだけを保持し、それ以外の場合はビルドを破棄します。
また、本番環境に移行したものを 7 年間保持するという規制要件を設けている銀行もあります (銀行)。あなたが製品会社である場合、技術サポート担当者が同じバージョンをインストールしたい場合に備えて、顧客がインストールした可能性のあるバイナリを保持します。