Puppet を使用して独自のソフトウェアをデプロイしますか?

Puppet を使用して独自のソフトウェアをデプロイしますか?

(この質問が愚かなものであることについて、あらかじめお詫びします。私は通常、システム管理者ではなくプログラマーですが、いくつかのことを自動化し、自動化されているがあまりきれいな方法ではない他のいくつかのことをクリーンアップすることを自ら引き受けました。:-)

私は、cfengine、Puppet、Chef など、多数のサーバーへのソフトウェアのデプロイメントを自動化するためのさまざまなツールを検討してきました。これまでのところ、Puppet が最も魅力的に見えますが、まだ何も決めていません。

これらのツールは、多数のサーバーを最新の状態に保つのに非常に役立ちそうです。包装済みソフトウェア。

私が理解できないのは、Puppetのようなツールを使って社内ソフトウェアのデプロイメントを管理する方法です。Apache ensure => latest(これはかなりクールですが、今日の私のユースケースに完全に一致するものはありません。それは次のようなものです。

  1. 人間がボタンを押すと、
  2. バージョン管理リポジトリBからブランチAをプルする
  3. コマンドCを実行してコンパイルします
  4. バイナリDをサーバーE1からE10にコピーする
  5. 各サーバーでコマンドFを実行してすべての変更を有効にします

Puppet は素晴らしいと思いますし、一部のシェル スクリプトよりも宣言的でべき等な構成の利点があることはよくわかりますが、「シェル スクリプトを Puppet (または Chef、cfengine) に更新したいので、次のようにする」というチュートリアルは見たことがありません。そのようなものがあるのでしょうか。Puppet ドキュメントで提供されているものを使用して、必要な動作を再現する方法は、他の人にも明らかでしょうか。私が理解していないだけでしょうか。

これまでのところ、私には、人間 (#1) が Puppet 外部のソフトウェア (#2 および #3) を手動でパッケージ化し、Puppet 構成を手動で更新し、それが Puppet によるサーバーの更新をトリガーする、というように聞こえます... 多分? (おわかりだと思いますが、私はここで少し混乱しています。)

ありがとう!

答え1

私たちは Puppet を使用していますが、アプリケーションのデプロイメントには使用していません。おっしゃるとおり、ソフトウェアを debs または rpm にパッケージ化し、プライベート リポジトリをどこにでも設定し、Puppet を使用してバージョンを制御することはできますが、それでもすべてのサーバーで次の 30 分間の更新を待つ必要があります。

私が行うことは(これは私たちが行うことに近いですが、Rails を使用しているためコンパイル手順はありません):

  • puppet を使用して、アプリケーション自体を除くサーバー上のすべてを構成します。依存関係、Web サーバー、ユーザー、パスなど。
  • 自動ビルド サーバー (bamboo、hudson、cruise control など) で、コンパイルされた成果物を Nexus などのリポジトリ マネージャーに配置します。
  • capistrano を使用してビルドをサーバーにプッシュします。

Chef にはよりリアルタイムなプッシュ機能があるかもしれませんが、私はあまり詳しくありません。

答え2

ビルド プロセスでは、ステップ 1 から 3 までが一般的に自動化されています。通常、このプロセスの出力はテスト サイクルを経ます。出力をパッケージ化して、統合テスト環境にデプロイできるようにします。統合テストに合格した場合にのみ、ステップ 4 と 5 が実行されます。

ステップ 5 は、デプロイメントの停止を意味します。Apache などの場合、ログのローテーション中にシャットダウンして再起動することで対処できます。crontab スクリプトでこれを処理できます。1 時間程度のローリング変更を処理できる場合は、デプロイメントのステップ 4 に再起動を含めるだけです。Puppet または cfengine は、ステップ 4 に適したツールです。これは、統合テストに合格したときにリポジトリを更新することでトリガーできます。

答え3

Puppet レシピを検索すると、すぐに使用できるスクリプトが大量に見つかります。はい、ソフトウェアを手動でパッケージ化する必要があります。独自の個人リポジトリを管理している場合は、ensure=>latest フラグを使用できます。次に、Puppet にソフトウェアをインストールするように指示するレシピを作成します。レシピは、スレーブに伝播されるマスター サーバーに配置する必要があります。

関連情報