昨日会社でJenkins立てた時に .ssh/config が読めなくてハマってました。
読めなかった原因というのはJenkinsを動かしてるtomcat7ユーザのホームディレクトリ*1とJenkinsが見ているホームディレクトリ*2 が食い違ってたためなのですが、そこに至るまでの原因調査で非常に低レベルなトラブルシューティングをしてたので備忘録として残しておきます。
低レベルなトラブルシューティングとは?
ここでは「Jenkinsがシェルコマンドを叩いた時にどう実行できるか」を調べることを低レベルなトラブルシューティングとしてます。
Jenkinsをインストールしてるサーバにsshで入れれば
sudo -u tomcat7 〜
でやるのが模範解答なのですが、今回は権限の関係でtomcat7ユーザになれなかったためJenkinsにシェルコマンドを実行してもらうことにしました
どうやって?
「Jenkinsの管理 -> スクリプトコンソール」でGroovyが動かせるので、Groovy経由でシェルコマンドを実行できればよさそう
Groovyでシェルコマンドを実行する方法
こんな感じ
println "whoami".execute().text
結果が下に表示される
ただ毎回 execute().text
ってtypeするのは大変なのでこういうラッパを作ると多少楽になりそう
void system(String command){ println command.execute().text }
2015/2/4 追記
自分用にスクリプトを更新。
サンプルコードに他意はありません(すっとぼけ)
参考URL: Groovy - Process Management