我正在尝试使用与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}"
我不知道怎么了。
答案 0 :(得分:0)
好的,我现在要回答我自己的问题。似乎引号里有一些胡扯。我为sed
删除了它们,即使没有整个eval
路线,一切也仍在起作用。效果很好:
def current_deployment = sh (
returnStdout: true,
script: "cf apps | grep ${appName}.apps | cut -d ' ' -f 1 | sed s/${appName}-bgd-//"
);