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


8

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

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)はソフトウェア(#2および#3)をPuppetの外部に手動でパッケージ化し、Puppet構成を手動で更新して、Puppetがサーバーを更新するようトリガーします。 .. 多分?(あなたが言うことができると確信しているので、私はここで少し混乱しています。)

ありがとう!


Puppetは「パッケージ、ファイル、サービス」パターンで動作することを目的としています。Puppetはサーバーを準備するのに最適ですが、Jenkinsのような継続的ビルドサーバーは、このユースケースに適したツールです。
スパー、2013年

回答:


5

パペットを使用しますが、アプリケーションのデプロイメントには使用しません。すでに述べたように、ソフトウェアをdebsまたはrpmsにパッケージ化し、プライベートリポジトリをどこにでも構成し、puppetを使用してバージョンを制御できますが、すべてのサーバーで次の30分の更新を待つのは無慈悲です。

私が何をするか(そしてこれは私たちがすることに近いですが、私たちはレールを使用するのでコンパイルステップはありません):

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

Chefには、よりリアルタイムのプッシュ機能がある場合があります。私はそれにあまり詳しくありません。


この特定のソフトウェアはRubyを使用していません。Puppetはかなり不可知論的だという印象を受けましたが、CapistranoはRailsアプリで最適に動作するように構築されています。しかし、私がキャップを使用してから2年が経過したため、変更されている可能性があります。今すぐ確認します。
Ken

1
CapistranoはRailsに傾いていますが、柔軟性があり、他の言語で簡単に使用できます。デフォルトのデプロイレシピを読んで、独自のレシピで上書きするだけです。それはただのプログラミングです。私の会社では、数十のPHPアプリをCapistrano経由で少数のサーバーに展開していますが、Webistranoフロントエンドを使用して管理しやすくしています。
Martijn Heemels 2010

2
Capistranoは問題ありませんが、MCollectiveとRunDeckは、Puppetと統合するためにより適切に調整されています。
jgoldschrafe 2010

また、Fabricもご覧ください。カピストラーノに少し似ていますが、Pythonです。
Xiong Chiamiov 2011年

1

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

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


1

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

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.