【问题标题】:Unable to get output of Failing Jenkins jobs to pipeline's console无法将失败的 Jenkins 作业输出到管道的控制台
【发布时间】:2019-10-22 13:08:14
【问题描述】:

无法将失败的 Jenkins 作业输出到管道的控制台

我正在调用我的管道中的几个作业。下面是从我的管道触发的示例作业“printuser”。

我能够在我的管道控制台上获得作业的输出,这是我的要求。

pipeline { 
    agent none
    stages {     
        stage ("Check Parameters"){ 
            steps {
                echo "In pipeline"
                script {
                    echo "Start condition check"
                }
                 def slaveJob = build job: 'printuser'
                 println slaveJob.rawBuild.log  
             }
         }
     }
}

当“printuser”失败时会出现此问题,在这种情况下,失败的输出不会显示在管道控制台页面中。

我尝试将 println 添加到 post failure 块中,如下所示:

post {
    failure {
        script {
            println slaveJob.rawBuild.log
        }
    }
}

但是,这样做时出现以下错误。

 Error when executing failure post condition:
groovy.lang.MissingPropertyException: No such property: slaveJob for class: groovy.lang.Binding
    at groovy.lang.Binding.getVariable(Binding.java:63)
    at org.jenkinsci.plugins.scriptsecurity.sandbox.groovy.SandboxInterceptor.onGetProperty(SandboxInterceptor.java:270)

您能否建议我如何将“失败”作业的输出输出到管道控制台?

【问题讨论】:

    标签: jenkins console output syntax-error jenkins-pipeline


    【解决方案1】:

    在您的帖子块上,您可以打印整个作业构建日志。

    post {
       failure {
         echo Jenkins.getInstance().getItemByFullName('printuser').getLastBuild().logFile.text
       }
    }
    

    请注意,您应该批准特定的签名以允许管道和 groovy 访问上述功能。 如果你还没有这样做,上面的脚本将会失败

    启动条件检查脚本不允许使用 staticMethod jenkins.model.Jenkins 获取实例。管理员可以决定是否 批准或拒绝此签名。

    您可以通过单击消息链接来跟踪错误消息,该链接会将您重定向到 Jenkins 的 scriptApproval 页面,您可以在其中将需要批准的签名添加到批准列表中。

    您应该拥有以下已批准的签名列表才能使上述操作生效

    method hudson.model.ItemGroup getItem java.lang.String
    method hudson.model.Job getLastBuild
    method hudson.model.Run getLogFile
    method jenkins.model.Jenkins getItemByFullName java.lang.String
    staticMethod jenkins.model.Jenkins getInstance
    staticMethod org.codehaus.groovy.runtime.DefaultGroovyMethods getText java.io.File
    

    如果您遵循此解决方案,您可以将帖子的失败操作更改为始终,以便它始终打印日志(不仅是错误)并删除 println slaveJob.rawBuild.log

    【讨论】:

    • 谢谢。您的解决方案有效,但我想知道这是否是满足我要求的唯一解决方案。
    【解决方案2】:

    当使用def 关键字时,变量具有块作用域。试试不带defslaveJob = build job: 'printuser'

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-02-08
      • 2019-04-11
      • 1970-01-01
      • 1970-01-01
      • 2019-07-09
      • 1970-01-01
      • 1970-01-01
      • 2015-10-09
      相关资源
      最近更新 更多