Jenkins管道,外壳和管道

时间:2018-12-14 23:45:12

标签: shell jenkins pipe jenkins-pipeline

我正在尝试使用与Jenkins Pipelines一起使用的管道来获取Shell命令。它与:Jenkins pipeline sh does not seem to respect pipe in shell command有关。我还发现:Jenkins pipeline, bash, and pipes

但是,我的成功没有成功。我可以从字面上复制/粘贴管道中第一篇文章的解决方案,它确实可以工作(至少它尝试执行shell,由于缺少pom.xml而失败)。

当我尝试根据需要修改shell命令时,它会变平:

def bgd_discovery = $/eval "cf apps | grep ${appHost}.${host} | cut -d ' ' -f 1 | sed 's/${args.appName}-bgd//'"/$
echo "${bgd_discovery}"

Jenkins抛出DSL方法错误:

java.lang.NoSuchMethodError: No such DSL method 'eval "cf apps | grep [...app host...] | cut -d ' ' -f 1 | sed 's' found among steps [...]

它似乎在sed的/开头就停止了,但这不是问题,因为这确实有效(从第一篇文章开始):

def ver_script = $/eval "sed -n '/<version>/,/<version/p' pom.xml | head -1 | sed 's/[[:blank:]]*<\/*version>//g'"/$

有趣的是,这是问题的另一种症状:在sed正则表达式的末尾添加了连字符

def bgd_discovery = $/eval "cf apps | grep ${appHost}.${host} | cut -d ' ' -f 1 | sed 's/${args.appName}-bgd-//'"/$

产生此错误:

WorkflowScript: 26: expecting '}', found '' @ line 26, column 10.
   echo "${bgd_discovery}"

我不知道怎么了。

1 个答案:

答案 0 :(得分:0)

好的,我现在要回答我自己的问题。似乎引号里有一些胡扯。我为sed删除了它们,即使没有整个eval路线,一切也仍在起作用。效果很好:

def current_deployment = sh (
        returnStdout: true,
        script: "cf apps | grep ${appName}.apps | cut -d ' ' -f 1 | sed s/${appName}-bgd-//"
);