热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Jenkins管道sh似乎不尊重shell命令中的管道

如何解决《Jenkins管道sh似乎不尊重shell命令中的管道》经验,为你挑选了1个好方法。

我在版本2.32.2的管道中使用Jenkins文件.

由于各种原因,我想从pom中提取版本字符串.我希望我不必添加maven帮助插件并使用evaluate.

我很快想出了一个小的sed表达式,将它从使用管道的pom中取出,并在执行程序的jenkins工作区中的命令行上运行.

$ sed -n '//,///g' 1.0.0-SNAPSHOT

它可能会被优化,但我想理解为什么管道似乎在管道sh命令失败.我玩过各种字符串格式,目前正在使用一个美元的字符串.

管道步骤如下所示,以便轻松输出命令字符串:

script {
    def ver_script = $/sed -n '//,///g'/$
    echo "${ver_script}"
    POM_VERSION = sh(script: "${ver_script}", returnStdout: true)
    echo "${POM_VERSION}"
}

当在jenkins管道中运行时,我得到以下控制台输出,它似乎将管道命令分离为单独的命令:

[Pipeline] script
[Pipeline] {
[Pipeline] echo
sed -n '//,///g'
[Pipeline] sh
[FRA-198-versioned-artifacts-44SD6DBQOGOI54UEF7NYE4ECARE7RMF7VQYXDPBVFOHS5CMSTFLA] Running shell script
+ sed -n //,///g
sed: couldn't write 89 items to stdout: Broken pipe
[Pipeline] }
[Pipeline] // script

关于如何在jenkins文件中正确使用管道命令的任何指导?



1> sporkthrower..:

我终于对它进行了一些思考,并意识到管道子壳可能导致了这个问题.我知道一些eval的邪恶,但我最终在eval中包装它:

script {
    def ver_script = $/eval "sed -n '//,///g'"/$
    echo "${ver_script}"
    POM_VERSION = sh(script: "${ver_script}", returnStdout: true)
    echo "${POM_VERSION}"
}   


推荐阅读
author-avatar
mobiledu2502870587
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有