Groovy Jenkins 脚本中的 sh 命令

Posted

技术标签:

【中文标题】Groovy Jenkins 脚本中的 sh 命令【英文标题】:Sh command inside Groovy Jenkins script 【发布时间】:2019-01-23 22:18:00 【问题描述】:

我有创建link.txt 文件的shell 脚本。 在某些服务器中创建的 link.txt 文件(我们称之为“jacoco 服务器”)。

现在,在 Jenkins 管道作业中的 Groovy 脚本中, 我试图通过以下方式在对服务器执行 ssh 时获取此文件内容:

sh "/usr/bin/sshpass -p passJac1 ssh -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no $JACOCO_URL \"link=cat $WORKING_DIR/jacoco_link/link.txt\""

请忽略其余所有内容,并专注于这一行:

link=cat $WORKING_DIR/jacoco_link/link.txt\

我已经尝试了几个选项来获取 link.txt 内容并将其保存在链接变量中,但是管道作业失败并出现不同的语法错误。

我也通过以下命令尝试过

link=$(<$WORKING_DIR/jacoco_link/link.txt)

但管道作业再次失败(“无法接受获取

请指教

【问题讨论】:

嗨,如果我错了,请纠正我。你一定想要link=$(cat $WORKING_DIR/jacoco_link/link.txt),不是吗? Yuiry,谢谢你的建议,但是非常喜欢它,并使用以下消息将其标记为错误的语法:“美元符号后的非法字符串主体字符;解决方案:要么转义文字美元符号” \$5" 或将值表达式 "$5" 括起来。 伊莱,我明白了。我的第二个猜测是 $WORKING_DIR 是在本地机器上评估的,而远程机器上不存在该路径。如果我是你,我会尝试手动指定 link.txt 的正确完整路径。如果这有帮助,我会找到一种方法让 $WORKING_DIR 在远程环境中进行评估,而不是在本地环境中。 【参考方案1】:

我相信你需要的是

link=`cat $WORKING_DIR/whatever`

带有反引号。您不希望自己的喜好成为“随便什么”,而是执行该操作的结果。

【讨论】:

以上是关于Groovy Jenkins 脚本中的 sh 命令的主要内容,如果未能解决你的问题,请参考以下文章

Groovy Init 中的 Jenkins 环境变量

通过Jenkins执行Groovy命令:“find:缺少`-exec'的参数”

Jenkins 在 groovy 脚本中检索主动选择参数

Sed命令忽略Groovy脚本中的单引号

jenkins执行groovy 脚本报错

jenkins2 -pipeline 常用groovy脚本