APIを使用してGitLabリポジトリを自動バックアップする

2019年6月21日

多くのプロジェクトを、特にGitLabのプライベートリポジトリとして格納している。

世界的に使われているGitLabだからとはいって、バックアップしなくていいというわけには行かない。世の中何が起こるかわからないのである。

以下では、GitLabのAPIを使用して、完全に自動でバックアップするためのオープンソースソフトを紹介する。

ソースと実行形式

以下に置いてある。

※実行にはgitlabapi-*.jarに加えて、当然だがJavaがインストールされていること。さらに、gitコマンドが存在し、そこにパスの通っていることが必要だ(Windowsの場合はgit.exe)。

処理内容

現在の処理内容としてはバックアップのみを行っている。GitLabの特定のアカウントについて以下を行う。

  • 単一のローカルなベースフォルダを決める。
  • GitLab APIを使ってGitLabにアクセスし、このアカウントの持つすべてのプロジェクトをリストアップし、各プロジェクトについて以下を行う。
  • バックアップ用フォルダに既にプロジェクト用フォルダがあるかを調べる。
  • 無ければベースフォルダ以下にcloneして新たに作成する。
  • あれば、fetchして最新の状態にする。

と、単純にこれだけだ、この処理を一日一度やれば、常にGitLab上でのすべてプロジェクトのバックアップがとれるというわけである。

実行の仕方

先のソース・ファイルからビルドしたもの、あるいはバイナリでダウンロードしたgitlabapi-*.jarの使用方法としては以下である。

java -jar gitlabapi-*.jar backup ベースディレクトリ  ユーザ名  パスワード  アクセストークン

これにより、このユーザの所有するリポジトリの情報をGitLabのAPIによって取得し、ベースディレクトリに対応するリポジトリがなければCloneし、既にあればFetchして最新状態にする。

  • ベースディレクトリ
    どこでも良いが、当然だが実行のたびに異なっては意味がない。
  • ユーザ名
    メアドではなくユーザ名を指定する
  • パスワード
    ユーザのGitLabログインのためのパスワードを指定する
  • アクセストークン
    GitLabで発行した特別なアクセストークン

※アクセストークンの発行の仕方については、例えばhttps://capibara1969.com/55/を参照してほしい。

履歴

  • 2019/6/21:バージョン0.2からbackupというサブコマンドが必要になった。