Hatena::Diary

履歴 このページをアンテナに追加 RSSフィード Twitter

〜雑食系SEの作業履歴〜

2010-12-27

リポジトリの作成を自動化したい

過去の日記id:sikakura:20101124で、rksyngさんにコメントいただいた内容をまとめておきたいと思います。

リポジトリの自動作成については、http://www.redmine.org/wiki/1/Automating_repository_creationに情報が

あるので、基本的にこの手順に従うのですが、私の環境ではうまく動作しなかった&もう少し詳細な手順がほしい

ということでまとめてみます。


概要レベルの手順は以下の通りです。

  1. Redmineに管理者でログインして、管理>設定>リポジトリで、リポジトリ管理用のWebサービスを有効にします。
  2. http.confの内容を編集し、/sysに対するアクセス権を設定します。
  3. コマンドラインからreposman.rbを実行します。
  4. reposman.rbを定期的に実行するように設定します。

1の手順では、リポジトリ管理用のWebサービスの有効化とAPIキーの設定ですが、以下の図の赤く囲まれた部分を設定します。

f:id:sikakura:20101227142916j:image

チェックボックスにチェックを入れ、APIキーを入力します。ここで入力したAPIキーは、手順の3番で使用します。

2の手順では、Webサービスを利用可能にするために、/sysに対する権限付与を行います。

具体的には、

<Location /sys>
    Order deny,allow
    Allow from 192.168.0.1
    Deny from all
</Location>

というようにhttp.confに記載します。IPアドレスは適宜変更してください。

3の手順では、reposman.rbを実行します。

私の環境では、Gドライブ直下にBitNamiでRedmineインストールしていますので、

G:\BitNami\apps\redmine\extra\svn\reposman.rbにありました。

以下のようにコマンドプロンプトから実行します。

私が躓いた箇所としては、--redmine-hostに指定するのが本当にホスト名ではなく、Redmineブラウザからアクセスする際のURLを指定するという部分でした。

ruby reposman.rb --svn-dir=G:\BitNami\repo --redmine-host=http://192.168.0.1:9999/redmine --key=HaLV7axxA5V4

上のように実行すればOKなはずですが、以下のようなエラーがでます。

unable to create G:\BitNami\repo\test1 : undefined method `uid' for nil:NilClass

どうやらtest1というプロジェクト用のリポジトリ作成の時点でエラーが発生しているようです。

uidというメソッドが無いためにエラーが発生していると思われます。

reposman.rbを眺めてみると、208行目〜220行目には、以下のように書かれています。

def set_owner_and_rights(project, repos_path, &block)
  if RUBY_PLATFORM =~ /mswin/
    yield if block_given?
  else
    uid, gid = Etc.getpwnam($svn_owner).uid, ($use_groupid ? Etc.getgrnam(project.identifier).gid : Etc.getgrnam($svn_group).gid)
    right = project.is_public ? 0775 : 0770
    yield if block_given?
    Find.find(repos_path) do |f|
      File.chmod right, f
      File.chown uid, gid, f
    end
  end
end

なんとなく、if文がWindows用、else文がそれ以外用といった感じです。

RUBY_PLATFORMでWindowsプラットフォームの判定がうまくいってないようです。

以前のコメントでの対応では、else文をコメントアウトして対応したのですが、

今回はif文を書き換えてみます。

変更前

  if RUBY_PLATFORM =~ /mswin/
    yield if block_given?
  else

変更後

  if RUBY_PLATFORM =~ /(:?mswin|mingw)/
    yield if block_given?
  else

私の環境ではRUBY_PLATFORMは、i386-mingw32と返ってきましたので、上のように対応してみました。

これで動作するはずです。

ちなみに、svnadminコマンドにパスが通ってないとまたエラーになりますので、ご注意を。

4の手順では、3のコマンドプロンプトで実行した内容をバッチファイルにして、Windowsタスクで実行させます。


リポジトリの作成は大して大変ではありませんが、サーバの管理を開放せずに、

それぞれのリーダがプロジェクトを作成する環境では必要かなと思いました。

スパム対策のためのダミーです。もし見えても何も入力しないでください
ゲスト


画像認証

トラックバック - http://d.hatena.ne.jp/sikakura/20101227/1293429872