開発環境のセットアップを自動化する方法は?[閉まっている]


80

新しい開発者がチームに参加するか、開発者が変更を使用しているコンピューターを使用するたびに、開発者は、現在のプロジェクトを機能させるためにローカル開発環境をセットアップするために多くの作業を行う必要があります。SCRUMチームとして、展開とテストを含むすべてを自動化しようとしているので、私が求めているのは、ローカル開発環境のセットアップを自動化するためのツールまたはプラクティスはありますか?

たとえば、環境をセットアップするには、最初にEclipseをインストールし、次にSVN、Apache、Tomcat、MySQL、PHPをインストールする必要がありました。その後、DBにデータを入力し、さまざまな構成ファイルなどに小さな変更を加える必要がありました...この労力をワンクリックに減らす方法はありますか?

回答:


68

いくつかのオプションがあり、これらの組み合わせが役立つ場合があります。

  • 自動インストール
  • ディスクイメージング
  • 仮想化
  • ソースコード管理

さまざまなオプションの詳細:

  1. ワークステーションのさまざまなサービス、ツール、および構成ファイルのインストールと構成を自動化するための自動インストールツール:

    • Puppetには学習曲線がありますが、強力です。マシンのクラス(開発ボックス、Webサーバーなど)を定義すると、ボックスを適切な状態にインストール、構成、および維持するために必要な処理が実行されます。ワンクリックを要求しましたが、Puppetはマシンを定期的にチェックして、希望どおりに構成されていることを確認するため、デフォルトではゼロクリックです。ファイルまたはモードが変更されたことを検出し、問題を修正します。私は現在、これを使用して少数のRedHat Linuxボックスを保守していますが、数千を処理できます。(2009年5月8日現在、Windowsをサポートしていません)。
    • Cfengineは別のものです。これは、RedHatLinuxを使用している70人のエンジニアがいるショップでうまく使用されているのを見てきました。その制限は、Puppetの理由の一部でした。
    • SmartFrogは、ホストを構成するためのもう1つのツールです。それはWindowsをサポートします。
    • シェルスクリプト。 RightScaleには、シェルスクリプトを使用してAmazonEC2イメージを設定する方法の例があります。
    • パッケージをインストールします。Unixボックスでは、これを完全にパッケージで行うことができ、Windowsではmsiがオプションになる場合があります。たとえば、RubyWorksは、依存関係を介して他のパッケージをインストールする1つのパッケージをインストールすることにより、完全なRuby onRailsスタックを提供します。
  2. ディスクイメージ そしてもちろん、別のホストに復元できるように構成されたホストのイメージを保存するためのディスクイメージングツールもあります。仮想化と同様に、これはテストボックスに特に適しています。これは、物事をきれいな状態に簡単に復元できるためです。物事を継続的に最新の状態に保つことは依然として問題です-構成ファイルの変更を伝播するためだけに新しいイメージを作成する価値はありますか?

  3. 仮想化は別のオプションです。たとえば、Xen、VirtualPC、またはVMWareイメージのコピーを作成して新しいホストを作成します。これは、テストボックスで特に役立ちます。テストでどのような混乱が生じても、クリーンで既知の状態に簡単に復元できるためです。ディスクイメージングツールと同様に、ホストを最新の状態に保つには、自動インストール/構成ツールを使用する場合よりも多くの手動の手順と警戒が必要です。

  4. ソースコード管理 必要なツールをインストール/構成したら、ビルドを実行するには、ソースコードリポジトリから必要なものをチェックしてビルドする必要があります。

現在、私は上記の組み合わせを使用して、次のようにプロセスを自動化しています。

  • VMWareゲストへの最低限のOSインストールから始めます
  • シェルスクリプトを実行してPuppetをインストールし、ソースコード管理からその構成を取得します
  • ツール/コンポーネント/構成をインストールするためのPuppet
  • ソースコード管理からファイルをチェックアウトして、Webアプリケーションをビルドおよびデプロイします

私たちのオフィスには、Windows、Linux、MacOSがあります。そのため、仮想化オプションを選択します。
nimcap 2009年

私たちは仮想化を採用しており、それは優れたソリューションです。私が始めたとき、セットアップするのに3〜4日かかりました。今では、VPCイメージをコピーするのにかかる時間内に新しい開発者がセットアップされます。
バート

5
非常によく似ているので、agile.dzone.com / articles / 4-methods-automate-developmentを作成しましたか?
アーロンD

5
いいえ、私はその記事を書きませんでしたが、類似点から判断すると、私はそれを刺激したようです。:-)
Pete TerMaat 2013


20

私はこの質問に出くわし、まだ誰もVagrantについて言及していないことに非常に驚いていました。

Vagrant

Pete TerMaatや他の人が言及しているように、仮想化は開発環境を管理および自動化するための優れた方法です。Vagrantは基本的に、これらの仮想ボックスを設定する手間を省きます。

数分以内に、お気に入りのLinuxディストリビューションの完全に新しいコピーを起動して実行し、本番サーバーとまったく同じ方法でプロビジョニングできます。

PHPやMySQLなどをインストールするためにOSXやWindowsと戦う必要はもうありません。すべてのソフトウェアは仮想マシン内で動作し、実行されます。でSSHで接続することもできvagrant sshます。間違えたり何かを壊したりした場合は、vagrant destroyそれだけで、vagrant up最初からやり直してください。

Vagrantは、ローカルファイルシステムに同期されたフォルダーを自動的に作成します。つまり、仮想マシン内で開発する必要はありません(つまり、Vimを使用します)。選択したエディターを使用してください。

私は今、私が行うほとんどすべてのプロジェクトのために新しい「Vagrantbox」を作成しています。私の設定はすべてプロジェクトリポジトリに保存されるので、別のチームメンバーを簡単に連れてくることができます。彼らは単にレポを引っ張って実行する必要vagrant upがあり、文字通り行く準備ができています。

これにより、ソフトウェア要件が異なるプロジェクトの処理もはるかに簡単になります。PHP 5.3に依存するプロジェクトもあれば、PHP5.4を実行する新しいプロジェクトもあるかもしれません。そのプロジェクトに必要なバージョンをインストールするだけです。

見てみな!


1
仮想化環境ではデバッグが困難になる可能性があります
Jonathan

13

重要なポイントの1つは、チェックアウト後すぐにビルド、デプロイ、実行できるように、ソース管理でプロジェクトを設定することです。

つまり、Makefile、antビルドファイルなどのヘルパーインフラストラクチャ、およびIDEプロジェクトファイルなどのツールの設定もチェックインする必要があります。

これで、個々のプロジェクトのセットアップの煩わしさが解消されます。

基本的なマシンのセットアップには、標準のイメージを使用できます。もう1つのオプションは、プラットフォームのツールを使用してインストールを自動化することです。Linuxでは、必要なすべてのパッケージに依存するメタパッケージを作成できます。Windowsでは、MSIなどを使用して同様のことが可能です。

編集:

理想的には、ヘルパーインフラストラクチャをチェックインする代わりに、ビルドがヘルパーインフラストラクチャを生成できるようにする情報をチェックインします。これは、GNUビルドシステム(autotoolsなど)やMavenなどが採用しているアプローチです。これは、(理論的には)任意の(サポートされている)ビルド環境のインフラストラクチャを生成できるため、さらに洗練されています。したがって、特定のIDEに縛られることはなく、ヘルパーインフラストラクチャ(パスなど)の設定を複製する必要はありません。主なプロジェクト設定。

ただし、これもより複雑なアプローチであるため、機能させることができない場合は、IDEファイルなどを直接チェックインすることは許容できると思います。


7

VirtualPCまたはVMwareを使用して開発環境を仮想化するのが好きです。これにより、開発者間で共有できる標準の「開発環境」が提供されます。開発環境と競合する可能性のある、ユーザーがシステムに追加する可能性のあるソフトウェアについて心配する必要はありません。また、(コアテクノロジの2つの異なるバージョンを使用して)開発環境を1つのシステム上に置くことができない2つのプロジェクトに取り組む方法も提供します。


VirtualPc / VMWare環境で実行すると、パフォーマンスに大きな影響がありますか?Visual Studio 2008を使用していますか?
Joel Gauvreau 2009年

私は、VM(VMWare)ですべての開発を独占的に行う少なくとも1つの大きなソフトウェア開発ショップを知っています。CPUがハードウェア仮想化をサポートするようになった今、状況ははるかに良くなっています...
2009年

コンピュータ名の競合に注意する必要があります。同じ名前の2台のマシンが1つのネットワークに表示される場合、Windowsはあまり満足していません。また、開発環境をVMに配置したくない。オーバーヘッドは本当に私のパフォーマンスを低下させる可能性があります。
Kieveli 2009年

2
完全に仮想化された開発環境を使用します。VistaVMをホストするためにVMServerまたはVirtualBoxを使用します。VMイメージには開発スタック全体が含まれていますが、corpドメインには接続されていません。ユーザーが新しいマシンを必要とする場合、ユーザーはそれをローカルにコピーし、NewSIDを実行してから、一意のマシン名でドメインに参加します。最新のハードウェアでは、目立ったパフォーマンスの低下はありません。ソリューションで最大20のC ++ / C#プロジェクトでVS2008を使用し、すべて正常に機能します。
コリンデズモンド

仮想化で私が目にする大きな利点の1つは、現在の状態をそのまま保存できることです。これにより、後で仮想化に戻ったときに、元の場所に正確に戻ることができます。新しい開発マシンのセットアップとは正確には関係ありませんが、VMを使用することの良い副作用です。
Joel Gauvreau 2009年

3

使用人形あなたの開発と生産環境の両方を設定するには。一流の自動化システムを使用することが、運用を拡張する唯一の方法です。


1

仮想マシンを使用するオプションは常にあります(VMWare Playerなどを参照)。1つの環境を作成し、最小限の構成で新しい従業員ごとにコピーします。


1

以前の場所では、SCM(クリアケース、次にSVN)にすべて(そして私はすべてを意味します)がありました。新しい開発者がClearCase | SVNをインストールし、リポジトリを吸い上げることができるようになったとき。これは、開発チームに環境を更新させることができるため、特定のlib / toolを更新する必要がある場合にも対処します。

これには2つのリポジトリを使用したため、コードとツール/構成は別々の場所にありました。


1

DevStructureのブループリントを強くお勧めします。それはオープンソースであり、あなたのユースケースは実際に私たちが最初にソフトウェアを書いた正確な理由です。私たちの目標は多少変更されましたが、それでもあなたが説明していることに最適なツールです。つまり、再利用可能なサーバー構成を作成できます。これは、非常に単純な構成管理です。これがお役に立てば幸いです。

https://github.com/devstructure/blueprint(Blueprint @ Github)


1
開発環境ですか、それともサーバーですか?
nimcap 2011年

1

私はこれについて自分で考えてきました。ミックスに投入できるテクノロジーは他にもいくつかあります。これが私が現在設定しているものです:

  • PXEベースのシード済みインストールイメージ(Debian Squeeze)。ベアメタルマシン(または新しい仮想アプライアンス)を起動し、PXEブートメニューからイメージを選択できます。これには、(仮想アプライアンスに加えて)物理マシンに環境をインストールできるという大きな利点があります。
  • 誰かがすでにパペットについて言及しました。私はCFEngineを使用していますが、同様の取引です。基本的に、構成は文書化され、ポリシーファイルに一元化されます。ポリシーファイルは、クライアントのエージェントによって継続的に適用されます。
  • あなたは、硬質な環境を望んでいない場合は、新しい開発者が入力することができますので、あなたがあなた自身のdebパッケージをロールバックすることができます(つまり、開発者はツールセットの組み合わせを選択する場合があります)sudo apt-get install acmecorp-eclipse-envまたはsudo apt-get install acmecorp-intellij-env、たとえば、。
  • 少しトピックから外れていますが、Debianベースの環境(つまりUbuntu)を実行している場合は、インストールapt-cacher(パッケージプロキシ)を検討してください。帯域幅を節約することに加えて、インストールがはるかに高速になります(パッケージはローカルネットワークにキャッシュされるため)。


0

標準構成のマシンを使用する場合は、完全に構成された新しいインストールでディスクをイメージ化できます。これは、多くの企業で非常に人気のあるアプローチです(開発者だけでなく)。個別に構成されたOSが必要な場合は、構成されたOSが目的のセットアップになったら、追加および変更されたすべてのファイルをtar-bz2し、rootとして解凍するだけで、目的の環境を最初から作成できます。


0

Linuxフレーバーを使用している場合は、おそらくパッケージ管理システムがあります。fedora/ redhatの場合は.rpm、ubuntu / debianの場合は.debと考えられます。あなたが説明するものの多くはすでに利用可能なパッケージを持っています:svn、eclipseなど。会社固有のソフトウェア用に独自のパッケージをロールし、リポジトリを作成し(おそらくローカルネットワークでのみ利用可能)、セットアップを単一に減らすことができます会社のリポジトリを/etc/apt/sources.list(debian / ubuntu)に追加し、次のようなコマンドを呼び出すbashスクリプト


/home/newhire$ apt-get update && apt-get install some complete package list

buildbotを使用して、頻繁に変更される会社のパッケージの通常のビルドを自動化できます。


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