Pastalablog in はてな

時代はブログ! 日記もあるよ→http://pastak-diary.hatenadiary.com

CentOS6.4にGitlab入れて、さらにpushされたらftpでデプロイ出来るようにした話

この記事はKMCアドベントカレンダーの1日目の記事です。

というわけで、初日は言いだしっぺの法則で予告通りKMC入りたてほやほやなのに、「老師」と呼ばれだしている若者代表の僕が、

Gitlab導入情報とGitでFTPをゴニョゴニョする方法を、主に便利スクリプトへのリンクを貼ってごまかしながら紹介をします。

参考情報:http://pastak-diary.hatenadiary.com/entry/2013/10/10/004510

Gitlabを導入する

CentOSRubyのバージョンを上げる

まずはCentOSRubyのバージョンを上げる。Ruby1.9.3くらいを入れとくと良いです。
Ruby1.9.3の入れ方はここに載ってるので、丁寧にコピペして実行するとなんとかなる。
CentOS 6.3 に Ruby 1.9.3 をインストールする - パンダのメモ帳

便利スクリプトを実行する

便利スクリプトを公開してくださってる方がいるので、これを実行して、ボーっとしてたら入る。
CentOS 6.4 用の GitLab 自動インストールスクリプトを書いた : あかぎメモ

コケるからディレクトリをつくったりする

Gitlabのインストールが成功したかどうかは

  • $ sudo -u git -H bundle exec rake gitlab:env:info RAILS_ENV=production
  • $ sudo -u git -H bundle exec rake gitlab:check RAILS_ENV=production

を実行したら分かる。
ぼくの環境だとrepositoryディレクトリがないとか言われから、それを作って権限を与えたりした。

これでGitlabは動くようになる。便利。

Gitlabのレポジトリにhookを登録して差分があるファイルをFTPで飛ばす方法

古き良きFTPで本番用サーバにアップロードをしていることも多いと思う。
そういう時、サーバサイドでgitコマンドを叩けないとかもあるので、なんとかFTPしたい気持ちになる。
その時に便利なスクリプトがgit-ftp.pyです。

git-ftp.pyを使う

本体はここにある。

ezyang/git-ftp · GitHub

みんなだいすきgit cloneコマンドを叩くと降ってくる。

  • git clone git@github.com:git-ftp/git-ftp.git

あと、pythonからgitを扱うためのライブラリが必要なので、それも入れます。

  • easy_install gitpython

レポジトリに設定ファイルを置く

Gitlabで作ったレポジトリ/home/git/repojitory以下に作成されます。
このレポジトリに対して*.git/ftpdataを作成します。

masterブランチにpushされたら本番用に、developブランチにpushされたら開発用サーバにFTPアップロードするように書いた例を示します。

[master]
username=user
password=thisismyPassW0rd
hostname=ftp.myservice.com
remotepath=/root/dir/to/myservice.com/
[develop]
username=user
password=thisismyPassW0rd
hostname=ftp.myservice.com
remotepath=/root/dir/to/dev.myservice.com/

remotepathに書いたディレクトリ以下に配置されます。

  • masterブランチでapp/model/hoge.phpをcommitすると、リモートサーバの/root/dir/to/myservice.com/app/model/hoge.phpにアップロードされます。
  • developブランチでpublic_html/index.htmlをcommitすると、リモートサーバの/root/dir/to/dev.myservice.com/public_html/index.htmlにアップロードされます。

後述するgitftpignoreを利用する場合は各ブランチの設定に1行足して、gitftpignore=.my_gitftpignoreを追記します。

レポジトリpost-receiveを編集する

*.git/hooks/post-receivegit-ftp/post-receiveシンボリックリンクを貼ります。これでpushした時にgit-ftp.pyが呼ばれるようになります。

.gitftpignoreを作成する。

作業ディレクトリの中に.gitftpignoreファイルを作ります。
書き方は.gitignoreと同じです。
これに書いたファイルはFTPアップロードの対象にならなくなります。
レポジトリ内にvagrantの設定ファイルやReadmeがある場合など良しなに利用してください。
これを利用する場合は*.git/ftpdataに前述の1行を追加する必要があります。

リモートサーバにgit-rev.txtを配置する

これを置かないとgit pushするたびにgitで管理しているファイルが全てアップロードされてしまいます。
初めてのデプロイの場合は中身は空で問題無いです。
もし、差分のみをアップロードしたい場合はgit-rev.txtに最新コミットのハッシュを書き込みます。
最新コミットのハッシュを書き込んでおくと、次にgit pushした時にコミットとの差分のあるファイルのみをアップロードするようになります。便利。

git-rev.txtの配置場所ですが、先ほどの例だと、

  • /root/dir/to/myservice.com/
  • /root/dir/to/dev.myservice.com/

にそれぞれ配置すると良い感じになります。

まとめ

社内などのローカルのCentOSにGitlabを入れて、git pushにhookしてリモートの本番用サーバなどにFTPでアップロードする方法を実現するための各種便利スクリプトや便利記事を紹介しました。

もし、今はFTPでやっているけども将来的にGitなどに移行したいなどの考えがある場合でも、いきなりGitに移行するのは難しいと思いますが、実験的に1プロジェクトなどでGitlabを利用し、Merge Requestを試してみることで徐々に利用エリアを増やしていくなどの利用法が考えられると思います。

よろしくお願いします。

明日のKMCアドベントカレンダー2日目はmonadさんが「CentOSときたのでGentooネタでなにかひとつ…。」とのことです。

楽しみですね!!。

ではでは。

宣伝

ちなみにKMCでは今度のコミックマーケット85でも部誌を出します。
過去の部誌はここで読めます → http://www.kmc.gr.jp/projects/press/
僕も何かを書く予定*1ですので、よろしくお願いします。

場所は3日目西地区 "し" ブロック 42bです。

新入部員も無限に募集しています。よろしくお願いします。

入部案内 — 京大マイコンクラブ (KMC)

*1:まだ1文字も書いてないとは絶対に言えない…