1. ホーム
  2. jenkins

[解決済み] AnsibleとRundeckを連携させるのは良いアイデアですか、それともどちらか一方を使えば十分ですか?

2022-02-07 16:18:31

質問内容

最近、Ansibleに注目し、プロジェクトで使いたいと思っています。また、Rundeckというツールもあり、こちらはあらゆる種類のオペレーションを行うことができます。私はどちらのツールも使用したことがなく、これが私の現在の理解です。

類似点

  • 両ツールともエージェントレスで、SSHを利用してリモートサーバー上でコマンドを実行する。

  • Rundeck のメインコンセプトは Node で、Ansible のインベントリと同じで、重要な考え方は対象サーバーを定義/管理/グループ化することです

  • Rundeck は選択したノードに対してアドホックコマンドを実行することができます。
  • Rundeck はワークフローを定義して、選択したノードで実行することができます。
  • Rundeck は Jenkins のような CI ツールと統合してデプロイ作業を行うことが可能です。また、デプロイ作業を行うために ansible-playbook を実行する Jenkins ジョブを定義することもできます。

異なる点

  • Rundeck には Ansible にはない Job という概念があります。

  • Rundeckにはジョブスケジューラがありますが、AnsibleではJenkinsやCronタスクといった他のツールでしか実現できません。

  • RundeckはデフォルトでWeb UIを無料で提供していますが、Ansible Towerは有料です。

Ansible と Rundeck はどちらも設定/管理/デプロイメント作業に使用できるようですが、おそらく異なる方法でしょう。そこで質問です。

  • この2つのツールは補完的なものですか、それとも異なる目的のために設計されたものですか?もし補完的なツールなら、なぜAnsiblはChef/Puppet/Slatなどのツールとしか比較されず、Rundeckとは比較されないのでしょうか?もしそうでないなら、なぜ似たような機能をたくさん持っているのですか?
  • 継続的デリバリーパイプラインを構築するために、CIにJenkinsを既に使っているのですが、デプロイにどのツール(Ansible/Rundeck)を使うのが良いのでしょうか?
  • 併用可能な場合、どのようなベストプラクティスがありますか?

ご意見、ご感想、ご経験の共有などありましたら、ぜひお願いします。

解決方法は?

TL;DR - CI/CDのためのJenkinsのあなたの環境を考えると、私はAnsibleだけを使用することをお勧めします。

Ansible と Rundeck の間にはかなりのクロスオーバーがあることがお分かりいただけたと思いますが、それぞれの製品がどこにフォーカスしているか、そのスタイルと使い方に集中するのがベストでしょう。

<強い フォーカス

Rundeck の焦点は、シスアドが他のシスアドや、潜在的にはあまり技術的でないシスアドの人たちもアクセスできる(ウェブベースの)セルフサービスポータルを構築できるようにすることだと思います。Rundeckのウェブサイトには、以下のように書かれています。 運用手順をセルフサービスの仕事にする。必要なコントロールと可視性を安全に他の人に与えることができます。 となります。Rundeckはまた、より「中央集権的」な世界観を持っていると感じます。ジョブをデータベースにロードすると、そこにジョブが格納されます。

私にとっては、Ansible はデボップスのためのものです。つまり、(自分で作った)アプリケーションのデプロイメントを、再現性の高い方法で構築し、自動化するためのものです。Ansibleは、自社製品を構築するソフトウェア開発会社によりフォーカスされていると言えるでしょう。Ansibleの「プレイブック」はテキストファイルなので、通常はソースコントロールに保存され、プレイブックがデプロイするアプリと一緒に保存されます。

雇用創出への注力

Rundeck では、通常、Web UI を使ってジョブを作成します。

Ansibleでは、テキストエディタでタスク/プレイブックをファイルとして作成します。

オペレーション/タスク/ジョブスタイル

Rundeck のデフォルトは命令型です - あなたが書いたスクリプトが (SSH 経由で) 実行されます。

Ansible は命令型 (bash 文を実行する) ですが、宣言型でもあります。 service タスクで実行されていることを確認します。これは、PuppetやChefのような他の構成管理ツールに近いものです。

複雑なジョブ/スクリプト

Rundeck にはジョブのワークフローのステップを定義することで別のジョブを実行する機能がありますが、経験上、これはトップレベルの機能ではなく、付け足しのように感じられます。

Ansibleは複雑な操作を作成するために設計されており、実行、包含、その他はトップレベルの機能です。

実行方法

Rundeck はサーバーアプリです。もしどこか他の場所(CI など)からジョブを実行したい場合は、cli に呼び出すか API 呼び出しをする必要があります。

ストレートなAnsibleはコマンドラインです。

プロビソ

Rundeckのクロスオーバーと全体的な柔軟性により Ansibleでは、上記のすべてをそれぞれで実現することができます。Rundeck のジョブを YAML や XML にエクスポートしてソースコントロールにチェックすることで、バージョン管理を実現できます。Ansible で Tower を使って Web UI を手に入れることができる。などなど。

ご質問をお聞かせください。

補完するツールは?

Ansibleですべてのデプロイ作業を行い、Rundeckで単発のアドホックなジョブを実行するといった具合です。

しかし、私はそれを想像することはできても、出発点としてそれを推奨することはできません。私なら、Ansibleだけで始めて、どこまでできるかを確認します。Rundeck を使うのは、本当にそうしたいと思ったときだけです。 本当に を実行する必要があります。

CI/CD

Ansible:あなたの環境は、独自のアプリをデプロイしているソフトウェアハウスのようなものですね。特に継続的デリバリーを行う場合は)反復可能であるべきなので、デプロイスクリプトをソース管理下に置きたいと思うでしょう。Ansible は単なるテキストファイルなので、シンプルであることが望まれます。また、開発者が自分のマシンで実行できるようにすることを望みますが、Ansible は分散化されています。

併用する(CI/CDの場合)

AnsibleからRundeckを呼び出すのは、ダメです。もちろん、可能でしょうが、良い理由が思いつかないので苦労しています。少なくとも、ある特定のアプリやフレームワークに特化した理由ではないです。

RundeckからAnsibleを呼び出すこと、ですね。誰かが最初にAnsibleで再現可能なアドホックコマンドを構築することを想定しています。それから、コマンドラインなしでこれを呼び出せるようにしたいという需要が少し出てくるかもしれません(例えば、非技術系ユーザー)。しかし、繰り返しになりますが、これはあなたの環境に特化したものです。