吉本集の個人ブログ
Web制作の技術について書いています。たまに日記も書きます。

BacklogのWebフック機能で、サーバー環境を自動デプロイする方法

2017年3月16日 / category : lab

前回更新した記事は、コーディング作業者が1人完結の場合に便利な設定ですが、
チームでコーディングする場合は、Backlogなどのプロジェクト管理ツールを使用すると便利です。

前回の記事
SourceTreeでGit psuh(プッシュ)するとサーバー環境に自動でデプロイ!

今回は、Backlogを使用した自動デプロイ設定を紹介したいと思います。

Backlogを利用する場合は、BacklogのWebフックという機能を使って、リポジトリにpushされた際に、サーバーに設定したデプロイファイル(phpファイル)を叩く流れになります。

一連の流れは上のようなイメージなります。

■環境
OS : Windows10
サーバー: heteml
バージョン管理: SourceTree
バージョン管理システム: Git(2.8.1)
プロジェクト管理ツール: Backlog
■流れ
1. ローカルにあるファイルを更新する。
2. SourceTreeでpush、BacklogのWebフック機能が実行される。
3. BacklogのWebフック機能で、サーバーに用意したデプロイ用のphpファイルを叩く。
4. PHPから”git fetch”を実行し、サーバーに用意したGitリポジトリからBacklogのGitリポジトリの最新を取得する。
5. PHPから”git checkout”を実行し、指定ディレクトリ(テスト環境)のファイルを更新する。
■用意する環境
・ローカルリ作業環境 → test-backlog-auto-deployフォルダを作成しました。ここが作業環境とします。
・サーバー環境(テスト環境) → サーバーにtest-backlog-auto-deployフォルダを作成します。ここがテスト環境となります。
→ 私の場合は、http://tsudoi.aru-inc.co.jp/test-backlog-auto-deploy/ がテスト環境です。
・Backlogプロジェクト → Backlog上で生成するリモートリポジトリが必要

まずは、下準備!Backlog上でGitリポジトリを作成

Backlogで、プロジェクトを作り、Gitリポジトリを追加します。
私の場合は、https://xxxx.backlog.jp/git/プロジェクトキー/repo.git
としました。

サーバー環境にBacklogのリポジトリをクローン

コマンドプロンプトを起動し、SSH接続でログインし、サーバー上の該当ディレクトリまで移動します。
移動したところで、次のコマンドを実行し、Backlogのリポジトリをクローンします。

コマンドプロンプト
git clone --mirror https://[ユーザ名]:[パスワード]@xxxx.backlog.jp/git/プロジェクトキー/repo.git

クローン後は、次のような感じになります。

問題なくクローンされるとサーバーの該当ディレクトリ(私の場合は、test-backlog-auto-deployフォルダ)に、repo.gitというGitリポジトリが生成されます。

SourceTreeの設定

続いて、SourceTreeを起動し、Backlogのリポジトリを指定し、ローカル環境にリポジトリを生成します。
SorceTreeの操作については割愛します。
ローカル環境の作業ディレクトリに.gitフォルダができました。
→ 私の場合は、/test-backlog-auto-deploy/.git

同階層にindex.htmlファイルを生成し、SorceTreeでプッシュします。
→ 私の場合は、/test-backlog-auto-deploy/index.html

サーバー環境で、fetchとcheckoutを実行

コマンドプロンプトに戻り、先ほどクローンしたリポジトリの動作確認をします。
まずは、fetchします。

コマンドプロンプト
git --git-dir=/home/sites/heteml/xxxxxx/web/tsudoi/test-backlog-auto-deploy/repo.git fetch

これで、Backlogのリポジトリの最新情報を取得しました。
先ほど、index.htmlをプッシュした履歴が取得されたことになります。

続いて、checkoutします。

コマンドプロンプト
git --git-dir=/home/sites/heteml/xxx/web/tsudoi/test-backlog-auto-deploy/repo.git --work-tree=/home/sites/heteml/xxx/web/tsudoi/test-backlog-auto-deploy/ checkout -f

これで、サーバー上のファイルが更新されました。
サーバーの該当ディレクトリにindex.htmlが追加されていると思います。

正しく動作されていることが確認できました。
それではこの一連の流れを自動化します。

[自動化] 自動デプロイ用のPHPファイルをサーバーに設置する

自動デプロイのPHPスクリプトが書けるわけもなく、ネット上で探しました。
こちらを参考にさせていただきました。

Git Webhookを使ったCPIへのデプロイスクリプト

大変助かりました。
ただ、何が問題なのかわからないのですが、このスクリプトだとBacklogからポストされる $_POST['payload'] の値が正しくjson形式に変換されず・・・、少々調整させていただきました。

もし、同じ壁にぶち当たった場合、私の環境で正しく動作するスクリプトを下記にアップしておきましたので、参考にどうぞ・・・。

デプロイ自動化PHPファイル(zipファイル)

このPHPファイルを、該当のディレクトリにアップします。
→ 私の場合は、http://tsudoi.aru-inc.co.jp/test-backlog-auto-deploy/backlog-deploy.php
(危険なので、実際はアップしていません。)

[自動化] Backogで、Webフックを設定

先ほどアップしたデプロイ自動化PHPファイルのパスを、Backlog上で設定します。
設定する画面は、次の場所です。

ベーシック認証をかけている場合は、

http://[user_id]:[password]@http://xxxxxxx/backlog-deploy.php

で設定すれば、アクセスされます。

以上で完了です。
実際に、ローカル作業環境にあるファイルを更新し、SourceTreeでプッシュしてみてください。