Kuroko2の紹介
Kuroko2はウェブベースのジョブスケジューラーでありワークフローエンジンです。Ruby on Railsで開発されています。オープンソースで提供されており、ライセンスはMITです。クックパッド社が開発を行っています。
Kuroko2の主な機能と特徴
主要な機能を列挙します。
- ジョブ編集と操作
- ジョブスケジューラー(cron形式利用可)
- ジョブ実行履歴の管理
- ジョブ実行状況タイムライン
- Google認証機能
- ワークフロー制御機能
- カスタムタスク
- 通知機能
Kuroko2はRubyでカスタムタスクを記述できます。また、ジョブが失敗した場合に次のジョブの実行をしない等のフェイルセーフなワークフロー制御をジョブ単位で選択できます。
Kuroko2のインストールする手順
Ubuntu 16.04にkuroko2をインストールする手順を説明します。
Ruby2.2以上、Rails5.0.0.1以上、MySQL 5.6以上に依存していますので、まずこれらを順にインストールします。
Ruby のインストール
rubyが依存するライブラリ一式をインストールします。
$ sudo apt-get update $ sudo apt-get install git-core curl zlib1g-dev build-essential libssl-dev libreadline-dev libyaml-dev libsqlite3-dev sqlite3 libxml2-dev libxslt1-dev libcurl4-openssl-dev python-software-properties libffi-dev nodejs
rubyのバージョンを指定できるようrenvを利用します。
$ git clone https://github.com/rbenv/rbenv.git ~/.rbenv $ echo 'export PATH="$HOME/.rbenv/bin:$PATH"' >> ~/.bashrc $ echo 'eval "$(rbenv init -)"' >> ~/.bashrc $ exec $SHELL $ git clone https://github.com/rbenv/ruby-build.git ~/.rbenv/plugins/ruby-build $ echo 'export PATH="$HOME/.rbenv/plugins/ruby-build/bin:$PATH"' >> ~/.bashrc $ exec $SHELL
rbenv -vでrbenvが利用できる事を確認します。
$ rbenv -v
2.2系でインストール可能なバージョンを一覧表示します。2017年5月時点では2.2.7が最新です。
$ rbenv install 2.2
2.2.7をインストールします。
$ rbenv install 2.2.7
rubyコマンドをグローバルで利用できるようにします。
$ rbenv global 2.2.7
rubyコマンドを実行できるか確認します。
$ ruby -v
Railsのインストール
Rubyのインストールできれば次にRails 5.0.1をバージョン指定してインストールします。
$ gem install rails -v 5.0.1
バージョンを表示してインストールに成功したかを確認します。
$ rails -v
MySQLのインストール
MySQLサーバーと依存するライブラリ一式をインストールします。ここでは仮でrootユーザーのパスワードをrootにします。
$ sudo apt-get install mysql-server mysql-client libmysqlclient-dev
ここではMySQLデータベースのユーザーを作成しません。rootユーザーで動作させますので、そのまま本稼働させないよう注意して下さい。
kuroko2の設置
kuroko2が提供しているテンプレートを元にRailsアプリケーションを初期化します。
$ rails new my_kuroko2 --database=mysql --skip-turbolinks --skip-javascript -m https://raw.githubusercontent.com/cookpad/kuroko2/master/app_template.rb
作られたフォルダに移動します。
$ cd my_kuroko2/
MySQLの接続情報を編集します。usernameとpasswordをrootに変更します。
$ vi config/database.yml
次にデータベースの初期化を行います。
$ rails db:migrate
Google認証手順
Google認証のみサポートしているためGoogleアカウントを利用して認証します。まずGoogle APIsに接続してGoogle+APIを有効にします。
OAuth同意画面の情報を入力します。
次に認証情報を作成します。認証情報を作成のプルダウンから「OAuthクライアントID」を選択します。
クライアントIDを作成します。アプリケーションの種類にウェブアプリケーションを指定し、OAuthでコールバックされるURLを指定して「作成」ボタンを押します。
コールバックされるURLのパス部分には/auth/google_oauth2/callbackを指定します。
クライアントIDとシークレットが発行されました。この2つの値を利用します。
Google認証の環境変数を追加
以下のように環境変数に指定します。今回はGOOGLE_HOSTED_DOMAINに値を指定しません。
$ vi .env GOOGLE_CLIENT_ID=367047048452-rn6dhb2qohppu682va54j5dhi0fve0u9.apps.googleusercontent.com GOOGLE_CLIENT_SECRET=yarsuBz6SNF3vM42sLmYGG13 #GOOGLE_HOSTED_DOMAIN=localhost
kuroko2サーバーを起動
これで準備が整いました。Kuroko2のサーバーを起動します。http://localhost:3000でアクセスできるようになります。
$ rails server
http://localhost:3000に接続するとGoogle認証画面に進みます。利用しているGoogleアカウントの認証方法に従ってアプリケーション連携が行われます。
認証に成功するとダッシュボードが表示されます。
もし「You have to sign in with Google account of localhost.」と表示された場合は認証情報に失敗しています。
表示されているログを確認するか、設定したOAuthの内容を確認してエラーを解消して下さい。または許可済みのアプリケーション一覧から今回許可したアプリケーションを削除して、再度認証を行うと成功するかも知れません。
https://myaccount.google.com/permissions
kuroko2の動作を試す
インストールして設置と認証に成功しました。次に動作を試します。左メニューバーを開いてジョブの「Create New」を押します。
ジョブ作成フォームでNameにPing testと入力します。
その下にあるscriptにexecute: ping yahoo.co.jpと入力し、ページ最下部にある「Create Job definition」ボタンを押します。
無事にジョブが作られました。
ジョブ詳細の下部にあるJob InstancesからLunchボタンを押すとscriptの詳細が開きますのでダイアログ内のLunchボタンを押します。
ジョブの実行詳細ページが開きました、がWORKINGのまま実行されません。
バックグラウンドでジョブを実行するサーバーを起動します。ワークフローとコマンドを実行するサーバーの2つを起動します。
$ ./bin/rails runner Kuroko2::Servers::WorkflowProcessor.new.run $ ./bin/rails runner Kuroko2::Servers::CommandExecutor.new.run
ワーカーの一覧を見るとワーカーが起動しているのを確認できます。上記のコマンドを実行していない時は0件でした。
ジョブの実行に成功しました。
実行結果のログを見るとpingが5回実行されて成功したログが残っています。
まとめ
Railsアプリケーションで動くジョブスケジューラーです。Rails上で動作し、Rubyでカスタムタスクを記述できるなどRubyとの親和性が高くなっています。
類似の成熟したオープンソースが多くありますので、ジョブスケジューラー入れ替え時の候補に挙げられても採用されるまでには少し時間が必要かも知れません。
Google認証を前提としている設計は分かりやすく親切ですが、他の認証方法を選択できない不便さがあります。
安全にジョブを実行できるワークフローとして、とても使いやすいように感じました。
参考情報
https://github.com/cookpad/kuroko2
https://github.com/cookpad/kuroko2/blob/master/docs/index.md
http://techlife.cookpad.com/entry/2015/12/07/195732
本ブログは、Git / Subversionのクラウド型ホスティングサービス「tracpath(トラックパス)」を提供している株式会社オープングルーヴが運営しています。
エンタープライズ向け Git / Subversion 導入や DevOps による開発の効率化を検討している法人様必見!
「tracpath(トラックパス)」は、企業内の情報システム部門や、ソフトウェア開発・アプリケーション開発チームに対して、開発の効率化を支援し、品質向上を実現します。
さらに、システム運用の効率化・自動化支援サービスも提供しています。
”つくる情熱を支えるサービス”を提供し、まるで専属のインフラエンジニアのように、あなたのチームを支えていきます。
No Comments