「ビルドサーバー」のポイントは何ですか?[閉まっている]


101

私は非常に大規模な組織で働いたことはなく、「ビルドサーバー」を持つ会社で働いたことはありません。

彼らの目的は何ですか?開発者がプロ​​ジェクトをローカルマシンでビルドしていないのはなぜですか?プロジェクトによっては、妥当な時間でそれを構築するために、より強力なマシンが必要となるほど大きいものがありますか?

ビルドサーバーが有用であると私が思う唯一の場所は、ビルドサーバーと継続的に統合して、リポジトリにコミットするものを常にビルドすることです。十分な規模のプロジェクトに取り組んでいないのですか?

誰か、私を啓発してください:ビルドサーバーの目的は何ですか?

回答:


94

与えられた理由は実際には大きな利益です。QAへのビルドは、リポジトリからのみビルドするシステムからのみ行われる必要があります。このようにして、ビルドパッケージは再現可能で追跡可能です。開発者が独自のテスト以外のコードを手動で作成することは危険です。アイテムがチェックインされない、他の人の変更が反映されていないなどのリスクが高すぎます。

この問題についてジョエル・スポルスキー。


7
開発者が最先端のライブラリに対抗して構築し、それを実現せず、テスト中に「NoClassDefFound」エラーが至る所で発生し、他の誰もが何がうまくいかないのか疑問に思っている場合、事態は特に厄介です。(これは、ハドソンをセットアップしてQAビルドをそれに移行するまで、Javaベースのジョブで問題がありました)
MattC

1
実際、これはクリーンなチェックアウトからビルドする理由に過ぎず、専用のビルドサーバー上の専用のビルドエージェントからビルドする理由ではありません。ローカルの開発者マシンのリポジトリのクリーンチェックアウトで自動化されたビルドスクリプトを実行すると、専用のビルドサーバーのほとんどの利点が得られます。
Kaiserludi 2017年

主な利点の1つであるIMHOは、100%自動化して実行されるビルドシステムを使用することを強制し、開始するためにプッシュするボタンをゼロにすることを強くお勧めします。リリースとテストビルドのソースが1つしかないだけでなく、ビルドシステムを人が台無しにしないようにすることも重要です。
2018年

48

ビルドサーバーはいくつかの理由で重要です。

  • 彼らは環境を隔離しますローカルのCode Monkey開発者は、あなたのマシンでコンパイルできないときに「自分のマシンでコンパイルする」と言います。これは、チェックインが同期していないことを意味する場合と、依存ライブラリが欠落している場合があります。Jarの地獄は.dllの地獄ほど悪くはありません。どちらの方法でも、ビルドサーバーを使用することは、ビルドが不思議なことに失敗したり、誤ったライブラリを誤ってパッケージ化したりしないという安価な保険です。

  • ビルドに関連するタスクに焦点を当てています。これには、ビルドタグの更新、配布パッケージの作成、自動テストの実行、ビルドレポートの作成と配布が含まれます。自動化が鍵です。

  • 開発を調整(分散)します。標準的なケースは、複数の開発者が同じコードベースで作業している場合です。バージョン管理システムはこの種の分散開発の中心ですが、ツールによっては、開発者がお互いのコードとあまりやり取りしない場合があります。開発者に悪いビルドのリスクを負わせたり、コードを過度に積極的にマージすることを心配させたりする代わりに、自動ビルドが適切なコードを確認してビルドアーティファクトを予測可能な方法で処理できるビルドプロセスを設計します。そうすることで、開発者が新しいファイルの依存関係をチェックインしないなどの問題で何かをコミットした場合、すぐに通知を受けることができます。ステージングされた領域でこれを行うと、ローカルビルドを破壊するコードを開発者がプルしないように、ビルドしたコードにフラグを付けることができます。PVCSは、プロモーショングループのアイデアを使用してこれを非常にうまく行いました。Clearcaseはラベルを使用してそれを行うこともできますが、多くのショップが提供するよりも多くのプロセス管理が必要になります。


12
+1プログラマにビルド環境の変更を文書化させるのは、猫を飼うようなものです。.NetまたはBoost libを更新した段階で、まったく更新していることに気づいても、覚えていません。中央サーバーが毎日のビルドを行うことで、コードをチェックインした翌日の夜に彼らを捕まえることができます。「チームビルドを壊した、何を忘れたのですか?」
kmarsh 2009

28

彼らの目的は何ですか?
開発者のマシンの負荷を取り、ビルドに安定した再現可能な環境を提供します。

開発者がプロ​​ジェクトをローカルマシンでビルドしないのはなぜですか?
複雑なソフトウェアでは、「コンパイル」するだけで驚くほど多くの問題が発生する可能性があるためです。私が実際に遭遇した問題:

  • さまざまな種類の不完全な依存関係チェックが行われ、バイナリが更新されない。
  • サイレントに失敗する発行コマンド。ログのエラーメッセージは無視されます。
  • ソース管理にまだコミットされていないローカルソースを含めてビルドします(幸い、まだ「くそった顧客」メッセージボックスはありません...)。
  • 別のフォルダーからビルドして上記の問題を回避しようとすると、一部のファイルが間違ったフォルダーから選択されました。
  • バイナリーが集約されるターゲットフォルダーには、リリースに含まれていない古い開発者ファイルが含まれています

すべてのパブリックリリースはソース管理から空のフォルダーへの取得から始まるため、安定性が大幅に向上しました。以前は、「ジョーが新しいDLLをくれたときに消えてしまう」「おかしな問題」がたくさんありました。

一部のプロジェクトは非常に大規模なので、妥当な時間でそれをビルドするためにより強力なマシンが必要ですか?

「合理的」とは何ですか?ローカルマシンでバッチビルドを実行すると、実行できないことがたくさんあります。ビルドを完了するために開発者にお金を払うのではなく、実際のビルドマシンを購入するためにITに支払います。

十分な規模のプロジェクトに取り組んでいないのですか?

サイズは確かに1つの要素ですが、それだけではありません。


8

ビルドサーバーは、継続的インテグレーションサーバーとは異なる概念です。CIサーバーは、変更が行われたときにプロジェクトをビルドするために存在します。対照的に、ビルドサーバーは、クリーンな環境でプロジェクト(通常、タグ付けされたリビジョンに対するリリース)をビルドするために存在します。開発者によるハッキング、微調整、未承認の構成/アーティファクトバージョン、またはコミットされていないコードがリリースされたコードに組み込まれないようにします。


素晴らしい答え。名前にも賛成投票してください。
フィリップシフ2018

6

ビルドサーバーは、チェックイン時に全員のコードをビルドするために使用されます。コードはローカルでコンパイルできますが、他の全員が常にすべての変更を行うとは限りません。


5

すでに言われていることを付け加えるには:

元同僚がMicrosoft Officeチームで働いていて、完全なビルドには9時間かかることもあると私に言った。あなたのマシンでそれをやるのは面倒でしょうね。


4

ビルドとテストが機能し、アーティファクトに依存しないようにするためには、以前のバージョンのアーティファクト(および構成変更)のない「クリーン」な環境が必要です。分離する効果的な方法は、別のビルドサーバーを作成することです。


4

安定性、追跡可能性、再現性に関するこれまでの回答に同意します。( 'ity'sがたくさんありますよね?)多くのビルドサーバーを使用して大企業(ヘルスケア、ファイナンス)でのみ働いたことがあるので、セキュリティについてもそうだと付け加えます。映画「Office Space」を見たことがありますか?不満を持った開発者が自分のローカルマシンにバンキングアプリケーションを構築し、他の誰もそれを見たりテストしたりしない場合... BOOM。スーパーマンIII。


絶対に@グレッグ!ここの誰もがその部分を逃したようです。私は現在、本番環境へのセカンダリ部門の配置を必要とするコンプライアンスの変更管理プロセスに取り組んでいます。まあ、Visual Studioを使用してyada yada yadaを展開する方法をITに教えたくない限り、これはクイッククリックでこれを行う方法を提供します。
gcoleman0828

3

これらのマシンはいくつかの理由で使用されていますが、すべて優れた製品を提供するのに役立ちます。

1つの用途は、一般的なエンドユーザー構成のシミュレーションです。製品は、すべての開発ツールとライブラリーがセットアップされていれば、コンピューター上で動作する可能性がありますが、エンドユーザーはおそらくあなたと同じ構成ではありません。さらに言えば、他の開発者もあなたとまったく同じ設定にはなっていません。コードのどこかにハードコードされたパスがある場合、それはおそらくマシン上で動作しますが、Dev El O'perが同じコードをビルドしようとしても機能しません。

また、それらを使用して、製品を最後に破損したユーザー、更新内容、製品がどこで後退したかを監視することもできます。新しいコードがチェックインされるときはいつでも、ビルドサーバーはそれをビルドし、それが失敗した場合は、何かが間違っていることを明確にし、最後にコミットしたユーザーに障害があります。


2

一貫した品質を確保し、ビルドを「マシンから外して」環境エラーを特定し、ソース管理にチェックインするのを忘れたファイルもビルドエラーとして表示されるようにします。

また、インストーラーの作成にも使用します。これは、デスクトップでコード署名などを行うのに時間がかかるためです。


1

ビルド/サーバーで利用可能なものと同じライブラリーとそれらのライブラリーのバージョンがインストールされていることをプロダクション/テストボックスが知っているように、1つを使用します。


1

これは、管理とテストに関するものです。ビルドサーバーを使用すると、バージョン管理からメインの「トランク」ラインをビルドできることが常にわかります。ワンクリックでマスターインストールを作成し、ウェブに公開できます。コードがチェックインされるたびに、すべての単体テストを実行して、コードが機能することを確認できます。これらすべてのタスクを1つのマシンに収集することで、繰り返し正しく実行することが容易になります。


1

開発者が自分のマシンで構築できるのはあなたの言うとおりです。

しかし、これらは私たちのビルドサーバーが私たちに購入するものの一部であり、私たちは洗練されたビルドメーカーではありません:

  • バージョン管理の問題(一部は以前の応答で言及されています)
  • 効率。ローカルでビルドを行うために開発者が停止する必要はありません。彼らはそれをサーバー上で開始し、次のタスクに進むことができます。ビルドが大きい場合は、開発者のマシンが占有されていない時間がさらに長くなります。継続的インテグレーションと自動テストを行う人にとってはなおさらです。
  • 一元化。私たちのビルドマシンには、ビルドを作成し、それをUAT環境、さらにはプロダクションステージングに配布するスクリプトがあります。それらを1か所に保持することで、同期を維持する手間が軽減されます。
  • セキュリティ。ここではあまり特別なことはしませんが、システム管理者は、特定の承認されたエンティティのみがビルドサーバーで本番移行ツールにアクセスできるようにすることができます。

1

多分私だけです...

私は誰もが1つ

  • ファイルリポジトリを使用する
  • リポジトリからビルドします(クリーンな環境で)
  • 継続的なテストサーバー(クルーズコントロールなど)を使用して、「修正」後に何かが壊れていないかどうかを確認します。

しかし、自動的に作成されたバージョンを気にする人はいません。自動ビルドで何かが壊れたが、それはもうない-誰が気にするのか?進行中の作業です。誰かが修正しました。

リリースバージョンを実行する場合は、リポジトリからビルドを実行します。そして、サーバーが機能する6時間ごとではなく、その時点でリポジトリのバージョンにタグを付けたいと確信しています。

したがって、「ビルドサーバー」は単なる誤称であり、実際には「継続的なテストサーバー」である可能性があります。そうでなければ、それはほとんど役に立たないようです。


0

ビルドサーバーは、コードに対するある種のセカンドオピニオンを取得します。チェックインすると、コードがチェックされます。機能する場合、コードの品質は最低限です。


0

さらに、低水準言語は高水準言語よりもコンパイルにかなり時間がかかることを覚えておいてください。「よく見て、私の.Netプロジェクトは数秒でコンパイルされます!大したことは何ですか?」と考えるのは簡単です。しばらくの間、Cコードをいじる必要があり、コンパイルにどれだけ時間がかかるかを忘れていました。


私見、それは低レベル言語と高レベル言語の違いではなく、機能しているモジュールシステムを持つ言語とCの壊れた/存在しないモジュールシステム(つまり、インクルードファイル)の違いです。
Elmar Zander 2014年

0

ビルドサーバーは、リポジトリにある通常大規模なプロジェクトのコンパイルタスク(たとえば、夜間のビルド)をスケジュールするために使用されます。


0

ビルドサーバーはエスクローの基盤にもなります。他のユーザーが所有権を取得する権利がある場合に、ビルドを再現するために必要なすべてのパーツをキャプチャできます。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.