この記事はKMCアドベントカレンダーの1日目の記事です。
というわけで、初日は言いだしっぺの法則で予告通りKMC入りたてほやほやなのに、「老師」と呼ばれだしている若者代表の僕が、
Gitlab導入情報とGitでFTPをゴニョゴニョする方法を、主に便利スクリプトへのリンクを貼ってごまかしながら紹介をします。
参考情報:http://pastak-diary.hatenadiary.com/entry/2013/10/10/004510
Gitlabを導入する
CentOSのRubyのバージョンを上げる
まずはCentOSのRubyのバージョンを上げる。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を使う
本体はここにある。
みんなだいすき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-receive
にgit-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です。
新入部員も無限に募集しています。よろしくお願いします。
*1:まだ1文字も書いてないとは絶対に言えない…