【问题标题】:Jenkins pipelines, shell, and pipesJenkins 管道、外壳和管道
【发布时间】:2018-12-14 23:45:11
【问题描述】:

我正在尝试使用与 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}"

我不知道出了什么问题。

【问题讨论】:

    标签: shell jenkins pipe jenkins-pipeline


    【解决方案1】:

    好的,我现在要回答我自己的问题。引号似乎有些古怪。我为sed 删除了它们并且一切正常,即使没有整个eval 路线。这工作得很好:

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

    【讨论】: