(この質問の愚かさについて事前に謝罪します。私は通常、システム管理者ではなくプログラマーですが、いくつかのことを自動化し、自動化されているが最もきれいな方法ではない他のいくつかのことをクリーンアップするために自分自身に任せました。:-)
私は、cfengine、Puppet、Chefなどの多数のサーバーへのソフトウェア展開を自動化するためのさまざまなツールを見回してきました。これまでのところ、Puppetが最も魅力的に見えますが、私はまだ何も約束していません。
これらのツールはすべて、パッケージ済みソフトウェアを使用して多数のサーバーを最新の状態に保つという素晴らしい仕事をすることができるように見えます。
私が得られないのは、ツール(Puppetなど)を使用して独自の内部ソフトウェアの展開を管理するにはどうすればよいかということです。 Apacheを維持する方法を示す1000のチュートリアルを見たので、私は途方に暮れていると思いますensure => latest
(これはisかなりクールです)が、今日の私のユースケースに完全に対応するものはありません。これは次のようなものです。
Puppetは素晴らしいサウンドであり、一部のシェルスクリプトよりも宣言型のべき等構成の利点を完全に理解していますが、「シェルスクリプトをPuppet(またはChef、またはcfengine)に更新したい」というチュートリアルは見たことがないので、次のようにします。すべきだ」。そんなことはありますか? Puppetのドキュメントで提供されているものを取得して、必要な動作を複製する方法は他の人には明らかですか?私はそれを取得していませんか?
これまでのところ、人間(#1)がPuppetの外部にあるソフトウェア(#2と#3)を手動でパッケージ化し、Puppet構成を手動で更新すると、Puppetがサーバーを更新するようになります。 .. 多分? (あなたが言うことができると確信しているので、私はここで少し混乱しています。)
ありがとう!
Puppetを使用しますが、アプリケーションのデプロイには使用しません。あなたが言ったように、ソフトウェアをdebsまたはrpmにパッケージ化し、どこでもプライベートリポジトリを構成し、puppetを使用してバージョンを制御することができますが、それでもすべてのサーバーで次の30分の更新を待つことになります。
私がすること(そしてこれは私たちがすることに近いですが、Railsなので、コンパイル手順はありません):
Chefには、よりリアルタイムのプッシュ機能がある可能性があります。私はそれをあまりよく知らない。
ステップ1から3は、通常、ビルドプロセスで自動化されます。通常、このプロセスの出力はテストサイクルを通過します。統合テスト環境にデプロイできるように、出力をパッケージ化します。統合テストに合格した場合にのみ、手順4と5を実行する必要があります。
ステップ5は、デプロイメントの停止を意味します。 Apacheのようなものの場合、これはログローテーション中にシャットダウンして再起動することで処理できます。 crontabスクリプトでこれを処理できます。 1時間程度のローリング変更を処理できる場合は、展開ステップ4に再起動を含めるだけです。Puppetまたはcfengineは、ステップ4に適したツールです。これは、統合テストに合格したときにリポジトリを更新することでトリガーできます。
人形のレシピを検索すると、本番環境に対応したスクリプトがたくさん見つかります。はい、ソフトウェアを手動でパッケージ化する必要があります。独自の個人リポジトリを維持している場合は、ensure => latestフラグを使用できます。次に、puppetにソフトウェアをインストールするように指示するレシピを作成します。レシピは、スレーブに伝播されるマスターサーバーに配置する必要があります。