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

2017-08-28

Redmine Bitbucket Hook プラグインを fork して最新の Redmine で使えるようにした

Bitbucket に push したコミットRedmineリポジトリに取り込むプラグイン redmine_bitbucketgit_hook が Rails4 ベースの Redmine と最新の Bitbucket に対応していなかったので対応した。

リポジトリ

https://github.com/suer/redmine_bitbucketgit_hook

変更点

Rails 4 に対応

Rails 4 ベースの Redmine で動くように変更した。

Bitbucket の Webhook 設定に対応

Bitbucket では従来 Services という設定で他のアプリとの連携を行っていたが、ある時期から Webhooks という設定に変更になった。

この新しい設定に対応した。

git コマンドを Redmine の設定から取得できるように変更

もとの redmine_bitbucketgit_hook では git のコマンドにパスが通っている必要があった。

この修正では config/configuration.yml で git のパスが設定されている場合に、その設定を使うように変更した。

インストール

1. 以下を実行

$ cd $RAILS_ROOT/plugins
$ git clone https://github.com/suer/redmine_bitbucketgit_hook.git
$ bundle install

上記を実行して Redmine再起動

使い方

管理 > プラグイン > redmine_bitbucketgit_hook の「設定」で Bitbucket から clone する先のディレクトリを指定する。(1度だけ)

f:id:suer:20170829005407p:image

リポジトリの設定で Bitbucketリポジトリ URL を指定する。

f:id:suer:20170829005402p:image

作成ボタンをクリックすると、またリポジトリの設定画面が表示されるが、ローカルのディレクトリパスに変換されているので、もう一度このまま作成ボタンをクリックする。

f:id:suer:20170829005357p:image

Bitbucket 側では Webhooks の設定を行う。

URL には https://{RedmineRoot}/bitbucketgit_hook を指定する

f:id:suer:20170829005353p:image

以上の設定により、

  1. Bitbucket に push
  2. Bitbucket が https://{RedmineRoot}/bitbucketgit_hook にアクセス
  3. RedmineBitbucket からもらった JSON を見て Bitbucket から fetch

という動きとなり、自動的に同期される。

2013-07-06

Gitlab, AsakusaSatellite などの開発者向け Rails アプリを Redmine で OAuth 認証するための Omniauth プラグイン作った

Redmine・Gitlab・Jenkins のログインパスワードの管理が大変になったので OAuth 化した - すえひろがりっっっっ!RedmineOAuth プロバイダにできました。

Rails 製のクライアントアプリケーション側は Omniauth Strategy を都度 initializers 以下に設置するようにしていましたが、各アプリケーションに対して同じような作業をするのは DRY じゃないのでライブラリ化しました。

omniauth-redmine https://github.com/suer/omniauth-redmine

環境

ruby 1.9 以降

rails 3.x 以降

セットアップ

Gemfile に以下を追記します。

gem 'omniauth-redmine', :github => 'suer/omniauth-redmine'

設定

devise を利用している場合は RAILS_ROOT/config/initializers/devise.rb に

config.omniauth :redmine, "consumer key", "consumer secret", :redmine_base_url => "http://redmine.base.url/"

のように追記します。 :redmine_base_url オプションは必須項目です。

omniauth を生で扱ってる場合は RAILS_ROOT/config/initializers/omniauth.rb として以下の内容を記述します。

Rails.application.config.middleware.use OmniAuth::Builder do
  provider :redmine, "consumer key", "consumer secret", :redmine_base_url => "http://redmine.base.url/"
end

まとめ

これで Rails 製のアプリケーションへの組み込みの敷居が下がったと思います。

以下のような開発者向けアプリケーションアカウントを共通化できるかと思います。

2011-12-21

Visual Studio で作成したセットアッププロジェクトで CI するためのコマンド

この記事は C# Advent Calendar 2011 21日目として書かれました。

前日は id:ZOETROPE さんで Reactive Extensionsでセンサプログラミング でした。



今年になって C# で真面目にプログラムを書き始めたのですが、C# でも CI したいですよね。

そこで、今まで Ubuntu でだけ使っていた JenkinsベースのCI環境を、Windows 上にも構築しました。

Java なら、最後に war とか jar とかを成果物にすればいいんですが、Windows プログラムならインストーラを作成して配布したい。

と思ってやってみると意外にはまりました。

サンプルアプリ

f:id:suer:20111218175323p:image

サンプルとしてクリックするとリア充を呪うアプリを作りました。

https://github.com/suer/Test-Setup-Project

セットアッププロジェクトを作成

ソリューション右クリックの追加>新規プロジェクトの追加からセットアッププロジェクトを作成します。

f:id:suer:20111218180835p:image

セットアッププロジェクトのファイルシステムエディタで

アプリケーションフォルダ>追加>プロジェクト出力

を選択し、Testプロジェクトの成果物をインストーラに含めます。

f:id:suer:20111218180838p:image

MSBuild.exe でビルドしてみる

CI したいのでコマンドラインでビルドできなきゃいけません。

通常通りMSBuild でビルドしてみます。*1

$ MSBuild

f:id:suer:20111218181637p:image

あらら。ワーニングが表示されました。

TestInstallerプロジェクトの中を見てみるとたしかにインストーラが生成されていません。

どうするか

devenv.com を使用します。

以下のようにコマンドを叩きます。

$ devenv.com Test.sln  /project TestInstaller\TestInstaller.vdproj /build Release

f:id:suer:20111218181638p:image

今度は成功しました。

あとは、Jenkins のビルドで、上記コマンドが発行されるようにして、生成される成果物を保存対象にすればいつでも最新のインストーラが手に入ります。

まとめ

  • MSBuild コマンドではインストーラプロジェクトをビルドできない。devenv.com コマンドを使用する。
  • 隣の人「これ、、、C# の話じゃないけど、、、」
  • セットアッププロジェクトの作成方法は以下を参考にしました

はじめてのVisual Studio 2010 (TECHNICAL MASTER 62)

あわせて読みたい

Jenkins Advent Calendar jp 2011


明日は @yone64 さんです。

よろしくお願いします。

*1:パスが通った状態でコマンドを発行しています。パスが通っていない場合は、パスを通すか、絶対パスでコマンドを指定してください。

2010-04-25

クックパッド主催 「開発コンテスト24」に参加しました

クックパッド主催の「開発コンテスト24」に参加しました。

http://info.cookpad.com/24contest


お題発表から24時間以内にアプリを開発し、投稿するコンテストです。

1位30万円、特別賞で iPad がもらえるかもしれないということで id:mallowlabs と組んで開発してみました。

課題

「朝起きてから学校や会社に行くまでの時間をより便利にするためには」

作品

名前: RushMorning

URL: http://raisin.ddo.jp/rush

コンセプト: 慌ただしい朝をサポートする

感想

「ゆっくり」の声にすればうけるかなー、とか「カウントダウンとかおもしろくね?」とか、Skypeで議論しつつ開発していったのですが、Twitterで報告されていく成果物を眺めていくうちに意気消沈。

世の中にはすごい開発者がいっぱいいるなー、と。


入賞作品( http://info.cookpad.com/24contest_award ) 見てもやっぱできがいいもの。

おしゃれだもの。

かわいいもの。

クックパッドは白金にあるんだもの。

今後

シーズン2があるらしいんで、それまでに腕を磨いておきます。

チームにデザインとかできる人が欲しい。。。。

2010-04-10

Cronのスケジュール記法を解決する

Rails + BackgrounDRb 環境で、柔軟なスケジューリングをしたくて、Cron の記法を簡単に解決できないかなぁ、とBackgrounDRbのソースを読んでいたら、CronTrigger という便利なクラスがありました。

これを使えば Rails アプリから柔軟にスケジュールを制御できていい感じ。

# cron_test.rb
require 'vendor/plugins/backgroundrb/server/lib/cron_trigger'

cron = BackgrounDRb::CronTrigger.new("*/10 * 8-20 * * * *")
p cron.sec    # 秒
p cron.min   # 分
p cron.hour # 時

$ ruby cron_test.rb
[0, 10, 20, 30, 40, 50]
0..59
[8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20]

それぞれ秒、分、時間が配列で返るようです。

BackgrounDRb は cron と違って秒と年が追加されているので注意。

これを使って、

class CreateSchedules < ActiveRecord::Migration
  def self.up
    create_table :schedules do |t|
      t.column :cron, :string          # スケジュール
      t.column :task_id, :integer   # タスクを表すテーブルへの外部キーのイメージ
      t.timestamps
    end
  end

  def self.down
    drop_table :schedules
  end
end

のようにテーブルを作成して、カラムcronにスケジュールを入れるようにします。

class Schedule < ActiveRecord::Base
  def self.find_triggered(time = Time.now)
    find(:all).select do |sched|
      cron = BackgrounDRb::CronTrigger.new(sched.cron)
      cron.sec.include?(time.sec) and cron.min.include?(time.min) and cron.hour.include?(time.hour)
    end
  end  
end

のようにしておけば、Schedule.find_triggered で実行すべきタスクを取得できるようになります。

(注) 秒、分、時間以外は無視しています。

とても便利なのでCronTrigger.rb だけ切り出したい。