やりたいこと

Node.jsのプロジェクトをデプロイしたかったわけなのですが、直接デプロイするわけではなく、次のことがやりたいと思いました。

  • テストの通ったものだけデプロイしたい
  • JS/CSSをminifyしたい
  • 成果物だけをデプロイしたい
  • Azureの管理画面でボタン一つでロールバックしたい

WebAppsへのデプロイ方法

WebAppsへのデプロイ方法次に列挙してみました。残念ながらCIサービスVisual Studio Onlineのみですね。(Visual Studio Onlineでよくね?ということは考えないでおく。)

  • WebDeploy
  • FTP/FTPS
  • Local Git Repository
  • Github
  • Dropbox
  • Bitbucket
  • CodePlex
  • Visual Studio Online
  • External Git Repository

さてさて、デプロイについてはちょっと考える必要がありそうです。

-8/30 誤字修正-

Local Git Repositoryを使おう

Azureの管理画面でボタン一つでロールバックしたかったので、とりあえずFTP/FTPSはなしですね。Dropboxはチームアカウントとかなかったのと明示的にポータルで更新ボタン押さないと最新のものをデプロイできなかった気がするのでなしです。

CircleCIはUbuntuなのでWebDeployもなしです。そうするととりあえずLocal Git Repositoryにするしかなさそう。

さていろいろ考えた結果、結論は次のようになりました。

machine:
  node:
    version: 0.12.6

dependencies:
  override:
    - git clone ${DEPLOY_TARGET_REPOSITORY} deployment
    - npm install -g gulp mocha
    - npm install

deployment:
  production:
    branch: master
    commands:
      - gulp
      - chmod +x ./deploy.sh
      - ./deploy.sh

まず最初に、WebAppsのLocal git repositoryをdeploymentとしてクローンします。
DEPLOY_TARGET_REPOSITORYは環境変数としてCircleCIに設定しておきます。
https://{デプロイアカウント}:{パスワード}@{アプリ名}.scm.azurewebsites.net:443/……

という感じにしておけばパスワードを与えられるので、対話処理をなくせます。
次に、gulpとかでminifyしたりconcatします。このとき実行時に必要なものだけをdeploymentフォルダにコピーします。
コピー処理はgulpでやりました。
あとは、deploy.shを実行します。
deploy.shはただのコミットとプッシュです。

#!/bin/bash
git config --global user.email "{email}"
git config --global user.name "{username}"

cd deployment
git add .
git commit -am "Circle CI #$CIRCLE_BUILD_NUM"
git push origin master 

CIRCLE_BUILD_NUMはCircle CIのビルド番号です。ちょっと味気ないコミットメッセージですが、何かあったときにロールバックするなら十分かなと。

image

まとめ

特にトリッキーなことをしてるわけでもなく、Azure特有というわけでもありませんが、この方法は結構いろいろ使い道がありそうです。

あと、CI楽しい。

CATEGORIES