タグ: githooks

  • git pushしたときにFTPしたりgruntタスクを実行する。

    FTPしか使えないレンタルサーバーでの案件でGitを入れようとするとき、ソースの管理って結構大変だったりします。なので、git pushしたときに自動でFTPすると、非常に便利でした。

    このgrunt-githooksと、grunt-ftpushを使ってこんなGruntfileを作ります。

    module.exports = (grunt) ->
    
    
      grunt.loadNpmTasks "grunt-ftpush"
      grunt.loadNpmTasks "grunt-githooks"
    
    
      grunt.initConfig
    
        ftpush: {
          build: {
            auth: {
              host: 'example.com',
              port: 21,
              authKey: 'pass'
            },
            src: '',
            dest: '/path/to/dir',
            exclusions: ['.*','node_modules/*','.sass-cache/']
            keep: [],
            simple: true,
            useList: false
          }
        }
    
        githooks: {
          options: {
            dest: '.git/hooks',
            hashbang: '#!/bin/bash',
            template: './node_modules/grunt-githooks/templates/shell.hb',
            startMarker: '## GRUNT-GRUNTHOOKS START',
            endMarker: '## GRUNT-GRUNTHOOKS END'
          },
          setup: {
            'pre-push': 'deploy'
          }
        }
    
      grunt.registerTask 'deploy', ["ftpush"]

    これを設定したら、以下のコマンドを実行します。

    $ grunt githooks

    これで.git/hooks/pre-pushが作成され、pushしたときにgrunt deployが実行されるようになります。grunt deployにこのコードだとFTPしか設定してありませんが、サーバーにアップロードする前にCSSやJSのコンパイル・結合・圧縮などを実行するとより、使い勝手がいいと思います。

    例:https://github.com/torounit/torounit2015/blob/master/Gruntfile.coffee

    サーバーによってはftpushではなく、grunt-rsync等を使ったほうが良い場合も多いですが基本はこんな感じで、push時にサーバーと同期を取る事ができます。

    やっぱりいろいろ自動化しておくと便利で良いですね。ファイルの同期は手動でやるとだいたいろくな事が無いので、自動化の威力がいろいろ感じられて良いかなと思います。

    note

    • gitにsourcetreeを使う場合、環境変数が読まれないので、command not found: grunt とか言われる場合があります。その場合、githooksのテンプレートをいじって、bashrcとかをexportすると良い感じになります。