Hexoを使ってブログに記事を追加するごとにlocalのVMでページを生成してS3にデプロイしているが、ページを生成する時間が長い!だから贅沢に無料のCIサービスを使ってCIから記事を生成してデプロイしてみる。
やりたいこと
レポジトリのmasterが更新されたらcloneして記事を生成してS3にデプロイしてcloudfrontのキャッシュを削除する。
CIサービス
レポジトリを公開しているので、S3にデプロイするためのアクセスキーが隠せるCIサービスを選ぶ必要がある。
CIサービスのドキュメントをあさるとCircleCI、Codeshipあたりはサービス側にアクセスキーの設定を持てるようなのでCircleCIを使うことにした。
Travis CIとかwerckerは設定ファイルにアクセスキーを書いてレポジトリに含めないといけないらしいので選択肢からはずした。
CircleCI
1,500 build minutes per month / 1containerは無料で使える。ブログをビルドしてデプロイするくらいであれば事足りそう。
CIの設定を追加
CIしたいレポジトリのrootにcircle.ymlを追加する。ここでは以下のファイルを作って追加した。
machine: |
簡単に説明すると、
- node.jsは0.12.10を使う
- timezoneはAsia/Tokyo
- awscliをインストール
- testは特に何もしていないのでskipする
何かを実行しないと常にNO TESTと表示されてしまうのでechoコマンドを実行しておく - レポジトリのmasterに対してはデプロイコマンドを実行する
GitHubと連携
https://circleci.com/
GitHubのアカウントを使ってログインする。
ログインしたら左側のメニューバーに表示されているADD PROJECTSでCIするプロジェクトを選択する。
AWSの鍵を設定
S3にデプロイしたり、Cloudfrontのキャッシュを削除するためにaws cliで使うので鍵を設定する。
dashboardに表示されているプロジェクトの歯車をクリックすると設定画面が表示されるので、表示された設定の下に表示されているAWS CodeDeploy
をクリックする。
AWS CodeDeploy
は使わないが、Step1のフォームに鍵を入力すると、~/.aws/credentials
に鍵の設定ができる。
動作確認
masterに変更をpushするとcircle.ymlに記述した設定内容にしたがってjobが実行される。
成功すると次のようにSUCCESSと表示される。細かな出力についても確認できる様になっている。
slackに通知
ついでにCircleCIの出力をSlackに送る。SlackのwebhookのURLをCircleCIに設定をすれば簡単に通知することができる。
Slackにログインしてユーザ設定のApps & integrations
を選択して、遷移後の画面でCircleCIを検索するとCircleCIの設定が表示されるのでAdd Configuration
をクリックする。出力するSlackチャンネルを選択するとwebhookのURLが表示されるのでそのURLをCircleCIで設定する。
PROJECT SETTINGSのChat NotificationsでSlackのWebhook URLをコピペする。
Rebuildか何かでCIを起動してjobが終わるとSlackに以下の様にメッセージが通知される。
いい感じ。
おわり。