Jenkins管道:返回构建步骤的值

Flo*_*ane 14 groovy jenkins jenkins-pipeline

在Jenkins的这个集成管道中,我使用构建步骤并行触发不同的构建,如下所示:

stage('trigger all builds')
{
  parallel
  {
    stage('componentA')
    {
      steps
      {
        script 
        {
          def myjob=build job: 'componentA', propagate: true, wait: true
        }
      }
    }
    stage('componentB')
    {
      steps 
      {
        script
        {
          def myjob=build job: 'componentB', propagate: true, wait: true
        }
      }
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

我想访问该build步骤的返回值,以便我可以在我的Groovy脚本中知道哪个作业名称,数字被触发.

我在示例中发现返回的对象具有类似于getProjectName()或者getNumber()我可以用于此的getter .

但是,我如何知道返回对象的确切类以及我可以调用它的方法列表?管道文档中似乎缺少这一点.我特别要求这个案例,但一般来说,我怎么知道返回对象的类及其文档?

mko*_*bit 26

步骤文档是基于与插件捆绑在一起的一些文件生成的,有时这还不够.一种简单的方法是class通过调用打印出结果对象getClass:

def myjob=build job: 'componentB', propagate: true, wait: true
echo "${myjob.getClass()}"
Run Code Online (Sandbox Code Playgroud)

此输出将告诉您结果(在本例中)是org.jenkinsci.plugins.workflow.support.steps.build.RunWrapper发布Javadoc的结果.

对于其他情况,我通常不得不深入研究Jenkins源代码.这是我的总体策略:

  • 触发的作业是否有可能返回一个返回代码,指示它是成功完成还是失败?如果是,请举例 (3认同)

not*_*vvy 5

下游作业的结果在result返回对象的属性中给出。

我建议使用它propagate: false来控制下游作业的结果如何影响当前构建。

例子:

pipeline{
    [...]
    stages {
        stage('Dummy') {
            steps {
                echo "Hello world #1"
            }
        }
        stage('Fails') {
            steps {
                script {
                    downstream = build job: 'Pipeline Test 2', propagate: false
                    if (downstream.result != 'SUCCESS') {
                        unstable(message: "Downstream job result is ${downstream.result}")
                    }
                }
 
            }
        }
    }
    [...]
}    
Run Code Online (Sandbox Code Playgroud)

在此示例中,只要下游构建未成功,当前构建就会设置为 UNSTABLE。

结果可能是:成功、失败、不稳定或中止。

对于您的其他问题,请参阅是否有内置函数可以打印对象的所有当前属性和值?Groovy/grails如何判断一个数据类型?