GitBucketのバックアッププラグインを作ったお話
はじめに
弊社の環境ではWindowsでGitBucketを動作させていますが、GitBucketのバックアップを気合と根性とJenkinsと自作プログラムとpsql*1とPowerShellで行っていたのが割とつらみポイントが高めだったので、オールインワンでバックアップを行ってくれるプラグインを作りました。
名前に『Windows』と入っていますが、別にWindows固有の機能を使っているという訳ではないのでたぶんLinuxやMacでも動くと思います。
概要
一定間隔で以下のデータのバックアップをZIPで固めて指定されたディレクトリに移動します。
- データベースの中身([System administration] → [Data export/import]のデータと同じ)
- ユーザーリポジトリ
- Wikiリポジトリ
- issueとリリース画面の添付ファイル
- アバターデータ
テスト環境
一応以下の環境でテストを行っています。
OS
- Windows 7 64bit
- Windows 8.1 64bit
- Windows 10 Pro 64bit
データベース*2
- H2(組込み)
- PostgreSQL 10.1
インストールと設定
リリースページからダウンロードしてきてGITBUCKET_HOME/plugins
に配置します。
そして、GITBUCKET_HOME/backup.conf
を以下のように設定します。
# バックアップタイミング(必須) # 書式についての詳細は http://www.quartz-scheduler.org/documentation/quartz-2.x/tutorials/crontrigger.html を参照 # 以下の例だと毎日12AMにバックアップを実行します akka { quartz { schedules { Backup { expression = "0 0 0 * * ?" } } } } winbackup { # バックアップのZIPの保存先を指定します(オプション) # 指定しなかった場合、GITBUCKET_HOMEに保存します。 archive-destination = """C:\archive-dest-dir""" # ZIPの最大保持数(オプション) # 指定されなかった場合、無限に保持します。 archive-limit = 10 }
互換性
GitBucketの各バージョンに適合するプラグインバージョンについてはREADMEをご覧ください。
ライセンス
ライセンスはApache License 2.0ですよろしくおねがいします
おわりに
単機能な上にあまりエレガントな実装ではないのですが、弊社の欲しい機能は一通り網羅出来たので弊社的にはOKです。
あとは
- APIを叩くと任意のタイミングでバックアップを実行できる
- バックアップ終了後にS3とかのストレージサービスに自動でアップロードする
みたいな機能も付け加えてもいいかもしれません。
*1:データベースがPostgreSQLなので
*2:直接DBを叩いている訳ではないのでGitBucketがサポートしているDBならどれでも問題ないはずです。
焦るんじゃない、俺はScalaでもディレクトリをそのままZIPで固めたいだけなんだ
ScalaでディレクトリをそのままZIPで固めたくて、『java directory zip』みたいなキーワードでググると大抵ZipOutputStream
とかZipEntry
とかが出てきて面倒くさいなぁと思っていました。
zt-zipを使うとディレクトリをZIPに一撃で固められて非常にいい感じです。
libraryDependencies += "org.zeroturnaround" % "zt-zip" % "1.12"
ZipUtil.pack(new File("/tmp/demo"), new File("/tmp/demo.zip"))
Apache License 2.0で(ライセンス的な)使いやすさも折り紙つきです。
おわり
gitbucket-plugin-template のGiter8テンプレートを勝手に作ったお話
はじめに
GitBucketはプラグインシステムを導入しており、プラグインのテンプレートも用意されていますがGiter8テンプレート化されておらず*1、sbt new
を当たり前のものとしてしまっていた弊社にとってはなんだかなぁといった感じでした。
ので、勝手に自作しました。
つかいかた
sbt new jyuch/gitbucket-plugin-template.g8
おわりに
あくまで弊社が勝手に作っただけなのでバグってたりトラブってもGitBucketの作者さんに問い合わせとかしないように宜しくお願い致します。
おわり