質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.37%
Jenkins

Jenkinsとは、Apache TomcatなどのServletで動作しているサーバーベースシステムです。Jenkinsはオープンソースであり、LInux,Mac OS X,Windows,Solaris,FreeBSDとOpenBSDのためのパッケージがあります。

シェル

シェル(shell)はUnix や Linux 系のOSで使用されるコマンドインタプリタを指します。

Q&A

解決済

2回答

24947閲覧

Jenkinsから実行されたシェルスクリプトの戻り値を取得したい

MiyamotoSatoshi

総合スコア30

Jenkins

Jenkinsとは、Apache TomcatなどのServletで動作しているサーバーベースシステムです。Jenkinsはオープンソースであり、LInux,Mac OS X,Windows,Solaris,FreeBSDとOpenBSDのためのパッケージがあります。

シェル

シェル(shell)はUnix や Linux 系のOSで使用されるコマンドインタプリタを指します。

0グッド

1クリップ

投稿2016/09/12 07:24

編集2016/09/12 09:39

■質問
シェルスクリプトの戻り値を取得したくてreturn.shという値を返すだけのスクリプトを作成しました。
そして、その戻り値をJenkins側から受け取りたいのですがやり方がわかりません。
Jenkins側でシェルスクリプトの戻り値を取得する方法を教えていただけないでしょうか?

■Jenkins側シェルの実行に書いたスクリプト

# シェルスクリプトの実行 sh return.sh val=$(myfunc) #echo $val

■シェルスクリプト(return.sh)

myfunc() { value=255 return $value }

■最終的にやりたい事
シェルスクリプトの戻り値によって、
次のジョブに渡すパラメータを変更したい。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

Jenkinsで試したわけではないですが、戻り値はreturnではなくexitです。

Jenkins側

myfunc() { # シェルスクリプトの実行 sh return.sh value=$? echo $value }

return.sh

value=255 exit $value

投稿2016/09/12 07:41

moonphase

総合スコア6621

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

MiyamotoSatoshi

2016/09/12 08:05

exitにすることで0(=正常終了)は返ってくるになったのですが、 任意の値を返すことができず引き続き調査中です。
moonphase

2016/09/12 08:29

試しに固定でexit 255としてみてはいかがでしょうか? それで返り値が取れない場合は、echoして呼び出し側は出力から結果を得ましょう。
MiyamotoSatoshi

2016/09/12 09:42

exit 255 として駄目だったので、 こちら(http://www.searchman.info/tips/3180.html)を 参考にして下記を試してみたのですが Jenkins側から呼ぶシェルも下記にしてみたのですが、 val=$(myfunc) の行でmyfunc: command not found になり、 どうしようかと悩んでるところです。 #シェルスクリプト myfunc() { echo 255 } # Jenkins側シェルスクリプト # シェルスクリプトの実行 sh return.sh val=$(myfunc) #echo $val
moonphase

2016/09/13 02:28

valにechoした値を入れたいなら、以下のコードです。 # Jenkins側シェルスクリプト val=`sh return.sh`
MiyamotoSatoshi

2016/09/13 04:58

ご回答ありがとうございます。 echoするだけで取得できました。 関数のようなものを構築する必要はなかったみたいです。 ■呼び出されるシェルスクリプト echo 2 ■Jenkins側シェルスクリプト value=`sh return.sh` echo $value ■Jenkins実行結果 ++ sh return.sh + value=2 + echo 2 2 Finished: SUCCESS
guest

0

How to mark Jenkins builds as SUCCESS only on specific error exit values (other than 0)?

こちらを参照すると、Jenkinsにてこうすればできそうです。

shell

1# 多分絶対パスで書くのが確実です 2/path/to/return.sh 3 4if [ "\$?" == "$EXPECTED_EXIT_CODE" ]; then 5 # do anything 6else 7 # something else 8fi

return.shはexitでもreturnでもどちらでも良いと思います。

投稿2016/09/12 10:17

issei.

総合スコア326

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

MiyamotoSatoshi

2016/09/13 00:57

ご回答ありがとうございます、 return.sh 側の戻り値にEXPECTED_EXIT_CODEを返すようにして 試してみます。
MiyamotoSatoshi

2016/09/13 01:59

すいません、まだわかってないです。 return.shからわざとエラーコードを返すことができず 調査中です。 ■return.sh myfunc() { exit "$EXPECTED_EXIT_CODE" } ■Jenkins側シェル chmod 777 ~/return.sh bash -c ~/return.sh echo $? if [ "\$?" == "$EXPECTED_EXIT_CODE" ]; then # do anything echo 1 else # something else echo 2 fi ■Jenkins実行結果 + chmod 777 /Users/temp/return.sh + bash -c /Users/temp/return.sh + echo 0 0 + '[' '$?' == '' ']' + echo 2 2 Finished: SUCCESS
issei.

2016/09/13 02:51

最終的にどうしたいのかいまいち見えていないのですが、 ■return.sh exit 2 とすればmoonphaseも仰っている通り、エラーを返せると思います。
MiyamotoSatoshi

2016/09/13 05:04

>最終的にどうしたいのかいまいち見えていないのですが すいません、Jenkins側で実行したシェルの戻り値を自由に取得して それを次のジョブに渡したいというのが趣旨なのですが 戻り値の取得方法がわからず四苦八苦していたという現状です。 exit 2 で Build step 'シェルの実行' marked build as failure とエラーが出たので echo 2 とするとmoonphaseさんのコメントにも書きましたが2という数値を取得することができました。 関数のようなものを特に使わずechoのみでいけました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.37%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問