Yura YuLife

ITエンジニアの覚え書き。

BitBucketとWerckerでウェブサイトを自動デプロイ

タイトルの通り。BitBucketWerckerFTP(lftp)で静的なウェブサイトを自動デプロイする方法です。

ちなみにBitBucketとWerckerを使っているのは、プライベートリポジトリを無料で使えるから。

BitBucketの設定

  • Gitのリポジトリを作って、ウェブサイトのファイルをコミットしておきます

Werckerの設定

Applicationの作成

f:id:yurayur:20160410183320p:plain

  • 画面上部のCreateからApplicationを追加します。
  • Choose a repositoryでは、先ほど作成したBitBucketのリポジトリを選択します。
  • Ownerの設定は自分のアカウントか、共有で管理するならばOrganizationを選択します。
  • Configure accessは、recommendedの設定をそのまま利用すれば大丈夫です。

デプロイ設定

アプリケーションを作成したら、SettingsのTargetsから、デプロイターゲットの設定をします。

f:id:yurayur:20160410183806p:plain

  • 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を推奨)

f:id:yurayur:20160410184231p:plain

環境変数を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に通知が飛びます。

f:id:yurayur:20160410185520p:plain

参考URL