BitBucketとWerckerでウェブサイトを自動デプロイ
タイトルの通り。BitBucketとWerckerとFTP(lftp)で静的なウェブサイトを自動デプロイする方法です。
ちなみにBitBucketとWerckerを使っているのは、プライベートリポジトリを無料で使えるから。
BitBucketの設定
- Gitのリポジトリを作って、ウェブサイトのファイルをコミットしておきます
Werckerの設定
Applicationの作成
- 画面上部のCreateからApplicationを追加します。
- Choose a repositoryでは、先ほど作成したBitBucketのリポジトリを選択します。
- Ownerの設定は自分のアカウントか、共有で管理するならばOrganizationを選択します。
- Configure accessは、recommendedの設定をそのまま利用すれば大丈夫です。
デプロイ設定
アプリケーションを作成したら、SettingsのTargetsから、デプロイターゲットの設定をします。
- Deploy target nameには適当な名前を設定します。
- Auto deployにチェックを入れておくと、ビルド成功時に自動でデプロイが行われます
- また、デプロイ対象となるブランチ名(通常はmaster)を入力します。
環境変数の設定
SettingsのEnvironmental Variablesに以下のKey, Valueのペアを登録しておきます。
FTP_SERVER_URL
: サーバのURL(ftp.example.comなど)FTP_USERNAME
: FTPのユーザ名(Protectedを推奨)FTP_PASSWORD
: FTPのパスワード(Protectedを推奨)
環境変数をProtectedにしておくと管理画面等で変数の内容が表示されないので、パスワード等の情報は必ずProtectedにしておくことを推奨します。
wercker.ymlの追加
リポジトリのルートにwercker.yml
として、以下のファイルを追加します。
# This references a standard debian container from the # Docker Hub https://registry.hub.docker.com/_/debian/ # Read more about containers on our dev center # http://devcenter.wercker.com/docs/containers/index.html box: debian # This is the build pipeline. Pipelines are the core of wercker # Read more about pipelines on our dev center # http://devcenter.wercker.com/docs/pipelines/index.html build: # Steps make up the actions in your pipeline # Read more about steps on our dev center: # http://devcenter.wercker.com/docs/steps/index.html steps: - script: name: echo code: | echo "Build finished!" deploy: steps: - install-packages: packages: lftp - script: name: upload files via FTP code: | lftp -u ${FTP_USERNAME},${FTP_PASSWORD} -e "set ssl:verify-certificate no;mirror -Rev -X wercker.yml アップロード元(リポジトリ)のディレクトリ/. アップロード先(サーバ)のディレクトリ/." ${FTP_SERVER_URL}
上記の設定ファイルによって、リモートリポジトリへのpush時にWerckerで以下の内容が実行されます。
- ビルドとデプロイを行うための、debianのboxを作成
- ビルド時に
echo "Build finished!"
を実行 - デプロイ時にlftpをインストール
- lftpコマンドでリポジトリ内のファイルをサーバへミラーリングアップロード(ただしwercker.ymlはアップロードしない)
デプロイの実行
上記の設定が済んだら変更内容をcommitし、リモートリポジトリのmasterブランチへpushを行います。
ビルドやデプロイに失敗するとWerckerからメール通知が来るので、エラーメッセージを読んで適宜修正を行います。
slackへの通知
wercker.yml
に以下の行を追加すると、デプロイ(もしくはビルド)時にslackへ通知を飛ばすことができます。
after-steps: - slack-notifier: url: $SLACK_WEBHOOK_URL username: Wercker
slack側で事前にIncoming WebhookのURLを取得し、Werckerの環境変数にSLACK_WEBHOOK_URL
として当該URLを登録しておくことでslackに通知が飛びます。