2

Jenkinsでシェルスクリプトを使用しています。このスクリプトは、ある時点で、curlを使用してサーバーにファイルをアップロードします。出力curlが生成するものを確認するだけでなく、それが期待する出力であるかどうかも確認したいと思います。そうでない場合は、シェルエラーコードを> 0に設定して、スクリプトが失敗したことをJenkinsが認識できるようにします。

最初にを使用してみcurl -fましたが、アップロードが失敗するとすぐにパイプが切断され、エラー出力がクライアントに届きません。それから私はこのようなことを試みました:

curl ...params... | tee /dev/tty | \
  xargs -I{} test "Expected output string" = '{}'

これは通常のSSHシェルから機能しますが、Jenkinsコンソールの出力には次のように表示されます。

tee: /dev/tty: No such device or address

Jenkinsが通常のSSHシェルを使用してスレーブと通信していると思ったので、これがなぜなのかわかりません。いずれにせよ、xargs + test全体が、ちょっとしたハックだと思います。

Jenkinsでこれを実現して、出力を確認し、特定の文字列と一致するかどうかをテストする方法はありますか?

4

2 に答える 2

5

JenkinsがSSH経由でスレーブと通信する場合、端末は割り当てられていない/dev/ttyため、そのプロセス用のデバイスはありません。

多分あなたは/dev/stderr代わりにそれを送ることができますか?これは、対話型セッションでは端末になり、非対話型セッションではいくつかのログファイルになります。

于 2011-09-23T16:36:52.097 に答える
0

curlを使用する代わりに、 Publish over SSHプラグインを使用することを考えましたか?あなたにいくつかの頭痛を救うかもしれません。

ファイルをマスターからスレーブにコピーするだけの場合は、そのためのプラグインもあります。スレーブプラグインにコピーしてください。

まだコメントが書けないので、回答として投稿しました。

于 2011-09-23T16:35:46.560 に答える