INNOBASE技術ブログ

技術的なことエンジニア的なこと制作的なこと全般

botでgitリポジトリをFTPアップロードする

以前の記事でFTPしかアップロード手段のないwebsiteをGit管理する方法を紹介しました。
FTPでアップロードしているレンタルサーバ上のWEBページをgit管理する方法 - INNOBASE技術ブログ

しかしこの方法だと、websiteの更新にサーバーサイドでコマンドを実行するスキルをもったエンジニアが介在する必要が出てきます。
できればwebデザイナだけでオペレーションを行いたいですよね?
弊社ではこれをbotで解決したので hubotの実装サンプルをご紹介します。
※ bot化しただけ

# Description
#   web site ftp deploy script.
#   ### 事前準備
#   /home/bot/website/ に対象のgit repositoryをgit clone
#   ### 処理内容
#   /home/bot/website/htdocs/ をFTPでカレント直下htdocsフォルダにsync
#
# Commands:
#   deploy website - deploy web page  (ftp)
child_process = require 'child_process'

module.exports = (robot) -> 
    robot.hear /^deploy website/i, (msg) ->
        command = "cd /home/bot/website/;git pull origin master;lftp -u <<ftpaccount>>,<<ftppass>> <<ftphostname>> -e \"mirror -R ./htdocs htdocs ;exit;\""

        msg.send "deploy website 実行します。\n===================================\n"
        command += ";echo \"==================================\""
        command += ";echo \"deploy website を実行しました。\""
        child_process.exec command, (error, stdout, stderr) ->
            msg.send stderr
            msg.send stdout

実際実行するとこんな感じ、差分も見れたりして結構良いです。

deploy website
deploy website 実行します。

===================================
Updating 96adc5c..7157fa4

Fast-forward

htdocs/index.html |    2 +-

1 files changed, 1 insertions(+), 1 deletions(-)
===================================

deploy website を実行しました。

hubotレシピ(実装例)をこちらで公開しています。
mr51/hubot_recipe · GitHub

関連記事
【chatops】 サーバー上で簡単なcommandを実行するbotのサンプル - INNOBASE技術ブログ