【问题标题】:Jenkins pipeline - How to read the success status of build?Jenkins 管道 - 如何读取构建的成功状态?
【发布时间】:2019-07-09 21:44:16
【问题描述】:

以下是运行构建后的输出(成功):

$ sam build
2019-06-02 15:36:37 Building resource 'SomeFunction'
2019-06-02 15:36:37 Running PythonPipBuilder:ResolveDependencies
2019-06-02 15:36:39 Running PythonPipBuilder:CopySource

Build Succeeded

Built Artifacts  : .aws-sam/build
Built Template   : .aws-sam/build/template.yaml

Commands you can use next
=========================
[*] Invoke Function: sam local invoke
[*] Package: sam package --s3-bucket <yourbucket>

[command] &amp;&amp; echo "Yes" 方法对我没有帮助。

我尝试在 Jenkins 管道中使用它

def samAppBuildStatus =  sh(script: '[cd sam-app-folder; sam build  | grep 'Succeeded' ] && echo true', returnStatus: true) as Boolean

作为单行脚本命令,但不起作用


如何使用 bash 脚本获取成功构建状态?用于 Jenkins 流水线

【问题讨论】:

    标签: bash jenkins-pipeline jenkins-groovy


    【解决方案1】:

    使用它来获取命令的退出状态:

    def samAppBuildStatus = sh returnStatus: true, script: 'cd sam-app-folder; sam build | grep "Succeeded"'
    

    如果您不想在输出中看到任何stderr,则使用此方法:

    def samAppBuildStatus = sh returnStatus: true, script: 'cd sam-app-folder; sam build 2>&1 | grep "Succeeded"'
    

    稍后在您的Jenkinsfile 中,您可以执行以下操作:

    if (!samAppBuildStatus){
        echo "build success [$samAppBuildStatus]"
    } else {
        echo "build failed [$samAppBuildStatus]"
    }
    

    ! 的原因是因为 truefalse 在 shell 和 groovy 之间的定义不同(0true 对于 shell)。

    【讨论】:

    • 前 3 行输出被写入 stderr。剩余的行写入标准输出
    • @overexchange ,改为使用returnStatus
    • 但是这个命令将输出写入控制台。推荐吗?
    • @overexchange ,你能澄清一下你的意思吗?你在说哪个命令? if 语句还是samAppBuildStatus 的定义?哪个控制台?从机还是在主机上?
    • 不,将显示前 3 行(在 stderr 上),然后是 Build Succeeded(stdout)。你可以验证
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-12-20
    • 2020-03-30
    • 1970-01-01
    • 1970-01-01
    • 2021-01-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多