25

現在、展開スクリプトはすべてシェルにあり、約 10 個のプログラムをインストールして構成しています。私が見ているように、シェルはこれのための素晴らしいツールです:

モジュラー:スクリプトごとに 1 つのプログラムのみ。このようにして、プログラムを異なるサーバーに分散させることができます。

シンプル:シェル スクリプトは非常にシンプルで、他のソフトウェアをインストールする必要はありません。

ワンクリック:シェル スクリプトを 1 回実行するだけで、すべてがセットアップされます。

不可知論的:ほとんどのプログラマーはシェルを理解することができ、特定のプログラムの使用方法を知る必要はありません。

バージョニング:私のコードはGitHubにあるので、単純な Git プルとすべてのスーパーバイザーの再起動により、最新のコードが実行されます。

これらすべての利点があるにもかかわらず、シェルを使用するのではなく、AnsibleChefなどのツールを使用するように常に言われているのはなぜですか?

4

1 に答える 1

48

シェル スクリプトは、必要に応じて機能する場合、それほど悪くはありません。

CFEngine人々はさまざまな理由で他のツール ( 、Puppet、Chef、Ansible など) を推奨しています。

  1. makeスクリプトを使用してビルド システムを実装する代わりに、人々が次のようなツールを使用するのと同じ一連の理由です。
  2. 冪等性 : テイクが何度でも安全に再実行できることを保証する品質であり、実行のたびに目的の状態になるか、そこにとどまるか、少なくとも//収束してそれに近づく// 方法。

    確かに、最終結果がべき等になるようにスクリプトを書くことができます。

     # Crude example
     grep myhost /etc/hosts || echo '1.2.3.4  myhost' >> /etc/hosts 
    

    しかし、べき等ツールを使用すると、はるかに優れています。

  3. シェル スクリプトは必須です。Chef/Ansible/Puppet などのツールはdeclarativeです。一般に、宣言型は、ある程度の規模のしきい値を考えると、生産性が向上します。

  4. DSL はいくらか力を奪いますが、秩序、清潔さ、その他の種類の力を与えてくれます。私はシェルスクリプトが大好きですが、Ruby も大好きです。Puppet の人々は彼らの言語が大好きです! シェルの方が好きだからまだシェルの方がいいと思っているなら、問題ありません。

  5. [追加]再配布可能で再利用可能なパッケージ。Ruby には gem、Perl には CPAN、Node には npm、Java には maven があります。すべての言語には、再利用可能なソース コードをパッケージ化して世界と共有する方法に関する独自の規則があります。

    シェル スクリプトにはありません。

    Chef には規則に従ったクックブックがあり、gem を Ruby アプリケーションにインポートするのとほぼ同じ方法でインポートして、アプリケーションに新しい機能を与えることができます。Puppet には puppetforge とそのモジュールがあり、Juju には魅力があります (それらはシェル スクリプトに非常に近いので、興味があるかもしれません)。

  6. ツールは実際に彼らを助けました!私は根っからのシェル スクリプターでしたし、今もそうですが、Chef を使用することで、より早く家に帰り、ぐっすり眠ることができ、制御を維持し、OS 間での移植性を維持し、混乱を避けることができます。サーバー シェル スクリプト。

于 2013-10-31T10:23:03.823 に答える