簡體   English   中英

jenkinspipeline groovy.lang.MissingMethodException:沒有方法簽名

[英]jenkinspipeline groovy.lang.MissingMethodException: No signature of method

我創建了一個管道,它采用 JSON 對象數組,並將調用一個共享庫,該庫將遍歷 JSON 對象

嘗試運行 Jenkins 作業以測試我是否可以轉發對象但我看到以下錯誤:

hudson.remoting.ProxyException: groovy.lang.MissingMethodException: No signature of method: imageBuild.call() is applicable for argument types: (java.lang.String) values: [[{"dockerConfig":"home/pipelines/conf/journeys/dockerbuild.yaml","aquaConfig":"home/pipelines/conf/journeys/aquascan.yaml","gtag": "v1.0.1","preFixName": "journey1"},{"dockerConfig":"home/pipelines/conf/if.com/dockerbuild.yaml","aquaConfig":"home/pipelines/conf/if.com/aquascan.yaml","gtag": "v2.0.2","preFixName": "journey2"},{"dockerConfig":"home/pipelines/conf/colleague/dockerbuild.yaml","aquaConfig":"home/pipelines/conf/colleague/aquascan.yaml","gtag": "v3.0.3","preFixName": "journey2"}]]
Possible solutions: call(), call(java.util.Map), wait(), any(), wait(long), main([Ljava.lang.String;)
    at org.codehaus.groovy.runtime.ScriptBytecodeAdapter.unwrap(ScriptBytecodeAdapter.java:58)

代碼:

library identifier: 'jenkins-sharedlib-cooking@BB-3611', retriever: modernSCM([$class: 'GitSCMSource',
 remote: 'https://github.com/lbg-gcp-foundation/jenkins-sharedlib-cooking-lifecycle.git',
 credentialsId: 'jenkinsPAT'])

def configList = '[{"dockerConfig":"home/pipelines/conf/journeys/dockerbuild.yaml","aquaConfig":"home/pipelines/conf/journeys/aquascan.yaml","gtag": "v1.0.1","preFixName": "journey1"},{"dockerConfig":"home/pipelines/conf/if.com/dockerbuild.yaml","aquaConfig":"home/pipelines/conf/if.com/aquascan.yaml","gtag": "v2.0.2","preFixName": "journey2"},{"dockerConfig":"home/pipelines/conf/colleague/dockerbuild.yaml","aquaConfig":"home/pipelines/conf/colleague/aquascan.yaml","gtag": "v3.0.3","preFixName": "journey2"}]'

pipeline {
  environment {
    def config = 
    brand = 
    environmentName = 
    CLUSTER_NAME = 
    CLUSTER_PROJECT = 
    VERSION = '1.0.0'
  }

  options {
    ansiColor('xterm')
    timeout(time: 150, unit: 'MINUTES')
    disableConcurrentBuilds()
    buildDiscarder(logRotator(numToKeepStr: '100'))
  }

  agent {
    kubernetes {
      label "jrn-${UUID.randomUUID().toString()}"
      yamlFile "pipelines/conf/podTemplate.yaml"
    }
  }
stages {
    stage('Stage 6 - Docker Image ') {
      parallel {
        stage ('Docker Image - Journeys') {
          steps {
            echo "*********************** Docker Journeys ***********************************"
            container('docker') {
              echo "Building the docker image..."
imageBuild(configList)
            }
            archiveArtifacts artifacts: "*.html", allowEmptyArchive: true
          }
        }
      }enter code here
    }
  }

看起來共享庫 Jenkins-shared lib-cooking@BB-3611 中的 groovy 方法或全局變量imageBuild不需要任何參數,但您嘗試傳遞字符串,這就是您收到 MissingMethodException 的原因。 與細節

hudson.remoting.ProxyException: groovy.lang.MissingMethodException: No signature of method: imageBuild.call() is applicable for argument types: (java.lang.String) values

要解決此問題,您必須將共享庫方法或全局變量 imageBuild 從imageBuild()更改為imageBuild(String param) or imageBuild(def param)

我將嘗試用與您的示例類似的示例進行說明,以供您參考。

假設您在名為 - jenkins-sharedlib-cooking-lifecycle 的 git 存儲庫中有一個共享庫,並且您遵循 Jenkins 共享庫文檔建議的文件夾結構

// vars/imageBuild.groovy
import groovy.json.JsonSlurper
def call(def imagebuildParameter) {
  def jsonSlurper = new JsonSlurper()
  def object = jsonSlurper.parseText(imagebuildParameter)
  // use loop on object to retrive the value like below  
  println object[0].name
}

//Jenkinsfile
node {
  stage('stageName') {
    def x = '[{"name": "foo"},{"name": "bar"}]'
    imageBuild(x)
  }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM