首页 文章

Jenkins报告构建shell语法错误但bash中没有错误

提问于
浏览
1

我想在Jenkins(v.2.17)构建步骤'Execute shell'中的gradle.properties文件中读取工件ID的值 .

要读取的行是这样的: artifactId = myArtifact

我使用的脚本命令:

ARTIFACT_ID=$((grep -Po "(?<=^artifactId).*" gradle.properties) | tr -d '=' | tr -d ' ')

jenkins作业失败并出现此错误:

/tmp/hudson7118904411564834774.sh:19:/tmp/hudson7118904411564834774.sh:语法错误:缺少'))'

但是,我可以使用bash中的适当用户在作业的工作空间目录中的同一构建计算机上执行此命令行,并且我没有语法错误!为什么詹金斯不起作用?

我知道这行由于之前和之后的调试输出而失败 . 没有更改目录命令,即 . 脚本的工作目录仍然是作业的工作空间目录 .

2 回答

  • 0

    问题是 $(( 是算术扩展的开始,用于 $((x + y)) ,它需要终止 )) 令牌 . 如果要在命令替换中使用子shell,请使用额外的空格以避免合并令牌 $((

    ARTIFACT_ID=$( ( grep ... ) ... )
    

    正如Jonathan Leffler正确地观察到的那样,在你的特定命令中, ( grep ) 的子shell是无用的,可以被消除 .

  • 2

    这个花了我一会儿!似乎Jenkins shell不喜欢我的括号 . 此命令按预期工作:

    ARTIFACT_ID=$( grep -Po "(?<=^artifactId).*" gradle.properties | tr -d '=' | tr -d ' ' )
    

相关问题