Jenkins の設定ファイル(jenkinsfile)からコマンドを実行してその標準出力を受け取る時、sh() を使うと思います。下記のプラグインで提供されている機能ですね。
Pipeline: Nodes and Processes
Jenkins – an open source automation server which enables developers around the world to reliably build, test, and deploy...
これは上記のサイトの説明に「Runs a Bourne shell script」とかいてあるとおり、bash の機能は使えません。たとえば下記のようにプロセス置換を使うとエラーとなります。
String hoge = sh(returnStdout: true, script: "while read v; do echo \$v; done < <(cat fugafile)")
エラーメッセージは下記のようになるはず。
syntax error near unexpected token `<'
これは下記のように /bin/sh を bash に向けていてもエラーになりました。
$ ls -l /bin/sh
lrwxrwxrwx 1 root root 4 3月 10 00:31 /bin/sh -> bash
困ったなと思って回避方法を調べました。方法は簡単で、エイヤッとシェバンをつければOKです。これで動作しました。
String hoge = sh(returnStdout: true, script:"#!/bin/bash \n" + "while read v; do echo \$v; done < <(cat fugafile)")
言われてみればそりゃそうかと思いますが、ちょっとハマったのでメモしておきます。もし参考になれば幸いです。
コメント