以前、Chef を使っていた時に Chef を実行し、Serverspec で設定や状態をテストする、というワークフローを Jenkins で実装しました。テスト結果を JUnit 形式で出力することでテスト結果の推移をグラフ表示したり、エラー内容をドリルダウンして確認できたりして、大変重宝しました。
現在は Chef から Ansible に乗り換えているのですが、 Ansible の実行環境として Ansible Tower (または AWX ) を検討しています。
Ansible Tower では Serverspec の実行はできないと思うので、 Jenkins と比較して優位性を見いだせずにいます。
優位性はどこにあるのでしょうか。また、 Ansible を実行した後のテストはどのようにしたらよいでしょうか。事例をご紹介いただけたら幸いです。
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
回答2件
0
ベストアンサー
Ansible Tower では Serverspec の実行はできないと思うので、 Jenkins と比較して優位性を見いだせずにいます。
Ansible TowerとJenkinsは用途が異なるので、そもそも論もあります。
Ansible TowerはAnsibleの実行、管理するためのGUI環境です。
Ansibleは様々な用途で使うことができますが、構成管理でよく使われます。
汎用性が非常に高く、CLI、APIで実行できるものなら基本的になんでもAnsible経由で実行できます。なので、Serverspecも実行できると思います。
また、最大の特徴として、「冪等性」が担保されていること。
冪等性とはすでに期待した状態になっていたら、操作はしないということです。
一方Jenkinsは広い意味でいうとジョブ管理ツールです。
プラグインを追加することでGUIであれこれの設定でき、すぐに動かせる。(優位性)
ただし、それらのGUIの設定を簡単にコード化できない(今はできるかはわからないが)ので、pipelineで設定を定義し、コード管理したほうがよいでしょう。もちろんJenkinsのshell実行でAnsibleのコードを実行することもできます。
一気に書くのもあれなので、ひとまずこんな感じでいかがでしょうか。
投稿2021/06/19 15:31
総合スコア1051
0
質問要旨を以下と私は考えて回答します。
これまでの運用が「Jenkinsで、Chef を実行 → Serverspec で設定や状態をテスト」
とした場合に、Ansible・Towerを使った場合にこれまでの運用と比較したい
ただ、comefigoさんが書いたとおり、
Ansible TowerとJenkinsは用途が異なるので、そもそも論もあります。
なのかなぁとも考えます。
ただ、実現できることベースで考えた場合、
Ansible・Towerはどちらかと言うと「Chefを実行」の部分になります。
「Serverspec で設定や状態をテスト」については、どう運用するかは、
色々パターンがあるんじゃないかと考えます(私はServerspecを使わないので詳しくは分かりません)。
例えば、Ansibleを前提とした場合、各パーツ(NginxやMySQLをインストールする等)はroleとして、moleculeを使ってテストをすることが多いです。
また、moleculeを使うことで、Ansibleをサーバに適用する前に、VMやDockerを使ってroleのテストのみを行うことが可能です。
なので、AnsibleのPlaybookをGitHubなどで管理しておいて、roleを変更した際に、
Jenkins Pipelineをつかってmoleculeでテストするなんて事もできます。
MoleculeをJenkins Pipelineつかって実行する例
https://molecule.readthedocs.io/en/latest/ci.html#jenkins-pipeline
テスト結果を JUnit 形式で出力することでテスト結果の推移をグラフ表示したり、エラー内容をドリルダウンして確認できたりして、大変重宝しました。
この辺については、roleのテスト部分で同様に作り込むとかすると良いと考えます(JUnitを使うとかじゃなくて別の何かを用意するとか)。
この場合、これまで作ってきた Serverspec の資産が使えていないです。
ただ、事前にrole単位でテストしているので問題無いって発想です。
しかし、本番に適用したものをどうしてもテストしたいということであれば、
以下のようにすると、「適用したサーバが想定通りに適用出来てる事を確認する」という観点において、同様なことは出来るのではないでしょうか。
- Jenkinsのジョブを用意してServerspecを実行出来るようにしておく
- Ansibleで、そのジョブをAPI経由で実行出来るようroleを作成
- Towerのワークフローにて、Ansibleを適用した最後に、2を実行する
最後にAnsibleやTowerを使うメリットを挙げるとすると、
- サーバに適用する前に、Molecule使ってパーツ(=role)単位にテストが可能
- 冪等性を担保出来るように実装出来ること
- サーバの構成管理に特化した部分をJenkinsで頑張らなくてもAnsible・Tower側のUpdateで最適化される(餅は餅屋)
→Towerのワークフローで柔軟に構成したり実行権限を制御する
→実行結果を後から振り返りやすい
投稿2021/06/20 00:02
総合スコア26
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/06/20 07:26
2021/06/20 11:40
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/06/20 01:35
2021/06/20 02:57
2021/06/20 05:21
2021/06/20 07:26
2021/06/20 11:40