やりたいこと
webアプリをdevelopユーザーで実行していて、それをjenkinsを用いてデプロイしたいときに、developユーザーでしか実行できないコマンドがあるとします。
jenkinsの実行ユーザーをdevelopにしてしまうのも手ですが、なるべくjenkinsユーザーで動かしたいと思っています。
http://qiita.com/mochidamochiko/items/377e30683f797a372103
そこでこちらの記事のを参考に特定のシェルを実行するときのみ、パスワードなしで実行できるようにしました。
設定
/home/develop/shell/deploy.sh
に実行したいshellを書いて配置します。
その後/etc/sudoers
を編集します。
直接ファイルを編集しないで、visudo
で編集してください。
visudo
で行うと編集後のファイルの整合性チェックを行うので、間違えて壊れた設定にすることを防いでくれます。
$ sudo visudo
# どこかいい感じのところへ下記を追加
jenkins ALL=(develop) NOPASSWD: /home/develop/shell/deploy.sh
これでjenkinsからsudo -u develop /home/develop/shell/deploy.sh
が実行できると思います。
$ sudo su -s /bin/bash jenkins
bash-4.2$ sudo -u develop /home/develop/shell/deploy.sh
# 正しく実行されていることを確認
複数ファイルを指定したい場合は以下のようにコンマで区切ればいいみたいです。
jenkins ALL=(develop) NOPASSWD: /home/develop/shell/deploy.sh, /home/develop/shell/test.sh
問題点
配置したシェルを頻繁に更新するなら、毎回サーバにログインして編集する必要があるので、多少面倒です。
今回のように頻繁に更新しなければそこまで問題はないです。