web-dev-qa-db-ja.com

バージョン管理、テスト、継続的インテグレーション/デプロイメントなどの開発手法をシステム管理にどのように適用しますか?

多くの人々が使用するさまざまなサービスを使用して、多数のサーバーを管理するとします。ここで、これらのサーバーの1つで一部のソフトウェアを再構成または交換するとします。明らかに、本番環境にあるサーバーで作業する必要はありません。

これがコードの変更である場合、開発者として、ローカルの開発マシンで変更を加え、ローカルでテストして、バージョン管理システムに変更をコミットします。次に、変更をステージング環境にデプロイし、さらにテストして、最終的に本番環境にデプロイすることができます。必要に応じて、ロールバックするのも簡単です。

一般的に、または具体的には、システム管理でこれをどのように達成しますか?

(最初に頭に浮かぶのは、仮想マシンを使用して仮想マシンのイメージをバージョン管理に入れることですが、現在私が気付いていない多くの文献や巧妙なソリューションがあると確信しています。)

18
arex1337

短い答えは「OS展開管​​理」、「構成管理」、「ソフトウェアパッケージング」です。長い答えが続きます。

ダニエル・ピットマンの回答に、システム管理で「システム」を形成するものの内訳を追加したいと思います。

システムまたは環境は、次のもので構成されます。

  • サーバー
  • オペレーティング・システム
  • 構成
  • ベンダーパッケージ;そして
  • ローカルパッケージ

これらを包み込むのは、次のようなプロセスです。

  • OSの展開またはイメージング
  • 構成管理
  • ソフトウェアパッケージ管理
  • 監査/ロギング
  • モニタリング
  • バックアップ

そして、これらを組み合わせて、次のような機能しない目標の達成を支援したいと考えています。

  • 再現性
  • 保守性
  • 測定可能性
  • パフォーマンス
  • 追跡可能性
  • テスト容易性
  • 変更可能性

これは簡単なブレインダンプです。すべてのリストにさらに追加できると確信しています。

あなたの質問は、特定の単語を使用せずにこれらの多くに触れています。たとえば、簡単に展開して元に戻すことができるようにしたい、つまり保守性が必要な場合です。テスト環境でそれを実行し、合格するまでテストします。つまり、再現性、テスト可能性、および測定可能性です。 OSと構成の展開の再現性が必要なため、VMイメージをバージョン管理に配置することを検討しています。

これを支援するツールはたくさんあり、そのうちのいくつかはダニエルによって言及されています。他のいくつかは次のとおりです。

  • 既知のOS環境をデプロイするためのキックスタート(RedHatベース)、Preseed(Debianベース)、WDS(MS Windows)
  • Spacewalk/Satellite(RedHatベース)、構成およびパッケージ管理用のグループポリシー(MS Windows)
  • YUMおよびAPTパッケージ(ソフトウェアの一部を構成するバイナリ、データ、および構成のセット)を生成、展開、アップグレード、および削除するためのパッケージングシステム
  • モニタリング用のNagios、OpenNMS、SCOM
  • バックアップ用のAmanda、Bacula、Windowsバックアップサーバー
  • パフォーマンス監視用のMunin、PCP、Hyperic
  • バージョン管理用のCVS、SVN、GIT、またはBazaar
  • ビルド管理のためのハドソンとジェンキンス
  • テスト用のSeleniumとロボット
  • 記録、通信、追跡のためのBugzilla、Request Tracker、Jira

繰り返しになりますが、これは包括的なリストではありませんが、私をガイドするために頭に入れておき、うまくいけばあなたにも役立つことを願っています。

15
nearora

免責事項:私はPuppetの開発者の1人です。

明白な方法は、概念を適用することです。開発/テスト/本番のサイクルを定義し、それらを介して変更をプッシュします。バージョン管理を使用してシステムを追跡します。

簡単に言えば、その道を歩み始めると、それらを自動化するツールが本当に必要であることがわかります。基本的には、システム管理を自動化して、マシンでこれらの手法を使用せず、システムでそれらを使用するようにします。マシンを管理します。

ChefPuppetSaltCFEngine などのツールはすべて、この2番目のニーズに対応するための一般的なツールです。これらは、システム管理をバージョン管理とテストが可能な中央ソリューションに変えるという一般的な方向で機能します。

DevOps ムーブメントは、これを行う方法に関する優れた情報のもう1つのソースです。教訓は、開発者と運用スタッフの間のより良い協力ですが、これと同じ方向に向かう傾向もあります。

16
Daniel Pittman

Windowsの世界では、アプリケーションライフサイクル管理に関するこれらの問題は、System Center2012で対処されています。

System Center Virtual Machine Manager(SCVMM)では、サービスは「サービステンプレート」(例:従来の3層サービス)を使用して定義され、実行環境は「クラウド」(例:開発、ステージング、本番)として定義されます。サービステンプレートは、バージョン管理して、さまざまなクラウドに(自動化された方法で)ロールアウトできます。 SCVMMは、仮想化されたハードウェア(VMなど)とソフトウェア(OS、アプリコンポーネントなど)をプロビジョニング、展開、構成する作業を行います。

System Center Service Managerは、プロセスの観点からこれを結び付ける要素です。たとえば、問題管理と変更管理。

1
Richard B