LoginSignup
36
37

More than 5 years have passed since last update.

GitBucketのインストール&ファイルの自動デプロイ

Last updated at Posted at 2014-05-30

GitBucketのインストール

社内のGitリポジトリの管理ツールが欲しかったので探していたのですが、GitBucketを使うと驚くほど簡単に運用することが出来ました。

release pageからgitbucket.warをダウンロードして、

java -jar gitbucket.war

で起動し、 http://www.example.com:8080 等にアクセスするだけです。初期ID,PWは共にrootです。

homeディレクトリの .gitbucket ディレクトリに設定やリポジトリのデータが入ります。

GitBucketの自動起動

行儀が悪い気もするのですが /gitbucket ディレクトリを作成してそこに gitbucket.war をコピーし、 /etc/rc.d/rc.local

java -jar /gitbucket/gitbucket.war --gitbucket.home=/gitbucket&

と追記しました。これで起動時に自動起動して、すべてのファイルを /gitbucket ディレクトリ内で完結できます。

もう少しちゃんと自動起動する

Upstartがインストールされていれば、 /etc/init/gitbucket.conf を作成して以下を記述します。

description "Gitbucket"
author "Yamada Nanigashi"

start on runlevel [2345]
stop on runlevel [016]

env PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
exec java -jar /gitbucket/gitbucket.war --gitbucket.home=/gitbucket

これで再起動時に自動起動します。

自動的にWebサーバへファイルをデプロイする

GitHubやGitBucketは「WebHook」という仕組みを使うと、プッシュ時に特定のURLのプログラムを実行できるらしいので、そこにFTPを仕掛けてWebサーバにデプロイしてみます。

検索すればお目当てのものは見つかると思うのですが、今回は勉強がてら自作で。

<?php

$payload = json_decode($_REQUEST['payload']);
$url = $payload->repository->url;
$bare_path = parse_url($url, PHP_URL_PATH);

// ノンベアリポジトリが存在しないときはクローンする。
// 存在するときはプルする。
$b = preg_replace('|/git|', '/gitbucket/repositories', $bare_path);
$nb = preg_replace('|/git|', '/gitbucket/nonbare', $bare_path);
$nb = preg_replace('/\.git$/', '', $nb);
if (!file_exists($nb)) {
  `git clone $b $nb 2>&1`;
} else {
  `cd $nb && git pull 2>&1`;
}

// lftpで送信
$host = 'hostname';
$user = 'username';
$pass = 'password';
$rdir = 'remotedirectory';
`lftp -u $user,$pass -e "mirror -Rv -X .git/ $nb/ $rdir; bye" $host 2>&1`;

POST変数payloadにリポジトリ情報が入ってくるので加工してlftpでミラーリングします。あんまり良く分かっていないので無駄が多いと思います。

こいつのURLをGitBucketのSettingsのService Hooksに仕掛けてやればOKです。

mirrorコマンドの -Rv-Rev にすれば完全に同期が取れますが、危険なので十分にテストしてからのほうが良いでしょう。適当に作ってWebサーバのデータをすべてふっ飛ばしてしましました…

36
37
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
36
37