mkdocs+CircleCIでmarkdownで書いた文書を自分のサーバにデプロイ

Google Playで公開しているアプリのプライバシーポリシーの管理をもうちょっとらくできないかなと思って作業を始めた。

  • MkDocsを使う
  • リモートリポジトリとしてBitBucketを使う
  • CircleCIでビルド
  • 自分のサーバにデプロイ

という環境を構築した。

MkDocsは特にこだわりがあったわけではないが、まあプライバシーポリシーをmarkdownで書けてHTMLで公開できれば何でも良かった。

軽く触ったところ マテリアルデザインなテーマを簡単に組み込めるのがよい。デザインに脳みそを割かなくていいのは楽だ。

苦労したのはCircleCIの設定だ。

ローカルではmkdocs serveでレンダリングの確認だけして(おそらく最終的にはそれすらしなくなるだろうけれど)、リモートリポジトリにpush、CircleCIでmkdocs buildして、最後にビルドされたHTMLをscpを使って自分のサーバにアップロードするという方針。

私のサーバはユーザ名+パスワードによる認証は許可していないので、公開鍵認証を使うのだが、この設定がうまくいかなくて困った。

そもそもscpで転送するのに使う鍵のファイルを指定するのにハマった。

add_ssh_keysでCircle CIに登録したSSH認証鍵のフィンガープリントを追加してやる必要があった。これをしないと、deploy用のスクリプトから認証に使う鍵が参照できない。

そこをクリアしたら今度は別の問題でハマる。

Circle CIからscpで自分のサーバに接続する際に、Are you sure you want to continue connecting (yes/no)?で止まってしまうのである。known_hostsにないからというのは分かるが、どうやってそれを登録するのかというのがわからなかった。 なんとも頭のわるいやり方ではあるが、以下の方法で乗り越えた。

  1. ssh経由のデバッグを利用してCircle CIにログイン
  2. sshコマンドを使って手動でログインを行いknown_hostsに登録
  3. 登録される文字列をCircle CIの環境変数に保存
  4. 該当文字列をknown_hostsに追記するスクリプトをscpコマンド実行前に追加

何かもっとちゃんとしたやり方があるような気がするのだが、私の英語力では解決策を見つけることができなかった。まあデプロイは無事にできるようになったので、文書の中身を練るとしよう。

Amazonのほしいものリストを公開しています。仕事で欲しいもの、単なる趣味としてほしいもの、リフレッシュのために欲しいものなどを登録しています。 寄贈いただけると泣いて喜びます。大したお礼はできませんが、よりよい情報発信へのモチベーションに繋がりますので、ご検討いただければ幸いです。