web-dev-qa-db-ja.com

開発環境のセットアップを自動化する方法は?

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

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

79
nimcap

いくつかのオプションがあり、時にはこれらの組み合わせが便利です:

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

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

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

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

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

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

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

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

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

Vagrant

Pete TerMaatなどが述べたように、仮想化は開発環境を管理および自動化するための優れた方法です。 Vagrantは基本的に、これらの仮想ボックスの設定から苦痛を取り除きます。

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

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

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

今では、私が行うほとんどすべてのプロジェクトに新しい「Vagrant box」を作成しています。すべての設定はプロジェクトリポジトリに保存されるため、別のチームメンバーを簡単に呼び出すことができます。リポジトリをプルして、vagrant upを実行するだけで、文字通り準備ができています。

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

チェックしてみてください!

18
Jonathan

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

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

これにより、個々のプロジェクトのセットアップの面倒が処理されます。

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

編集:

理想的には、ヘルパーインフラストラクチャをチェックインする代わりに、ビルドがgenerateヘルパーインフラストラクチャを許可する情報をチェックインします。これは、たとえばGNUビルドシステム(autotoolsなど)、またはMavenによる。これはよりエレガントです。たとえば、1つの特定のIDE、およびヘルパーインフラストラクチャの設定(パスなど)でメインプロジェクト設定を複製する必要はありません。

ただし、これはより複雑なアプローチでもあるため、動作させることができない場合は、IDE filesのようなものを直接チェックインすることは受け入れられると考えています。

13
sleske

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

7
jeremyasnyder

puppet を使用して、開発環境と実稼働環境の両方を構成します。最高の自動化システムを使用することが、運用をスケーリングする唯一の方法です。

3
David Schmitt

私は自分でこれについて考えてきました。ミックスに投入できる技術は他にもいくつかあります。私が現在設定しているものは次のとおりです。

  • PXEベースの事前シードされたインストールイメージ(Debian Squeeze)。ベアメタルマシン(または新しい仮想アプライアンス)を起動し、PXEブートメニューからイメージを選択できます。これには、(仮想アプライアンスに加えて)物理マシンに環境をインストールできるという大きな利点があります。
  • 誰かがすでにPuppetに言及しています。 CFEngineを使用しますが、同様の取引です。基本的に、構成は文書化され、クライアント上のエージェントによって継続的に適用されるポリシーファイルに集中化されます。
  • 厳格な環境が必要ない場合(つまり、開発者がツールセットの組み合わせを選択する場合)、新しい開発者がSudo apt-get install acmecorp-Eclipse-envまたはSudo apt-get install acmecorp-intellij-env、 例えば。
  • トピックは少し異なりますが、Debianベースの環境(Ubuntuなど)を実行している場合は、apt-cacher(パッケージプロキシ)。帯域幅を節約することに加えて、インストールがはるかに高速になります(パッケージがローカルネットワークにキャッシュされるため)。
1
hoipolloi

以前の場所では、SCM(クリアケース、SVN)にすべて(つまりすべて)がありました。新しい開発者がClearCase | SVNをインストールして、リポジトリを削除した場合。また、開発チームに環境を更新させるだけで、特定のlib/toolを更新する必要がある場合にも対応します。

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

1
Mike Reedell

OSXを使用していて、Railsで作業している場合。次のいずれかをお勧めします。

1
Neil

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

1
tehvan

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

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

1
Matt Tanase

http://nsnihalsahu.github.io/devscript でDevScriptを試してください。そのような1つのコマンド、devscript lampまたはdevscript laravelまたはdevscript Django。数分程度で、あなたのインターネット共同の速度に依存します

0
Nihal Sahu

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

0
Alex Martelli

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


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

buildbot を使用すると、頻繁に変更される会社のパッケージの定期的なビルドを自動化できます。

0
si28719e