仙台ファクトリーのkish(@31_kish)です。
ローカル環境で書いたブログの記事をPushすると、自動的にサーバーが更新される機能を実装しました。
RubyでCGIを作って、GithubWebhooksを受け取るようにしています。
とりあえずスクリプトを書く
1
|
|
CGIのほうは、実行されたらシェルスクリプトを叩くだけです。
何をやっているのか公開してしまうのが不安だったので、シェルスクリプトを経由するようにしています。
1 2 3 4 5 |
|
シェルスクリプトは、実行された日付を出力して pull
コマンドを user
権限で実行する
というものです。(実際のスクリプトとは少し違います。)
CGIを有効にする
Apacheの設定で有効にします。
1
|
|
1 2 3 4 5 |
|
Apacheがsudoで実行できるコマンドを制限する
1
|
|
visudo
で制限します。
1 2 |
|
sudoを実行するためにはtty(SSHクライアントやコンソール上での実行)が必須です。
そのままではwebから実行することができないので、1行目でapacheユーザーのみ
必須ではなくしています。
2行目では、apacheユーザーは外部からのアクセスを許可し、user権限でのみ
sudoを実行できるようにしています。
その後ろはパスワードなしで実行できるコマンドを制限しています。
Githubの設定をする
GithubのリポジトリのSettings
から Webhooks & services
を設定して完了です。
Githubの設定を行う前に、スクリプトのテストは十分に行うようにしましょう。