Bitbucket Pipelinesを使ってrsyncによるデプロイを設定してみた


現状

自分が仕事で管理しているとあるサーバでのデプロイ方法は、そのサーバにログインしてデプロイ用のシェルスクリプトを実行することで実現しています。

そのデプロイ用のシェルスクリプトでは

  1. 作業用ディレクトリを作成
  2. 作業用ディレクトリ内でgit pullを実行して本番用のソースコードをダウンロード
  3. 本番用のソースコードをrsyncでwebサーバのDocumentRoot配下にコピー
  4. 作業用ディレクトリを削除

といった手順でデプロイが行われます。

今回のゴール

デプロイ対象のソースコードはBitbucketで管理しているので、今回は「Bitbucket Pipelines」を使うことでデプロイ対象ブランチにpushされたタイミングでデプロイ(rsyncのパイプを利用)が行われるように設定してみます。

Bitbucket Pipelines機能の有効化

Bitbucketのリポジトリで初めてPipelinesを利用する場合は、Pipelinesの機能が無効化されていますので、まずは有効化する必要があります。

「Repository settings」の画面を開きます。

PIPELINESのメニューから「Settings」を選択して、「Enable Pipelines」をクリックして有効化します。

有効化するとスイッチが緑色に反転し「Configure bitbucket-pipelines.yml」のボタンが表示されるのでこれで準備OKです。

「Configure bitbucket-pipelines.yml」のボタンをクリックするとリポジトリの「Pipelines」の画面に遷移しますが、bitbucket-pipelines.ymlはまだ作成していないので特に何も起きません。

メニューから「Deployments」を選択すると「bitbucket-pipelines.yml」のデフォルト設定が表示されます。

設定手順

今回はrsyncのパイプを使いたいので、「Add Pipes (Integrations)」の「Explore more pipes」をクリックします。

Discover pipesの検索欄で「rsync」と入力するとAtlassianが提供している「RSYNC Deploy」が該当します。

「RSYNC Deploy」のパイプをクリックすると設定例が表示されます。Variablesの説明を見るとrsyncのために必要な値がわかりますので適宜これらを設定していきます。

「(*) = required variable.」の記載の通り「*」が表示されているSERVER、USER、REMOTE_PATH、LOCAL_PATHは必須項目ですので、このあたりを環境変数として設定します。
もちろんbitbucket-pipelines.yml内に値を直接記述しても構いませんが、デプロイ先のディレクトリやサーバの変更が発生する場合を考慮すると、環境変数に設定しておく方が変更が容易かと思います。

設定は、Configureの「Add variables」から行うか、

もしくは、「Repository settings」の「Repository variables」から行います。

デプロイ先のサーバアドレスなど同じ環境変数名でもデプロイ先の環境毎によって変数の値を変更したい場合があるかと思います。
そういった場合は、「Repository settings」の「Deployments」から環境毎に設定可能です。

デプロイサーバへSSHするための鍵の設定は「Repository settings」の「SSH keys」から行います。
新規に作成する場合は「Generate keys」、既存の鍵を利用する場合は「Use my own keys」を選択します。

今回は既存の鍵を利用するので「Use my own keys」をクリックして設定画面を開き、秘密鍵と公開鍵の入力が終わったら「Save key pairs」をクリックします。

保存されるとこのように表示が切り替わります。

「Host address」の欄は「サーバアドレス:ポート番号」の形式で入力して「Fetch」ボタンをクリックします。

※デプロイ先のサーバでIP制限を行っている場合は「What are the IP addresses to configure a corporate firewall?」のページに記載されている「Valid IP addresses for Bitbucket Pipelines build environments」のIPからのアクセスを許可しておく必要があります。

fingerprintが表示されたら「Fetch」ボタンのラベルが「Add host」に切り替わるのでクリックします。

Host addressとFingerprintがこのように表示されたら鍵の設定は完了です。

ここまで準備ができたらあとはリポジトリの直下に「bitbucket-pipelines.yml」を準備するだけです。
RSYNC deploy」のREADMEに記載されているExamplesのコードを参考にしつつ、以下のような内容にしました。
今回は「masterブランチ」にpushされると「deployment: Staging」の環境変数の内容を元にステージング環境へデプロイ(rsync)するという設定になっています。
今後、本番環境へのデプロイ設定を追加する場合はbranchesの下に「productionブランチ」に関する内容を追加するとよいでしょう。

bitbucket-pipelines.yml
image: atlassian/default-image:2

pipelines:
  branches:
    master:
      - step:
          deployment: Staging
          script:
            - pipe: atlassian/rsync-deploy:0.4.4
              variables:
                USER: $RSYNC_USRE
                SERVER: $RSYNC_SERVER
                REMOTE_PATH: $RSYNC_REMOTE_PATH
                LOCAL_PATH: $RSYNC_LOCAL_PATH
                DEBUG: 'true'
                SSH_PORT: $RSYNC_SSH_PORT
                EXTRA_ARGS: $RSYNC_EXTRA_ARGS

Pipelinesの処理に成功すると以下のような表示になります。

Pipelines(一覧画面)

Pipelines(詳細画面)

Deployments(一覧画面)

Deployments(詳細画面)

参考URL