2012年11月5日月曜日

rhodecode1.4.4を試してみた #tokyomercurial

世の中GithubEnterpriseでpullrequest方式での開発が
一部では標準化しているんじゃないかと思われる今日この頃いかがお過ごしでしょうか?

とは言うものの、いくら有用性を語ってもそうそう導入されるような世界じゃないですよね?高いし。
せめてGithub/Bitbucketの有料アカウントを…と思ってもそれもねぇ…って世界ですよね(´;ω;`)

そんな僕達がPullRequest方式で開発したい!!そうだRhodeCodeがあるじゃないか!!
という私やあなたみたいな方にお届けするエントリーですw

あ、ちなみに件名に#tokyomercurial を追記した理由は特にありません。
あえていうなら、このツイートがあったので…ぐらいかな?



あ、ちなみに長いのでご注意ください


試した環境はこんな感じ

  • CentOS6.3 64bit minimal状態から
  • VirtualBox上で

すげー大雑把にやりますので、必要な部分は適宜脳内補完でお願いします

実験用なのでselinux/iptablesは無視

最初は…
とりあえず入れましょう。
使わないのもあるけど。

最初に入れたもの

yum -y install yum-priorities
yum -y install wget
yum -y install vim-enhanced.x86_64

wget http://ftp-srv2.kddilabs.jp/Linux/distributions/fedora/epel/6/x86_64/epel-release-6-7.noarch.rpm
rpm -ivh epel-release-6-7.noarch.rpm

wget http://rpms.famillecollet.com/enterprise/remi-release-6.rpm
rpm -ivh remi-release-6.rpm

vim /etc/yum.repos.d/remi.repo // enableに

yum -y install make
yum -y install gcc-c++
yum -y install kernel-devel-2.6.32-279.el6.x86_64
yum -y install openssl-devel
yum -y install sqlite-devel
yum -y install readline-devel
yum -y install ncurses-devel
yum -y install zlib-devel
yum -y install bzip2-devel
yum -y install git-all
view raw 01.md hosted with ❤ by GitHub


python周り入れましょう。
最初から入っているのは2.6系のはずですし、別にそのまま使ってもいいですが…
pythonbrewという流行りに乗っかっておきましょう。
→ それだったら pythonz で入れろって話しなんでしたっけ?
下記はちょっと時間かかるので、コーヒでも入れましょう。

pythonインストール

curl -kLO https://github.com/utahta/pythonbrew/raw/master/pythonbrew-install
chmod +x pythonbrew-install
./pythonbrew-install

pythonbrew install --configure="--with-zlib \
--with-bz2 \
--with-ssl \
--with-readline \
--with-ncurses \
--with-expat \
--with-sqlite3 \
--with-crypt \
--with-md5 \
--with-sha" 2.7.3
pythonbrew switch 2.7.3

python -V で2.7.3が出ること
python (REPL起動)
> import ssl (でエラーが起きないこと確認)
view raw 02.md hosted with ❤ by GitHub


おまたせ、rhodecodeです。時間かかります。
なぜならいっぱい一緒に入りますから。当然Mercurialもこの時入りますので。
さっき作ったコーヒでも飲みましょう。

rhodecodeインストール

pip install rhodecode
view raw 03.md hosted with ❤ by GitHub


使用するwebサーバでも入れましょう。
rhodecodeのドキュメントにはapacheとnginxのサンプル設定が乗ってますので、テキトーに。
ここではnginx入れます

nginxインストール

nginx.repoを /etc/yum.repos.d に設置後

yum -y install nginx
view raw 04.md hosted with ❤ by GitHub

[nginx]
name=nginx repo
baseurl=http://nginx.org/packages/centos/6/$basearch/
gpgcheck=0
enabled=1
view raw nginx.repo hosted with ❤ by GitHub



さて、rhodecodeの設定をやりましょう。
まあrhodecodeのドキュメントままといえばそれまでですが…

rhodecode 最初の設定

useradd rhodecode -g nginx
su rhodecode
pythonbrew switch 2.7.3
cd ~
paster make-config RhodeCode production.ini

production.iniを書き換え

vim production.ini
# 以下書き換え
host = 0.0.0.0
container_auth_enabled = true
proxypass_auth_enabled = true

書き換えたら

mkdir repos # 実際にrepository格納する場所作成

paster setup-rhodecode production.ini \
--user=adminユーザー名を \
--password=adminユーザのパスワード \
--email=test@sample.com \
--repos=/home/rhodecode/repos

古いDB消すって聞かれるのでyesで
view raw 05.md hosted with ❤ by GitHub


これで設定ファイルができたので…試しに動かしてみます

とりあえず動かす

paster serve production.ini

このあとブラウザでipaddress:5000 に当たりに行ってみる
view raw 06.md hosted with ❤ by GitHub


ブラウザで確認するとこうなっているかと。
/etc/hosts にvm2って名前で仮想マシンのip書いているのでurlはそんな感じ


さっき作ったadminユーザでログインしてみます

とりあえず3名ほどユーザを追加してみましょう
まあLDAPが使えれば、こんなこといらないんだろうけど…
Admin > Users > Add New User




時にログイン画面の下に小さくDon't have an account? という項目ありますが、
こちらから誰でもアカウント作成が可能です。
が、こちらで作ると初期の状態だとログイン出来ません。
 管理者にActiveにしてもらう必要性があります。


 各自が作成した時に最初からActiveにするためには
Adminユーザで
Admin > permissions で Registration を変更すればいけます。


次にとりあえずAdminユーザでrepository groupを作っておきます。
実際に仕事で使う…とかになると、プロジェクト単位で切ることになるのかな?
もちろん作らなくてもOKですが、とりあえず。

Admin > repositories groups > ADD NEW GROUP


作ったらパーミッションを設定します。
ここでは太郎くんにadmin権限を渡してみます。


さて、太郎くんでログインしてテキトーに作ります

ご丁寧にQuick Start ってありますね。



この通りやってみましょう。

QuickStartの通りやってみる

hg clone http://taro_yamada@vm2:5000/HelloGroup/hellorepo
cd hellorepo

# hoge.txtを足す
cat << _EOS_ >> hoge.txt
hello!!
_EOS_

hg ci -A -m"first"
hg push
view raw 07.md hosted with ❤ by GitHub


結果

当然反映してますね。

続いて二郎くんでフォークしてプルリクエストを出してみます。
まず二郎くんでログイン
そしてhellorepoを選択し OptionsからForkを選びます

すると、repositoryを作成した時のような画面になります。

Fork結果

fork-hellorepo-jiroの詳細を見てみるとClone urlってありますね。

手元にcloneして作業してみます。

二郎の作業

hg clone http://jiro_tanaka@vm2:5000/HelloGroup/fork-hellorepo-jiro
cd fork-hellorepo-jiro

# hoge.txtになんか書く

hg branch jirowork
hg ci -A -m"second"
hg push --new-branch
view raw 08.md hosted with ❤ by GitHub


作業に満足したらプルリクエストしましょう
Options > Open new pull request を選択します



結果こんな感じ


ソースにコメントも可


実際にレビューした結果を選択
change status にチェックを入れて、レビュー結果OKかどうか選択しましょう。

全員がレビューしたと仮定


あとは誰かがComment and closeを押せばいいわけですが…
現状で自動でこのリクエストは取り込まれない…よね?
→間違っていたらご指摘ください。
なので手動で太郎くんがpullしてマージしてpushすることになります。

太郎のマージ作業

# 手元のhellorepoでの作業
hg pull http://taro_yamada@vm2:5000/HelloGroup/fork-hellorepo-jiro -b jirowork
hg merge -r jirowork
hg ci -m"merge"
hg push --new-branch
view raw 09.md hosted with ❤ by GitHub


うーん、メンドイ。
何よりせっかくApproved とフラグをつけた内容なのに、結局fork元repository上では当然それがなくなっているわけで…
更にPullRequestを取り込んだからといって、PullRequestが閉じられるわけでもない。
→ Forkしたrepositoryを閉じれば(削除すれば)消えます。
もっというと手動で取り込む=結局approved/reject関係なく取り込む人次第なので、
このへんは運用ルールでどうにかするしか無さそうです。

ちなみに上記はbranch切ってやりましたが、別にbookmarkでもいけます

その辺も運用ルール次第なのかな?

ただBitbucketみたいに、「こう言うふうにコマンド叩いて取り込めるよ!!」とかの表記がないので、
リビジョン指定よりもブランチ/ブックマークで取り込むことを前提とした運用のほうが無難だと思います。


多分gitでもそんなに操作変わらんだろう
ということで次。

まずnginxを使ってアクセスできるようにしましょう

ってもドキュメントのサンプルから大きく逸脱しなければ大丈夫なはずです


あくまで動作確認なので自分は本当にほぼ上記ドキュメントのまま。
upstream rc {
server 127.0.0.1:5000;
# add more instances for load balancing
#server 127.0.0.1:5001;
#server 127.0.0.1:5002;
}
server {
listen 80;
server_name localhost;
access_log /var/log/nginx/rhodecode.access.log;
error_log /var/log/nginx/rhodecode.error.log;
# uncomment if you have nginx with chunking module compiled
# fixes the issues of having to put postBuffer data for large git
# pushes
#chunkin on;
#error_page 411 = @my_411_error;
#location @my_411_error {
# chunkin_resume;
#}
# uncomment if you want to serve static files by nginx
#root /path/to/installation/rhodecode/public;
location / {
try_files $uri @rhode;
}
location @rhode {
proxy_pass http://rc;
include /etc/nginx/proxy.conf;
}
}
view raw default.conf hosted with ❤ by GitHub

proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header X-Url-Scheme $scheme;
proxy_set_header X-Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Proxy-host $proxy_host;
client_max_body_size 400m;
client_body_buffer_size 128k;
proxy_buffering off;
proxy_connect_timeout 7200;
proxy_send_timeout 7200;
proxy_read_timeout 7200;
proxy_buffers 8 32k;
view raw proxy.conf hosted with ❤ by GitHub


このあと service nginx start で ipaddressであたりにいけるはずです


clone url もport番号がなくなったのが確認できるはず。

なおこの段階で、rhodecodeの設定ファイルであるproduction.iniのhostを「127.0.0.1」に直しても問題ありません。
nginxで飛ばすわけだしね。
むしろしたほうが、ipaddress:5000でアクセスできなくなるし、いいんじゃまいか。

ただし
full_stack = false
にすると、repositoryをcloneする際にこの症状にハマります。
まあ httpのままでなければいいのかもしれないけど…

また
static_files = false
にすると、自分の場合web表示が崩れました。



あとはサービス化
このあたりを参考にしました
きっとこんなのを作ればいいんだろう…

# /etc/env.rhodecode
# なんかもっとカッコいい書き方があるんじゃないかな…
PBREWPATH="/usr/local/pythonbrew/pythons/Python-2.7.3/bin"
PATH="$PBREWPATH:$PATH"
PYTHONPATH="/usr/local/pythonbrew/pythons/Python-2.7.3/lib"
view raw env.rhodecode hosted with ❤ by GitHub

#!/bin/sh
#/etc/rc.d/init.d/rhodecode
#
# chkconfig: 345 44 56
# description: rhodecode
. /etc/env.rhodecode
export PBREWPATH PATH PYTHONPATH
case $1 in
start)
$PBREWPATH/paster serve /home/rhodecode/production.ini start
;;
stop)
$PBREWPATH/paster serve /home/rhodecode/production.ini stop
;;
status)
$PBREWPATH/paster serve /home/rhodecode/production.ini status
;;
*)
echo "Usage: test [start|stop|status]"
;;
esac
exit 0
view raw rhodecode hosted with ❤ by GitHub


シェルスクリプトとか詳しくないし、このへんはそんなに突っ込まないでほしいw

あとは
chkconfig rhodecode on
で登録しておけばOKですね。

とりあえずこれで「最低限」使うことは可能になると思います。
ローカル内でしかアクセスされないなら、まあセキュリティとかそこまで考えなくてもいいでしょうし、
レビューツールとしてはありだと思います。

ただ、その他のツールと連携していくこととか考えたらここでAPI見てなんか書いたり、
もしくはincoming hook書いて直接repoの中においてきたり…とかになるんでしょうか。

rhodecodeを使うとなると、issue trackerを外部に依存することになるでしょうし、
それ+CIサーバと連携…とか考えると、ちょっとめんどいですね。
個人でやる分には多少失敗しようがそれなりに動けばいいんですけど…ってか
個人だったらGithub/Bitbucketで事足りるし、ウムム…
この手の構築が好きで得意な人がいるような会社だったら、検討の余地は十分あると思います。

そういえばLDAP連携で @usaturnさんが悩んでいた記憶が…



つまり @usaturnさんがrhodecodeを使った素晴らしい開発環境構築を年内にまとめてくれるはず…!?


Admin > Settings に hgsubversion extension を設定できる箇所が有りました。
これにチェックを入れたら、最初にrepository作るときのclone先にsvnのrepositoryを指定できるかも?




補足 会社でrhodecode使い始めました。
Gitに関して追加設定が必要だったり、HGで日本語コメントがちゃんとrhodecode上で表示されるようにしたり…
みたいな設定をお隣の席の人がやってくれました
詳細は以下
http://htn.to/TAKNVB




2012年11月3日土曜日

自転車買ったよ〜

Wiggle で自転車買いました。

え、購入理由?
1年半共に過ごしたロードがパクられたからだよ(´;ω;`)

で、まあ自転車ないと通勤が必然的に電車になります…
電車辛い…

で、知り合いにWiggle勧められて買いました、と。


届くとこんな感じ



開けてみる



取り出してみる



組み上げて出来上がり






ということで、こいつで今週から通勤しております。
快適快適〜
送料込みで7万ちょっとはお買い得だったと思うなぁ…

次はパクられないように、こいつこいつで地球ロックしてます。

過去にバイク盗まれたときはこいつバッツリ切られてましたけど…
さすがに車両金額的に大丈夫だと思いたい…


しかしお買い得と言えども予定外の出費だったので、予定していたサスペンション購入はまた今度だな。