Bitbucket PipelinesでプッシュをトリガーにしてWebサイトのFTPアップロードを自動化する
Webサイトを更新する際、FTPが必要な事がまあまあある。
今回は、ソースをBitbucketで管理している事が条件だが、gitのプッシュをトリガーとして様々な処理ができる、Bitbucket Pipelinesを利用しFTPで指定のサーバーへアップロードする。
Bitbucketの無料プランでも月の使用時間制限があるが、一応利用することが出来る。
目次
手順
bitbucket-pipelines.ymlの作成
リポジトリの直下にbitbucket-pipelines.ymlというファイルを作成し、以下を記述してプッシュする。
ここではmasterブランチへのプッシュをトリガーとする。
image: samueldebruyn/debian-git
pipelines:
branches:
master:
- step:
script:
- echo "Pipeline Init"
- apt-get update
- apt-get -qq install git-ftp
- git ftp init --user $FTP_USERNAME --passwd $FTP_PASSWORD $FTP_PATH
- echo "git-ftp done"
BitbuketのサイトでPipelinesの設定
Bitbucketのサイトの該当リポジトリの、
設定>PIPELINESのSettingsからEnable Pipelinesをオンにする。
次に、設定> PIPELINESのRepository variablesに以下を追加。
FTP_USERNAME:FTPのユーザー名
FTP_PASSWORD:FTPのパスワード
FTP_PATH:FTPの接続先
FTPの接続先はホスト名に続けてアップロード先のパスも記述する。
Securedをチェックすると伏せ字になるので隠したいものはチェックする。
ここで入力した情報はbitbucket-pipelines.ymlに記述しているgit ftpのFTP接続に利用される。
.git-ftp-ignoreの作成
リポジトリ直下に.git-ftp-ignoreというファイルを作成し、アップロード対象外にしたいファイルを記述する。
とりあえず以下のようにした。
.git*
bitbucket-pipelines.yml
Webサイトのデータをプッシュ&bitbucket-pipelines.ymlの修正
あとはWebサイトのデータをプッシュすると、FTP接続先に指定したサーバーにファイルがアップロードされる。
初回は多少時間がかかるが、以降はbitbucket-pipelines.yml (11行目) のgit ftp initをgit ftp pushに変更してプッシュすれば、コミットの差分だけがアップロードされるようになり高速化される。
image: samueldebruyn/debian-git
pipelines:
branches:
master:
- step:
script:
- echo "Pipeline Init"
- apt-get update
- apt-get -qq install git-ftp
- git ftp push --user $FTP_USERNAME --passwd $FTP_PASSWORD $FTP_PATH
- echo "git-ftp done"
サーバーに作成される.git-ftp.logというファイルにアップロードされた最後のコミットが記録されているので、削除しないようにする。
トリガーを手動にする
プッシュしたタイミングではなく、手動で作動させたい場合は、bitbucket-pipelines.ymlを以下のようにする。
image: samueldebruyn/debian-git
pipelines:
branches:
master:
- step:
script:
- echo "Pipeline Init"
- step:
name: Deploy to Production
deployment: production
trigger: manual
script:
- echo "Deploy to Production Init"
- apt-get update
- apt-get -qq install git-ftp
- git ftp push --user $FTP_USERNAME --passwd $FTP_PASSWORD $FTP_PATH
- echo "git-ftp done"
プッシュ後にBitbucketのサイトの該当リポジトリの Pipelines>該当のコミット のDeplayを押すことで処理されるようになる。
注意点
Bitbucketの無料プランではPipelinesの使用時間が月50分までとなっている。
ファイルが多くアップロードに時間がかかるものが多いとすぐ50分に達してしまうと思う。
ファイルが少なく軽いもので20~30秒かかる感じ。
制限を超えた場合Pipeline自体が動作しなくなる。その場合、1000分を10ドルで追加するか、月15ドル~のスタンダードプランに変更して制限を2500分にする必要がある。
まとめ
最近はAWSのS3とCloudFrontで構成されているサイトも多く、Bitbucket PipelineでS3へのアップロードとCloudFrontのキャッシュ削除を自動化しようとしていて、FTPも出来ることを知った。
S3以外のWebサーバーとCloudFrontの構成でもCloudFrontのキャッシュ削除処理を入れたり出来るので便利。
規模が大きくなければ無料プランでも使える気がするので便利。