すえひろがりっっっっ! このページをアンテナに追加 RSSフィード

2015-06-03

管理者権限でログインしているかどうかをひと目で分かるようにする Redmine プラグインを作った

Redmine管理者と一般ユーザを分けていると、よくある失敗として、

管理者権限でログインしたままでいることを忘れたままチケットを作成・更新してしまう、

ということがあります。

そうすると、チケットの更新者が自分じゃなくて管理者ユーザになってしまって悲しい思いをします。

そういった事故を減らすために管理者ログインしているかどうかをテーマでひと目で分かるようにするプラグインを作りました。

環境

Redmine 3.0.0

ソースコード

https://github.com/suer/redmine_admin_class

機能

管理者ユーザでログインしている時のみ <body> タグの class に "admin" を追加します。

この class を利用したテーマを自作することで管理者と一般ユーザの画面の見た目を切り替えることができるようになります。

利用手順

テーマを作成します。

例えば、public/themes/admin/stylesheets/application.css を以下のように作成します。

@import url(../../../stylesheets/application.css);
body.admin #top-menu { background-color: #f0908d; }
body.admin #header { background-color: #f2a0a1; }

管理画面で作成したテーマを指定します。

f:id:suer:20150603232342p:image:w400


この例の場合は、一般ユーザでログインした場合は通常の画面

f:id:suer:20150603232344p:image:w400

管理者ログインした場合は別の見た目になります。

f:id:suer:20150603232345p:image:w400

これで誤ったアカウントでチケットを更新する事故をかなり防げるようになります。

まとめ

2013-05-30

Redmine・Gitlab・Jenkins のログインパスワードの管理が大変になったので OAuth 化した

開発環境として Gitlab、Jenkins、Redmine をセットで使っているのですが、それぞれにパスワードの設定が必要となって管理が面倒です。

アカウントを一つに統合したい。ということでやってみました。

環境

  • Redmine 2.3.0
  • Jenkins 1.499
  • Gitlab 5.2

方針

RedmineプラグインOAuth プロバイダの機能を追加し、Redmineアカウントで Jenkins と Gitlab へログインできるようにします。

RedmineOAuth プロバイダの機能をつける

やりたいことに近いプラグインがあったのですが、Rails3 以降の Redmine に対応していなかったので、fork して、ついでに日本語化しておきました。

http://redmine.root.url/oauth_clients/ にアクセスすると OAuth の consumer key を発行できるようになります。

f:id:suer:20130530210412p:image

f:id:suer:20130530213320p:image


Jenkins の認証を OAuth に対応する

@mallowlabs さんがあっさり作ってくれました。

Jenkins へログインしようとすると RedmineOAuthリダイレクトさるようになります。

f:id:suer:20130530213038p:image

Gitlab の認証を OAuth に対応する

Gitlab は Omniauth でのログインに対応しているので、RedmineOAuth を使って認証するような Strategy を書いて config/initializers に突っ込みました。

こんなふうに書いています。


module OmniAuth
  module Strategies
    class Redmine < OmniAuth::Strategies::OAuth
      option :client_options, {
        :authorize_url => 'https://dev.example.com/redmine/oauth/authorize',
        :request_token_url => 'https://dev.example.com/redmine/oauth/request_token',
        :access_token_url => 'https://dev.example.com/redmine/oauth/access_token'
      }

      uid { raw_info['user']['id'] }

      info do
        {
          'nickname' => raw_info['user']['mail'],
          'email' => raw_info['user']['mail'],
          'name' => "#{raw_info['user']['lastname']} #{raw_info['user']['firstname']}"
        }
      end

      def raw_info
        @raw_info ||= MultiJson.decode(access_token.get("https://dev.example.com/redmine/oauth/user_info.json").body)
      end
    end
  end
end

Omniauth の Strategy の書き方はこちら。

さらに、assets/authbuttons/redmine_32.png に適当なアイコンを置いておくと、こんなふうにログインフォームの下に RedmineOAuth へのリンクが設置されます。

f:id:suer:20130530210410p:image

まとめ

以上で Redmineアカウントパスワードを集約できました。

シングルサインオンとまではいかないまでも、一度 Redmineログインしてしまえば数クリックでそれぞれの環境にログインできるのでとても快適です。

2012-12-04

複数の Jenkins と Travis のビルドの失敗が最速で分かる Stoplight を Heroku にデプロイ

f:id:suer:20121204224733j:image:w400

複数のビルドサーバを一つのUIで確認できるStoplight - cynipeと読む を見て「これだっ!」と、この前まで隣だった人が叫んでいたので Heroku にデプロイしてみました。

iPad で表示したままにしておいて、チームのメンバが見えるところにおいておくと XFD っぽくていい感じです。


前提

以下が準備済みである必要があります。

  • Git がインストールされている
  • Heroku にアカウントをもっている
  • Heroku コマンドがインストールされている
  • Heroku のアカウントに公開鍵が登録されている

手順

1. stoplight を clone する

$ git clone git://github.com/customink/stoplight.git
$ cd stoplight

2. ログ出力パスの変更

Heroku は tmp/ ディレクトリ以外のファイル書き込みを禁止しているのですが、ログ出力で log/ ディレクトリに書き込みをしようとしているのでこのままでは実行時にエラーを吐いてしまします。

$ git grep application.log
config/boot.rb:$logger = ::Logger.new('log/application.log')
lib/stoplight/providers/provider.rb:  $logger = Logger.new('log/application.log')

そこでそれぞれのログ出力パスを tmp/ ディレクトリ以下に変更します。


$ git diff 
diff --git a/config/boot.rb b/config/boot.rb
index 036429e..2db6b98 100644
--- a/config/boot.rb
+++ b/config/boot.rb
@@ -16,5 +16,5 @@ require 'application'
 
 require 'logger'
 class ::Logger; alias_method :write, :<<; end
-$logger = ::Logger.new('log/application.log')
+$logger = ::Logger.new('tmp/application.log')
 use Rack::CommonLogger, $logger
diff --git a/lib/stoplight/providers/provider.rb b/lib/stoplight/providers/provider.rb
index 9bcadd9..77b7f44 100644
--- a/lib/stoplight/providers/provider.rb
+++ b/lib/stoplight/providers/provider.rb
@@ -7,7 +7,7 @@ require 'uri'
 
 unless $logger
   require 'logger'
-  $logger = Logger.new('log/application.log')
+  $logger = Logger.new('tmp/application.log')
 end
 
 # Provider is an abstract class that all providers inherit from. It requires that a specified format be returned. This way, stoplight

変更を commit しておきます。

$ git commit -am "change log file path"

3. 設定

設定は servers.yml に記載します。

example ファイルがあるので、これをコピーして編集します。

$ cp config/servers.yml.example config/servers.yml

以下のような内容を追記します。編集内容は 本家 README を参考にしましょう。

-
  type: 'jenkins'
  url: JenkinsのURL
-
  type: 'travis'
  url: http://travis-ci.org
  owner_name: ユーザ名

config/servers.yml は .gitignore で無視されるので、無視されないようにします.

$ git diff
diff --git a/.gitignore b/.gitignore
index e9461a4..1496818 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,7 +1,6 @@
 .bundle
 .rvmrc
 .sass-cache
-config/servers.yml
 log/*.log
 tmp
 vendor/ruby

設定を commit します。

$ git add .
$ git commit -a -m "settings"

4. Procfile を消す

Procfile の内容が実行されますが Heroku では失敗します。

運用環境では必要無いので消してしまいましょう。

$ rm Procfile
$ git commit -a -m "remove Procfile"

5. デプロイ

いよいよデプロイします。heroku create 時に URL が表示されるのでメモしておきましょう。

(忘れた場合でも Heroku にログインすれば確認できます)

$ heroku create
Creating stark-badlands-1640... done, stack is cedar
http://stark-badlands-1640.herokuapp.com/ | git@heroku.com:stark-badlands-1640.git
Git remote heroku added

$ git push heroku master

6. 確認する

デプロイ時に表示された URL に index.html をつけてアクセスします。

今回の場合なら http://stark-badlands-1640.herokuapp.com/index.html となります。

f:id:suer:20121204221700p:image:w300

まとめ

実際は試行錯誤しましたが、まとめてみると簡単にデプロイできるようになりました。

ビルドサーバが VPS などグローバルにアクセスできるところにあるのであれば、Heroku へのデプロイを検討してみてもいいかもしれません。

2012-08-27

通知プラットフォーム Keima を Node Ninja BETA へ配備する手順

開発者のためのチャットシステム AsakusaSatellite で利用する通知基盤として Keima を開発したのですが、どこに載せるか悩んでいたところ、国内の Node.js 専用のクラウドホスティングサービスとして Node Ninja で、βバージョン期間中は、無料で利用できるとのことなのでデプロイしてみました。

何箇所かハマったので備忘録をとっておきます。


バージョン

Keima 237b4e3f15

Node Ninja local:admin:nin-tpl:0.0.73


Node Ninja の SSH 鍵の設定

サーバにログインしたり、 git でアクセスしたりするために SSH の公開鍵を登録します。

f:id:suer:20120826235453p:image:w400

ガイダンスでは、以下のように node ユーザでログインできる、と書いてありますが、

$ ssh node@<Node Ninjaのホスト>

実は root と admin も同じ鍵でログインできます。

$ ssh root@<Node Ninjaのホスト>
$ ssh admin@<Node Ninjaのホスト>

特に、node ユーザではできないことがあるので、これを知らないと詰みます。

Redis の起動

http://node-ninja.com/archives/159 の手順でOK。といきたいところですが、、、

$ svcadm enable redis

で有効化して

$ svcs -a | grep redis

で確認すると

maintenance     9:50:48 svc:/application/redis:default

http://node-ninja.com/archives/157 によると maintenance は「問題が発生しているため正常に稼働」してない状態らしいので、この方法は諦めます。

/opt/local/etc/redis.conf に redis の設定ファイルがあるので適宜修正します。

特に

daemonize yes   # デーモン化の設定。yes ならデーモンとして起動する
port 6379            # redis の起動設定

のようにします。(デフォルトでこのように設定されていました)

こうしておけば root でログインして

# redis-server /opt/local/etc/redis.conf

で正常に起動します。


MongoDB の設定

Node Ninja で MongoDB も利用できますが、Redis と MongoDB を同時に使用するとある一定のアクセスでメモリが枯渇するようです。

ここでは MongoHQ を利用することにします。

MongoHQ にサインアップして、keimadb という名前で DB を作成し、Database Info タブの Mongo URI を控えておきます。(<user> と <password> は Database Users タブでユーザを作成して埋めます。)

f:id:suer:20120826235452p:image:w500

keima の配備

まず github から keima を clone します。

$ git clone git://github.com/codefirst/keima.git

新しいブランチで config.json を編集し、node-ninja のリポジトリへ push します。

$ git branch -b node-ninja
$ cd keima
$ vim config.json

内容は

{
  "version": "v0.6.18",
  "npm": true,
  "main": "server.js",
  "args": [],
  "envs": { "NODE_ENV" : "produciton", "MONGO_URL": "mongohqの設定でメモったURL" }
}
$ git commit -am “node-ninja settings”
$ git remote add node-ninja node@<Node Ninjaのホスト>:repo
$ git push node-ninja node-ninja:master

サイトにアクセスして動作を確認します。

f:id:suer:20120826235454p:image

まとめ

Node Ninja は BETA だからか、ちょっとドキュメントが少ない感じがしますが、サポートの回答が早いし、ドキュメントが日本語なのはとてもよいです。

Nodejitsu 等の他の PaaS との性能面での比較などはできてませんが、機会があれば今後やっていきたいと思います。

2011-12-24

アドレスバーから素早くチケットを検索する Redmine My Search Plugin を公開しました

# この記事は名古屋クリスマソン2011で書かれました

f:id:suer:20111224202343p:image



Redmine でチケットを検索する場合

  • ログイン
  • プロジェクトを選択
  • チケット一覧を表示、チケットを検索
  • チケットを選択

とやたら手数がかかります。

この手数を大幅に削減するプラグインを作成しました。

機能

Google Chrome で

r <Tab> 検索キーワード

と打つことでチケットのタイトルと本文とURLから検索します。


環境

Redmine 1.2 以降

リポジトリ

https://github.com/suer/redmine_my_search

同梱している Chrome 拡張は、Myはてブサーチをアドレスバーから検索する my-bookmark-seach.crx を改造する形で取り込ませてもらっています。

お探しのページは見つかりませんでした。 - はてなブログ

ライセンスが明記されていないため、READMEに記載しました。

インストール

$ cd $RAILS_ROOT/vender/plugins

$ git clone git://github.com/suer/redmine_my_search.git

設定

http://redmine.root.url/my_search/

にアクセスすると設定方法が表示されます。

まとめ

かなり手数が減ったはずなので Redmine の使いやすさが向上すると思います。

チケット番号が分かっていれば、番号を打つだけでチケットに最速でアクセスできたりするのが地味にうれしかったりします。

ぜひお試しあれ。