Edited at

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を開発しています。

毎日の時間の使い方を記録して、分析して、理想な時間の使い方に近づけるサポートをするサービスです。

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