【问题标题】:Jenkins Pipeline Plugin: execute shell and parse outputJenkins Pipeline Plugin:执行shell并解析输出
【发布时间】:2016-03-30 09:00:00
【问题描述】:

我正在使用 Jenkins Pipeline 插件来执行 iOS Checkout-Build-Test-Deploy 管道。

其中一个步骤涉及检查 iDevice 是否实际连接(否则将不会执行其余步骤)。

我想执行一个shell命令idevice_id -l(来自libimobiledevice),它将打印出连接设备的设备ID,如果没有连接则失败。

所以我设想的步骤是:

  • 执行命令sh "/usr/local/bin/idevice_id -l"
  • 以某种方式解析输出
  • 如果此命令不返回任何内容,则失败。

我已经阅读了大部分官方文档,但还是一片空白。如何解析sh 步骤的输出? 如果我以错误的方式处理此问题,欢迎提出任何其他建议。

【问题讨论】:

    标签: jenkins jenkins-workflow jenkins-pipeline


    【解决方案1】:

    正如this answer 中提到的,从 Pipeline: Nodes and Processes 的 2.4 版开始,您可以使用:

    def out = sh script: '/usr/local/bin/idevice_id -l', returnStdout: true
    

    【讨论】:

    • org.codehaus.groovy.control.MultipleCompilationErrorsException: startup failed: WorkflowScript: 43: Expected a step @ line 43, column 17. def out = sh script: './script.sh', returnStdout: true ^ 1 error
    【解决方案2】:

    官方的方法是将输出重定向到文件中并读取文件

    如果输出文件为空,您可以使用管道脚本命令error "no device connected" 使作业失败

    Example on github

    【讨论】:

    • 太棒了!这对我来说很好。 sh('/usr/local/bin/idevice_id -l > DEVICE_ID'); deviceId=readFile('GIT_COMMIT')
    • 这不再是“官方”方法/解决方法,请参阅 this answer 了解更新方法。