くりにっき

フルスタックキュアエンジニアです

JenkinsとGroovyで低レベルなトラブルシューティングをする

昨日会社でJenkins立てた時に .ssh/config が読めなくてハマってました。

読めなかった原因というのはJenkinsを動かしてるtomcat7ユーザのホームディレクトリ*1とJenkinsが見ているホームディレクトリ*2 が食い違ってたためなのですが、そこに至るまでの原因調査で非常に低レベルなトラブルシューティングをしてたので備忘録として残しておきます。

低レベルなトラブルシューティングとは?

ここでは「Jenkinsがシェルコマンドを叩いた時にどう実行できるか」を調べることを低レベルなトラブルシューティングとしてます。

Jenkinsをインストールしてるサーバにsshで入れれば

sudo -u tomcat7 〜

でやるのが模範解答なのですが、今回は権限の関係でtomcat7ユーザになれなかったためJenkinsにシェルコマンドを実行してもらうことにしました

どうやって?

「Jenkinsの管理 -> スクリプトコンソール」でGroovyが動かせるので、Groovy経由でシェルコマンドを実行できればよさそう

f:id:sue445:20140531024909p:plain

Groovyでシェルコマンドを実行する方法

こんな感じ

println "whoami".execute().text

結果が下に表示される

f:id:sue445:20140531025116p:plain

ただ毎回 execute().text ってtypeするのは大変なのでこういうラッパを作ると多少楽になりそう

void system(String command){
    println command.execute().text
}

f:id:sue445:20140531025441p:plain

2015/2/4 追記

自分用にスクリプトを更新。

f:id:sue445:20150204155514p:plain

サンプルコードに他意はありません(すっとぼけ)

参考URL: Groovy - Process Management

*1:/usr/share/tomcat7

*2:/var/lib/tomcat7 = CATALINA_BASE