use*_*266 20 groovy jenkins jenkins-workflow jenkins-pipeline jenkins-2
有没有更好的方法在Jenkins 2.0管道中运行shell任务,然后返回stdout命令.我能让它工作的唯一方法是将命令的输出传递给文件,然后将文件读入变量.
sh('git config --get remote.origin.url > GIT_URL')
def stdout = readFile('GIT_URL').trim()
Run Code Online (Sandbox Code Playgroud)
这似乎是一种非常糟糕的返回输出的方法.我希望我可以这样做:
def stdout = sh('git config --get remote.origin.url').stdout
Run Code Online (Sandbox Code Playgroud)
要么
def exitcode = sh('git config --get remote.origin.url').exitcode
Run Code Online (Sandbox Code Playgroud)
这可能吗?
phi*_*ert 21
是的,如luka5z所述,管道节点和进程插件版本2.4现在支持这种东西:
def stdout = sh(script: 'git config --get remote.origin.url', returnStdout: true)
println stdout
def retstat = sh(script: 'git config --get remote.origin.url', returnStatus: true)
println retstat
Run Code Online (Sandbox Code Playgroud)
似乎你试图在同一个脚本中返回两者,returnStatus将覆盖returnStdout,这有点不幸.
您可以在此处阅读官方文档中的更多内容
编辑:此外,它还允许您对失败/不稳定的构建状态进行更精细的控制.你可以在我的评论来看一个例子在这里
luk*_*a5z 19
自2016年6月起,JENKINS-26133正式被标记为已解决.因此,在尝试下面的解决方法之前,首先尝试支持/的实现,这样可以使用 和参数.shbatreturnStdoutreturnStatus
不幸的是,此功能仍然不受支持和缺失.欲了解更多信息,请参阅官方机票:
JENKINS-26133 Shell脚本获取/返回输出/状态状态:受让人:优先级:解决方案:打开Jesse Glick Major未解决
描述
目前sh没有有意义的返回值,并且如果退出状态不为零则抛出异常.很高兴有一个选项让它返回退出代码(零或不)作为整数值:
Run Code Online (Sandbox Code Playgroud)def r = sh script: 'someCommand', returnStatus: true目前的解决方法:
Run Code Online (Sandbox Code Playgroud)sh 'someCommand; echo $? > status' def r = readFile('status').trim()或者让它返回其标准输出(类似于shell反引号):
Run Code Online (Sandbox Code Playgroud)def lines = sh(script: 'dumpStuff.sh', returnStdout: true).split("\r?\n")解决方法:
Run Code Online (Sandbox Code Playgroud)sh 'dumpStuff.sh > result' def lines = readFile('result').split("\r?\n")或者在标准输入上采取一些措施:
Run Code Online (Sandbox Code Playgroud)sh script: 'loadStuff.sh', stdin: someText解决方法:
Run Code Online (Sandbox Code Playgroud)writeFile file: 'input', text: someText > sh 'loadStuff.sh < input'可能需要在持久任务中进行一些API更改.
| 归档时间: |
|
| 查看次数: |
37002 次 |
| 最近记录: |