etckeeper で commit されたら GitLab に push する

手順 (各ホスト)

以下の手順を自動化したスクリプトはこちら(実際のものとは多少異なります)。

etckeeper-setup-host.sh · GitHub

1. SSH鍵を生成

# ssh-keygen -t rsa -C "$(hostname)@gitlab-root.url" -N '' -f /root/.ssh/gitlab-$(hostname)

2. /root/.ssh/config に以下を追記

Host gitlab-root.url
    User (ホスト名)
    IdentityFile /root/.ssh/gitlab-(ホスト名)

3. gitlab-root.urlSSH 鍵を /root/.ssh/known_hosts に登録する

自動化されたスクリプトでは ssh-keyscan コマンドを使っている(関連:非対話的に ~/.ssh/known_hosts を更新 - Humanity)。

# ssh gitlab-root.url

4. リポジトリの初期化

# etckeeper init

5. GitLab の remote URL を追加

# etckeeper vcs remote add gitlab git@gitlab-root.url:etckeeper/etckeeper-$(hostname).git

6. 設定ファイルの PUSH_REMOTEgitlab を追加

# vim /etc/etckeeper/etckeeper.conf

# To push each commit to a remote, put the name of the remote here.
# (eg, "origin" for git). Space-separated lists of multiple remotes
# also work (eg, "origin gitlab github" for git).
PUSH_REMOTE="gitlab"

手順 (GitLab の Web GUI から)

こっちの手順も自動化したい。 たくさんコマンドラインツールがあるみたいだけどあんまり調べてない。そのうちやるかも。

  1. 各ホストのユーザを作成
  2. ログアウトした状態のトップページでアカウントを作成すれば、パスワードも一緒に設定できる
  3. Admin Area からだとメール記載の URL から設定する必要がある
  4. ユーザのSSH鍵を追加 (各ホストごとの手順で作成)
  5. 各ホストのリポジトリを作成
  6. 各ホストのユーザを etckeeper/{ユーザ名} のプロジェクトに Master として追加

以上

これで /etc/cron.daily/etckeeper が実行されるたびに git push される。