Bitbucket Pipelinesでデブロイしてみる

Bitbucketの仕様変更で「POST」が使用できなくなったので、「BitBucket Sync」が機能しなくなってしまった。結構便利だったのに。
(以前に登録したプロジェクトではPOSTがまだ使用できるか、いつか無くなると思う)

代わりに「Bitbucket Pipelines」を使用してデブロイするらしいので、pipelinesを設定してみた。

BitBucket Sync」に使い方の説明がある。

(1)Bitbucketの「設定」「Pipelines」「Settings」で「enable」

(2)「Environment variables」でFTPユーザーとFTPパスワードを設定する

(3)「bitbucket-pipelines.yml」を設定する

image: PHP:5.5.38

pipelines:
  default:
    - step:
      script:
        - echo "Pipeline Init"
        - apt-get update
        - apt-get -qq install git-ftp
        - echo "Initiating Push"
        - git ftp init -u $FTP_USERNAME -p $FTP_PASSWORD ftp://FTPサーバー名/アップロドするDIR/
        - echo "Done Pushing"

サンプルと同じOKですが、「image」は何でも良いらしい。プロジェクト名とか
FTPを使用するので、FTPサーバー名とDIRを設定する。
FTPソフトで繋いだ時に、/public_htmlの中がデフォルトなのか、外がデフォルトなのかで変わるけど、
中だと、ftp://example.com/test_dir/
外だと、ftp://example.com/public_html/test_dir/

コミットすると自動的にpipelinesが動くので、「Pipelines」のメニューで状況を確認する。

問題があれば「Failed」になるので、ログを見て確認する。
「git ftp」でエラーの場合は、「git ftp init -vv ・・・・・」のように「-vv」を付けてエラーを表示して、どこでエラーなのかを確認し対応する。

「git ftp init」なので、pipelineが正常に終了すると、サーバーに「.git-ftp.log」が作られる

ログができれば初回のアップロードは終了なので、ログができるまで待つ。
Bitbucketに大量にファイルがあると時間がかかるので、気長に終わるのを待つしかありません。

(4)「bitbucket-pipelines.yml」を変更する

image: PHP:5.5.38

pipelines:
  default:
    - step:
      script:
        - echo "Pipeline Init"
        - apt-get update
        - apt-get -qq install git-ftp
        - echo "Initiating Push"
        - git ftp push -u $FTP_USERNAME -p $FTP_PASSWORD ftp://FTPサーバー名/アップロドするDIR/
        - echo "Done Pushing"

「git ftp init」を「git ftp push」に変更する。
pushにすることで、次回以降、プッシュした変更差分のみアップロードされるようになる。


今回のサーバーはAWS EC2でpemキーでsftpをしていましたが、pipelinesでsftpを行うのにSSH KEYの設定が上手くできなかった。
git-ftpはcurlを使うようだが、ログイン認証で失敗したりで、CURLのエラーが出まくりだった。
新規でFTPユーザーを作り、パッシブモードでFTPを設定し直しました。
参考:ec2にてftpでパッシブを使用するときにハマったポイント | 株式会社ビヨンド

パッシブモードでFTPできるサーバーであれば、今回のPipelineで簡単にデブロイできると思う。
PipelinesはBitbucketへの登録状況で使える分数と料金があるらしいので、注意が必要かと。それほど高い料金ではないと思うが。

ちなみに、FTPするユーザーが違うと、エラーになる場合があるので、ユーザーを統一した方がいいと思う。

ー以上ー

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)