一部では標準化しているんじゃないかと思われる今日この頃いかがお過ごしでしょうか?
とは言うものの、いくら有用性を語ってもそうそう導入されるような世界じゃないですよね?高いし。
せめてGithub/Bitbucketの有料アカウントを…と思ってもそれもねぇ…って世界ですよね(´;ω;`)
そんな僕達がPullRequest方式で開発したい!!そうだRhodeCodeがあるじゃないか!!
という私やあなたみたいな方にお届けするエントリーですw
あ、ちなみに件名に#tokyomercurial を追記した理由は特にありません。
あえていうなら、このツイートがあったので…ぐらいかな?
@3a3k 詳細を確認しようとしたら解決したみたいで何よりです。詳細を公開してもらえると、(バッド?)ノウハウ共有の上でも有難いです(笑)
— FUJIWARA Katsunoriさん (@flyingfoozy) 11月 4, 2012
あ、ちなみに長いのでご注意ください
試した環境はこんな感じ
- 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
python周り入れましょう。
最初から入っているのは2.6系のはずですし、別にそのまま使ってもいいですが…
pythonbrewという流行りに乗っかっておきましょう。
→ それだったら pythonz で入れろって話しなんでしたっけ?
下記はちょっと時間かかるので、コーヒでも入れましょう。
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 (でエラーが起きないこと確認)
おまたせ、rhodecodeです。時間かかります。
なぜならいっぱい一緒に入りますから。当然Mercurialもこの時入りますので。
さっき作ったコーヒでも飲みましょう。
使用するwebサーバでも入れましょう。
rhodecodeのドキュメントにはapacheとnginxのサンプル設定が乗ってますので、テキトーに。
ここではnginx入れます
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
[nginx] | |
name=nginx repo | |
baseurl=http://nginx.org/packages/centos/6/$basearch/ | |
gpgcheck=0 | |
enabled=1 |
さて、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で
これで設定ファイルができたので…試しに動かしてみます
ブラウザで確認するとこうなっているかと。
/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 ってありますね。
この通りやってみましょう。
結果
当然反映してますね。
続いて二郎くんでフォークしてプルリクエストを出してみます。
まず二郎くんでログイン
そしてhellorepoを選択し OptionsからForkを選びます
すると、repositoryを作成した時のような画面になります。
Fork結果
fork-hellorepo-jiroの詳細を見てみるとClone urlってありますね。
手元にcloneして作業してみます。
作業に満足したらプルリクエストしましょう
Options > Open new pull request を選択します
結果こんな感じ
ソースにコメントも可
実際にレビューした結果を選択
change status にチェックを入れて、レビュー結果OKかどうか選択しましょう。
全員がレビューしたと仮定
あとは誰かがComment and closeを押せばいいわけですが…
現状で自動でこのリクエストは取り込まれない…よね?
→間違っていたらご指摘ください。
なので手動で太郎くんがpullしてマージしてpushすることになります。
うーん、メンドイ。
何よりせっかくApproved とフラグをつけた内容なのに、結局fork元repository上では当然それがなくなっているわけで…
更にPullRequestを取り込んだからといって、PullRequestが閉じられるわけでもない。
→ Forkしたrepositoryを閉じれば(削除すれば)消えます。
もっというと手動で取り込む=結局approved/reject関係なく取り込む人次第なので、
このへんは運用ルールでどうにかするしか無さそうです。
ちなみに上記はbranch切ってやりましたが、別にbookmarkでもいけます
その辺も運用ルール次第なのかな?
ただBitbucketみたいに、「こう言うふうにコマンド叩いて取り込めるよ!!」とかの表記がないので、
リビジョン指定よりもブランチ/ブックマークで取り込むことを前提とした運用のほうが無難だと思います。
多分gitでもそんなに操作変わらんだろう
ということで次。
まずnginxを使ってアクセスできるようにしましょう
ってもドキュメントのサンプルから大きく逸脱しなければ大丈夫なはずです
あくまで動作確認なので自分は本当にほぼ上記ドキュメントのまま。
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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; | |
} | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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; |
このあと 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表示が崩れました。
あとはサービス化
このあたりを参考にしました
きっとこんなのを作ればいいんだろう…
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# /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" |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/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 |
シェルスクリプトとか詳しくないし、このへんはそんなに突っ込まないでほしいw
あとは
chkconfig rhodecode on
で登録しておけばOKですね。
とりあえずこれで「最低限」使うことは可能になると思います。
ローカル内でしかアクセスされないなら、まあセキュリティとかそこまで考えなくてもいいでしょうし、
レビューツールとしてはありだと思います。
ただ、その他のツールと連携していくこととか考えたらここでAPI見てなんか書いたり、
もしくはincoming hook書いて直接repoの中においてきたり…とかになるんでしょうか。
rhodecodeを使うとなると、issue trackerを外部に依存することになるでしょうし、
それ+CIサーバと連携…とか考えると、ちょっとめんどいですね。
個人でやる分には多少失敗しようがそれなりに動けばいいんですけど…ってか
個人だったらGithub/Bitbucketで事足りるし、ウムム…
この手の構築が好きで得意な人がいるような会社だったら、検討の余地は十分あると思います。
そういえばLDAP連携で @usaturnさんが悩んでいた記憶が…
で、RhodeCodeのAD連携がうまくいかない。そもそもRhodeCode関係なくldapsearchで検索かけようとすると、LdapErr: DSID-0C0903A9, comment: AcceptSecurityContext error的なエラー出る。
— うさたーんさん (@usaturn) 10月 16, 2012
つまり @usaturnさんがrhodecodeを使った素晴らしい開発環境構築を年内にまとめてくれるはず…!?
Admin > Settings に hgsubversion extension を設定できる箇所が有りました。
これにチェックを入れたら、最初にrepository作るときのclone先にsvnのrepositoryを指定できるかも?
補足 会社でrhodecode使い始めました。
Gitに関して追加設定が必要だったり、HGで日本語コメントがちゃんとrhodecode上で表示されるようにしたり…
みたいな設定をお隣の席の人がやってくれました
詳細は以下
http://htn.to/TAKNVB