BASH脚本在Cygwin中运行完美,从Jenkinses“Execute shell”启动时崩溃

时间:2014-12-01 08:04:10

标签: bash shell jenkins

我和詹金斯有问题。我有一个像这样的循环(嵌入在for ... do..done循环中)

var=$(head $file | grep ERROR)

if [ ! -z "$var" ]; then
  echo "Some error message"
  .././converter.sh $file $file.TMP $file.ERR.txt
  RESULT=$(expr $RESULT + 10)
fi

这个循环在从Cygwin发布时非常有效,但在Jenkins上启动时崩溃...... Jenkins从口中吐出的所有信息都是:

08:55:50 + for file in '*.DATA'
08:55:50 ++ grep ERROR
08:55:50 ++ head TESTFILE_1.DATA
08:55:50 + var=
08:55:50 Build step 'Execute shell' marked build as failure
08:55:50 Archiving artifacts

1 个答案:

答案 0 :(得分:2)

在带有Execute Shell的Jenkins下运行(来自Execute Shell构建步骤的帮助文档):

  

默认情况下,将使用“-ex”选项调用shell。因此,所有命令在执行之前都会被打印,如果任何命令以非零退出代码退出,则构建被视为失败。再次,添加#!/ bin / ...行来改变这种行为。

重申一下,这意味着任何错误(例如grep退出时出现错误代码)都会导致脚本过早退出并出现错误。通常,当您执行此脚本时,它可能会成功,因为set -e不是默认值。

确定这确实是问题的任何简单测试都是将Execute Shell脚本的第一行设置为#!/bin/sh -x