3 回答
- 321
わたしはシングル・サインオン・サーバAtlassian Crowdサーバをセットアップする作業をコードで自動化することに成功しました。
AWSにEC2インスタンスを作り、Apacheをインストールしてproxyとし、Atlassian Crowdをインストールする。ほとんどすべてをbashスクリプトで書きました。bashでAWS CLI(http://aws.amazon.com/jp/cli/)を呼び出してAWSリソースを操作しました。Apacheはyumコマンドでインストール。Crowdはwgetコマンドでzipファイルをダウンロードしてunzipしてmkdirしたディレクトリにcpし、crowdをサービスとして登録して再起動して立ち上げて・・これらをぜんぶbashで書きました。高尚なプロビジョニングツール(ChefとかPackerとかCloudFormationとか)も勉強したがよく理解できなかったので、けっきょく素朴なシェルスクリプトでたくさんコードを書きました。
さて、Crowdが立ち上がったあとWebブラウザでセットアップウィザードのGUIを人手で操作して設定しなければなりません。Crowdにapplicationを登録し、remote addressを登録し、別のところで動いているCrowdサーバからbackupXMLファイルを取得してもってきて、新しいCrowdをrestoreして・・・・これらGUI操作はシェルではできません。Webブラウザを操作することを避けられない。そこで下記のツール群を組み合わせて自動化しました。
Selenium WebDriver http://www.seleniumhq.org/projects/webdriver/
Spock https://code.google.com/p/spock/
Geb http://www.gebish.org/manual/0.10.0/
Gradle https://gradle.org/
Groovy http://www.groovy-lang.org/
Webアプリケーションのテストをするツールとして有名なSelenium WebDriverを使ってCrowdのWeb GUIをテストするかのようなコードを開発しました。Crowdのセットアップ・ウィザードを対象とするテストコードを書きました。テストコードを実行するとコードがWebブラウザを起動しGUIを操作してデータを投入しボタンをクリックし、リンクをクリックし次の画面に遷移させ、さらにデータをINPUしてボタンをクリックし・・・・・・・・・・ということをコードが実行します。GUIを操作した結果をチェックすることもついでにやります。テストコードが100%パスすると、テストの副作用としてターゲットであるCrowdの設定が完了しているという具合になります。
AWSのリソースをプロビジョンするところはともかく、Crowdに設定を要れるためだけでもたくさんのコードを書きました。ここで全部を説明することはちょっとできません。上記のツール群をつかってCrowdのセットアップを自動化しようと決意してから4か月ぐらいもかかりました。小さな問題や疑問を解消しなければならなかったし、他の仕事もしながらだったので、とても時間がかかりました。かつGradleやWebDriverなど基盤的なツールを習得するのに事前に何か月もかかっています。長い道のりでした、正直いって。もうハードルをクリアしてノウハウを獲得しましたので、Crowdにかぎらず他のサーバプロダクトについても設定作業を自動化する方法を見出したとおもっています。
- 伊藤看寿
素晴らしい取り組みだと思います。 わたしもVagrant+bashでサービス立ち上げまではやりますが、セットアップウィザードの自動化までは足を踏み入れておりません(Ohsakiさんのコメントにある通り、ウィザードの仕様がころころ変わるためです)。 ですので、よくあるキックスタートファイルみたいな仕組みがあると良いなと思った次第です。 Atlassian SDK で run-standalone するとセットアップウィザード無しでいけるので、このあたりと組み合わせてなんとかならないか思案中です。
- Kengo Ohsaki
素晴らしいです! > 自分を陥れるような仕様変更があったとしても、それにきづくことさえできればなんとか対処できると考えています。 まさしく、その通りだと思います。
コメントを追加... - 210
本気でそう思います...
ただ、ウィザードの形式がVersionによって激しく変わるので....GUIでゴニョゴニョするのは諦める(無駄骨になるので...)方が無難ですかね。
予め初期設定のXMLファイルとかプロパティファイルを用意して、起動時にパラメータ指定することでセットアップリストアとかが出来ればいいんですけどね...
https://jira.atlassian.com/browse/CWD-4435
https://jira.atlassian.com/browse/CONF-5108
似た要望かと思いますが...
現状できないですけど。
https://confluence.atlassian.com/display/DOC/Configuring+System+Properties
https://confluence.atlassian.com/display/JIRA/Recognized+System+Properties+for+JIRA
- 伊藤看寿
わたしもGUIをゴニョゴニョする気はおきません・・・。 たぶんこの要望もそうですよね。JIRAはないのかな。 https://jira.atlassian.com/browse/CONF-34803
コメントを追加... - 10-1
>ウィザードの仕様がころころ変わるためです
わたしが採用したアプローチですとウィザードの仕様が変化したことにきづいてそれに対処できるようなコードを書くことができます。「自動的に対処できる」じゃないです。ウィザードの画面がじぶんの予期している形であるかどうかをassertし、もしそうでなかったらFAILするようなテストコードを書きます。Gebを使うとそういうassertが手短に書けるのでとても便利。
サーバ製品のウィザードの仕様がバージョンアップとともに変更されるのはいたしかたない。自分を陥れるような仕様変更があったとしても、それにきづくことさえできればなんとか対処できると考えています。
コメントを追加...
プロビジョニングツールでインストールや初期設定を自動化したいと考えています。
セットアップウィザードも定義ファイルを読ませるような形で自動化したいのですが、何か良いアイデアはないでしょうか。