now.shとCircle CIで継続的音速サービスリリース
この記事は 2018年 Shinjuku.LTアドベントカレンダー の1日目の記事になります!
2日目の記事はこちら =>
vue-cliとNetlifyで始めるお手軽サイトホスティング - Qiita
Shinjuku.LTってなに?って方はこちら => https://shinjukult.netlify.com
はじめに
Shinjuku.LTはコミュニティーのサイトをOSSとして開発しています!
簡単な構成
本日はバックエンドのリリースフローを簡単にご紹介します!
https://github.com/shinjuku-lt/shinjuku-lt-backend
- now.shでデプロイ
- Circle CIで自動化
1つづつ見ていきましょう!
now.shでデプロイ
now.shって何?
now.shはzeit(ツァイト?)社が作成しているPaaSです。一言で説明すると 「コマンド一つでデプロイできるサービス」 できます。超早いし、超楽です。最高。あと無料です。無敵。
これは個人的な感想ですが、趣味や勉強で開発しているプロダクトであれば現状最高のプラットフォームだと思います。
- node.js ()
- static page
- docker
でできたプロダクトであれば利用できます。
簡単にやってみましょう!
# install now.sh $ npm install now -g # 適当にexpressのアプリを作成 $ mkdir myapp $ cd myapp $ npm init $ npm install express --save
index.jsを作成し以下の内容を記載
const express = require('express') const app = express() const port = 3000 app.get('/', (req, res) => res.send('Hello World!! from now.sh!!')) app.listen(port, () => console.log(`Example app listening on port ${port}!`))
念の為起動確認
$ node index.js $ curl http://localhost:3000 > Hello World!! from now!!
アプリができたので早速デプロイしてきましょう!
$ now > Synced 3 files (13.25KB) [1s] > https://myapp-xxxxxxxxxx.now.sh [v2] [in clipboard] [1s] > ┌ ** Ready [499ms] > ├── package-lock.json > ├── index.js > └── package.json > Success! Deployment ready [8s # 念の為動作確認 $ curl https://myapp-xxxxxxxxxx.now.sh > Hello World!! from now!!
デプロイが終わりました!!(nowコマンドは初回のみ) こちらがデプロイ後のURLです! => https://myapp-xxxxxxxxxx.now.sh
Circle CIで自動化
now.shを使用してデプロイが完了しました しかし色々問題が残っているので解消しましょう!
nowコマンドでデプロイした後の改善点
- チームで安定的なデプロイができない
- ドメインが固定されない
- デプロイがローカル依存になる
この辺解決しながらCircle CIで自動化していきます。
チームで安定的なデプロイができない
now
コマンドはlocalの~/.now/auth.json
中身を見て実行されます。複数人で同一プロダクトを開発する場合かなり厄介です。
また、CIからnow
コマンドを実行しようとした場合認証情報がないのでエラーになり、メールでの認証も行えないのでコマンドが実行できません。
$ now -t ${YOUR_TOKEN}
ここからtokenを払い出してloginしていなくても、CI上からでもnowコマンドが実行できます!
ドメインが固定されない
now
コマンドでデプロイすると基本的にはhttps://myapp-xxxxxxxxxx.now.sh
ランダムなURLが毎回発行されます。サービスのURLがデプロイのたびに変わっていたら由々しき事態なので毎回固定しましょう。
$ now alias ${ALIAS_YOU_WANT}
毎回コマンド打つと大変なのでnow.json
で固定できます。
https://github.com/shinjuku-lt/shinjuku-lt-backend/blob/master/now.json
デプロイがローカル依存になる
チーム開発などの場合にはデプロイのたびにnowのインストールとtokenの共有が必要になります。 GitHubでPRレビューなどした場合は、レビューが終わってマージ後に手動でデプロイ。などのめんどっちいオペレーションが発生します。 せっかくの音速デプロイなので完全自動化しましょう!
GitHubのmasterの変更をtriggerにCircle CI(CIは別になんでもいいと思います)を設定して、環境変数に先ほどのtokenを登録して置くだけでデプロイの自動化ができます!
サンプルで、Shinjuku.LTのバックエンドで利用しているCircle CIの設定を貼っておきますのでご参考になさってください!
https://github.com/shinjuku-lt/shinjuku-lt-backend/blob/master/.circleci/config.yml
version: 2 jobs: build: docker: - image: circleci/node:8.9 branches: only: - master working_directory: ~/repo steps: - checkout - run: name: install now command: sudo npm i -g --unsafe-perm now - run: name: deploy asap now!! command: | now shinjuku-lt/shinjuku-lt-backend --public -t ${ZEIT_TOKEN} now alias -t ${ZEIT_TOKEN}
最後に
now.shとCircle CIで無料で高速デプロイする方法を紹介しました!ちなみにnow.shは最新バージョンの2.0がリリースされており。現在移行作業中です。
now.sh 2.0 を利用中の場合は本記事の内容が正しく動作しない場合があるかもしれませんのでご注意ください。