BitbucketのPiplinesを使ってCD(継続的デリバリー)を実装する


友人との開発で、Owntimeを作っています。
このサービスは、時間の使い方を管理して、生活の振り返りをするきっかけを作ってくれます⏰「最近、生活の振り返りができていないな〜」っていう方は、ぜひ、一度使ってみてください!!

さて、今回は、Owntimeの開発業務効率化のために実装した、CD(継続的デリバリー)についてまとめました。
リリース作業は、単純操作が多くて、面倒になることが多いので、自動化したいと思う方が多いと思います。そのような方々に向けた記事になっています。

参考記事: Bitbucket Pipelinesで継続的デプロイ

Bitbucketの設定

まず、Bitbucket上で設定を進めます。

  • Piplinesを有効化する
    • サイドバーの「設定」->「Settings」->「Enable Pipelines」を有効化する
  • 新しいSSH Keyを登録する
    • サイドバーの「設定」->「SSH Keys」->「generate keys」を押下する
    • 生成された Public keyを仮想サーバーの ~/.ssh/authorized_keys に追記する
    • 「Known hosts」の「Host address」に仮想サーバーのIPを入力して「Fetch」を押下する
    • Fetchが成功したら、 Figerprint ができるので、「add host」を押下する

bitbucket-piplines.ymlを作成

サイドバーにある「Piplines」を押下すると下記の画面になります。

さらに「Python」を選択すると、 bitbucket-piplines.yml のテンプレートが表示されます。

bitbucket-piplines.yml は、下記のように編集します。

bitbucket-pipelines.yml
image: python:3.7.3

pipelines:
  branches:
    master:
      - step:
          name: Release to live server
          script:
            - ssh -p $DEPLOY_SERVER_PORT $BITBUCKET_BRANCH@$DEPLOY_SERVER_IP bash < deploy.sh

さらに、仮想サーバー内で実行するコマンドは、 deploy.sh に記入します。

(deploy.shを用意するのは、イマドキではないと言われることがあるので、時間に余裕ができたら、改修する予定です。)

deploy.sh
#!/bin/bash

cd /path/to/project

export VENV_HOME_DIR=$(pipenv --venv)
source $VENV_HOME_DIR/bin/activate

git pull origin master

pip install -r requirements.txt

pkill gunicorn
gunicorn owntime.wsgi -D

echo "Deployed! Thank you!!"

これで、実装が完了です。

masterブランチにマージしてみてください。
「Piplines」を押下すると、成功しているのか失敗してしまったのか、が表示されています!

今後の修正点

deploy.sh の途中の処理に失敗しても、最後のコマンドまで実行されて、Bitbucket上では、 Successful になってしまいます。

なので、処理が失敗したら、Bitbucket上で、 Failed にするような変更をしていきたいです。

おまけ

今回紹介したTipsを使って、友人とOwntimeを開発しています。
毎日の時間の使い方を記録して、分析して、理想な時間の使い方に近づけるサポートをするサービスです。

ぜひ、一度使ってみてください!