Bitbucketでプッシュを検知して自動デプロイする方法

こんにちは!ぐち(@bloguchi)です。

まさにタイトルの通りなんですが、Bitbucketにあるソースファイルをプッシュと同時に自動でデプロイする方法がやっと解決したので手順の整理を兼ねてご紹介したいと思います。

Bitbucket

BitbucketというサービスはGitのプライベートリポジトリを無料(※条件あり)で持つことができるWebサービスです。

GithubとかGitlaboと同様のサービスですね。アカウントをまだお持ちでない方はこちらから登録を。
※インセンティブはありませんよ。笑

Pipeline

Gitのサービスにはプッシュなどのイベントをトリガーとしアクションを発動させることができる機能が備わっています。呼び方は様々でWebhookといったり、Servicesと言ったりするようですが、BitbucketではPipelineというそうです。

BitbucketではこれまでWebhookの機能を使ってbitbucket-syncというモジュールを利用した方法が多く採用されていたみたいですが、現在はこちらの機能が停止されているようです。bitbucket-syncのリポジトリ上部にも記載がありますので、ご注意ください。

設定手順

それでは画像付きで設定手順をご紹介しますね。

リポジトリ作成

※注 既存のリポジトリに自動デプロイの設定をされる方は飛ばしてください。

これはまぁ画像の通り入力して作成して頂く感じですね。

Pipeline有効化

リポジトリの左部メニューから、設定→PIPELINES [Settings]へ進みます。

Pipelineを有効化します。スイッチをオンにして、「Configure bitbucket-pipelines.yml」をクリックします。

Pipelineの設定

どのタイミングでどこに何をするのかという設定を行います。

賑やかな画面が表示されますが臆せずに下へスクロールしてください。笑

設定ファイルの中身を記入します。こちらにあるサンプルのままでも動きます。

エディタ部分ではインデントがきちんと揃っていないとエラーになりますので、ご注意ください。下記にコードを記載しておきますね。

image: samueldebruyn/debian-git

pipelines:
  default:
    - step:
       script:
        - echo "Pipeline Init"
        - apt-get update
        - apt-get -qq install git-ftp
        - echo "Initiating Push"
        - git ftp init --user $FTP_USERNAME --passwd $FTP_PASSWORD 【デプロイ先のフォルダパス】
        - echo "Done Pushing"

続いて「Commit file」をクリックするとプッシュ→Pipelineの処理が動きます。

環境変数の定義

先ほどPipeline処理が失敗に終わった原因ですが、処理内で使っているFTP_USERNAMEFTP_PASSWORDという環境変数が定義されていないためです。

Bitbucket上でPipeline用の環境変数を定義します。左部メニューから、設定→PIPELINES [Environment variables]へ進みます。

図のようにFTP_USERNAMEFTP_PASSWORDを登録してください。

Pipelineの再実行

左部メニューのPipelinesをクリックすると処理結果が表示されているかと思います。リンクになっているメッセージをクリックすると詳細内容を見ることができます。

Failedと表示されている赤い帯の右側にあるRerunをクリックして再度Pipelineを実行してください。

処理が完了するとSuccessfulと表示されて赤い帯が緑色に変わり、ほっとすることができました。笑

更新処理を受ける

次にPipelineの設定を、次回以降はリポジトリへのプッシュにて動作するように変更します。

ソースからbitbucket-pipelines.ymlを開いてください。右上にある編集を押してgit ftp initの部分をgit ftp pushに変更します。

ファイルの編集をコミットするとPipelineの処理が実行されて成功となるかと思います。

ファイルの追加

左部メニューから、概要をクリックしてください。画面下部にある「READMEの作成」をクリックしましょう。

内容は何でもOKですので、お好きなように変更してみてください。

まとめ

変更後コミットメッセージを入力するとPipelineの結果に成功と表示されるかと思います。これで、次からGitリポジトリにファイルをプッシュするだけでサーバへのデプロイも完了するようになりました。

手動でもできなくはないですが、人的ミスをなくすのと同時にルーチン作業がなくなるので自動デプロイのほうがいいですね!色々なサービスや仕組みを組合せてもっと効率良く作業を進めれるようになりたいです。

では今回はこの辺で。