もぐてっく

人は1つ歳をとるたび、1ビットづつ大きくなれると信じてた。

Redmineを遠隔操作してプロジェクトを新規作成するソースコードを書いたよ

誰でも簡単にCentOS上にRedmineやJenkinsが導入できる、Alminiumと言う日本発の素晴らしいプロジェクトがあります。

そのAlminiumで構築したRedmineに既存のソースコードを大量に登録して、リビジョングラフとかを見て何かを管理している気分に浸りたい訳です。

調べてみるとRedmineにはAPIがある模様。
これを利用してリストをバッチ処理するのが現実的かも。

てなわけで、試しにRubyでプロジェクト作成APIを叩いてみました。

事前作業

Redmineの管理画面で「RESTによるWebサービスを有効にする」をONにしておきます。

f:id:moguno:20130211150815p:plain

ソースコードと呼ばれるプログラムの設計図

RedmineでのAPI認証は、APIキーを使用するものとHTTPのBASIC認証(管理者のユーザ名・パスワード)が選択出来ます。
httpsで運用してない場合はどっちの方式もセキュリテリィ的にノーガードなので、よりお手軽なBASIC認証を使ってます。

ちなみに、ドキュメントには無いですが(うらわざ〜)scmタグでバージョン管理システムの種類を指定してやるとリポジトリも一緒に作ってくれます。
(ここではGitにしてます。)

#! /usr/bin/ruby
# coding:utf-8

require 'net/http'

PJ_ID="redminehaxahaxa"
PJ_NAME="れっどまいんちゃんハァハァ"
PJ_DESC="れっどまいんちゃん可愛いよ可愛いよ可愛いよさぁ・・・脱"

Net::HTTP::version_1_2

# プロジェクトの作成
req = Net::HTTP::Post.new("/projects.xml")
req.basic_auth("admin", "admin")
req.content_type = "application/xml"

req.body = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>
<project>
  <name>#{PJ_NAME}</name>
  <identifier>#{PJ_ID}</identifier>
  <description>#{PJ_DESC}</description>
  <scm>Git</scm>
</project>
"

Net::HTTP::start("localhost") { |http|
	res = http.request(req)

	if res.code.to_i != 201 then
		raise res.body
	end
}


# ユーザの登録
req = Net::HTTP::Post.new("/projects/#{PJ_ID}/memberships.xml")
req.basic_auth("admin", "admin")
req.content_type = "application/xml"

# admin:1決めうち
user_id = 1

# 3:管理者、4:開発者、5:報告者
req.body = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>
<membership>
  <user_id>#{user_id}</user_id>
  <role_ids type=\"array\">
    <role_id>3</role_id>
    <role_id>4</role_id>
    <role_id>5</role_id>
  </role_ids>
</membership>
"

Net::HTTP::start("localhost") { |http|
	res = http.request(req)

	if res.code.to_i != 201 then
		raise res.body
	end
}

実行してみる

Redmineに今にも逮捕されちゃいそうなプロジェクトが生成されれば成功です。

f:id:moguno:20130211152124p:plain

アジャイルサムライ−達人開発者への道−

アジャイルサムライ−達人開発者への道−


Gitポケットリファレンス

Gitポケットリファレンス