多くの人々が使用するさまざまなサービスを使用して、多数のサーバーを管理するとします。ここで、これらのサーバーの1つで一部のソフトウェアを再構成または交換するとします。明らかに、本番環境にあるサーバーで作業する必要はありません。
これがコードの変更である場合、開発者として、ローカルの開発マシンで変更を加え、ローカルでテストして、バージョン管理システムに変更をコミットします。次に、変更をステージング環境にデプロイし、さらにテストして、最終的に本番環境にデプロイすることができます。必要に応じて、ロールバックするのも簡単です。
一般的に、または具体的には、システム管理でこれをどのように達成しますか?
(最初に頭に浮かぶのは、仮想マシンを使用して仮想マシンのイメージをバージョン管理に入れることですが、現在私が気付いていない多くの文献や巧妙なソリューションがあると確信しています。)
短い答えは「OS展開管理」、「構成管理」、「ソフトウェアパッケージング」です。長い答えが続きます。
ダニエル・ピットマンの回答に、システム管理で「システム」を形成するものの内訳を追加したいと思います。
システムまたは環境は、次のもので構成されます。
これらを包み込むのは、次のようなプロセスです。
そして、これらを組み合わせて、次のような機能しない目標の達成を支援したいと考えています。
これは簡単なブレインダンプです。すべてのリストにさらに追加できると確信しています。
あなたの質問は、特定の単語を使用せずにこれらの多くに触れています。たとえば、簡単に展開して元に戻すことができるようにしたい、つまり保守性が必要な場合です。テスト環境でそれを実行し、合格するまでテストします。つまり、再現性、テスト可能性、および測定可能性です。 OSと構成の展開の再現性が必要なため、VMイメージをバージョン管理に配置することを検討しています。
これを支援するツールはたくさんあり、そのうちのいくつかはダニエルによって言及されています。他のいくつかは次のとおりです。
繰り返しになりますが、これは包括的なリストではありませんが、私をガイドするために頭に入れておき、うまくいけばあなたにも役立つことを願っています。
免責事項:私はPuppetの開発者の1人です。
明白な方法は、概念を適用することです。開発/テスト/本番のサイクルを定義し、それらを介して変更をプッシュします。バージョン管理を使用してシステムを追跡します。
簡単に言えば、その道を歩み始めると、それらを自動化するツールが本当に必要であることがわかります。基本的には、システム管理を自動化して、マシンでこれらの手法を使用せず、システムでそれらを使用するようにします。マシンを管理します。
Chef 、 Puppet 、 Salt 、 CFEngine などのツールはすべて、この2番目のニーズに対応するための一般的なツールです。これらは、システム管理をバージョン管理とテストが可能な中央ソリューションに変えるという一般的な方向で機能します。
DevOps ムーブメントは、これを行う方法に関する優れた情報のもう1つのソースです。教訓は、開発者と運用スタッフの間のより良い協力ですが、これと同じ方向に向かう傾向もあります。
Windowsの世界では、アプリケーションライフサイクル管理に関するこれらの問題は、System Center2012で対処されています。
System Center Virtual Machine Manager(SCVMM)では、サービスは「サービステンプレート」(例:従来の3層サービス)を使用して定義され、実行環境は「クラウド」(例:開発、ステージング、本番)として定義されます。サービステンプレートは、バージョン管理して、さまざまなクラウドに(自動化された方法で)ロールアウトできます。 SCVMMは、仮想化されたハードウェア(VMなど)とソフトウェア(OS、アプリコンポーネントなど)をプロビジョニング、展開、構成する作業を行います。
System Center Service Managerは、プロセスの観点からこれを結び付ける要素です。たとえば、問題管理と変更管理。