言及したすべてのツール(Jenkins、ant、git)は、実際にアーティファクトを構築してテストするのに役立ちます。通常、Javaの世界では、これはwar、ear、または内部のアプリケーションでのzipです。複雑なアプリケーションでは、1つ以上のアーティファクトになる場合があります。他のプログラミングプラットフォームでは、DLL、複数の異なるプラットフォーム用のバイナリなどが異なる場合があります。
アプリケーションをデプロイしたいとしましょう。サーバーが1台の場合は、手動で、または独自のスクリプトを使用して実行できます。ここまでは順調ですね :)
しかし、多数のファーム(マシンのグループ)がある場合、ファームごとに異なる構成(データベース、地理的な場所)で展開する必要があります。ファームに新しいノードをいくつか追加するようにアプリケーションを水平方向に拡張できる場合はどうでしょうか。ささいな仕事。QAチームはテストを実行するために新しい環境を要求するだけかもしれません。パフォーマンスチームは新しい環境を要求するか、ファームにノードを追加してストレステストを実行できます。今、これらすべてのものを管理することは複雑なようです。ここで、ansible、chef、salt、puppetなどのツールが使用されます。
これらは実際に展開の自動化に役立ちます。展開のレシピを提供したり、不足している依存関係をインストールしたりできます(プロジェクトを実行するには、特定のバージョンのjre、tomcat、および静的コンテンツのnginxが必要になる場合があります)。これらすべてが農場レベルで。
私は答えが一般的すぎて、Java開発者にはわかりにくいかもしれません(私はその1つです)。しかし、システムや開発者のチームがいる場合は、これらのツールのメリットをすぐに指摘する必要があります。