Jenkins管道-管道外部函数上的“无法在空对象上调用方法”

时间:2018-12-26 11:26:54

标签: jenkins jenkins-pipeline

尝试运行管道时出现上述错误

试图在Groovy沙箱的内部和外部运行它。 还尝试了调试,此方法调用“ last_build_number(lastBuildToGenerateNumber)”失败

在添加try,catch和递归之前,此代码在管道外部运行良好。不要误会我的意思-该代码无法在管道中运行,所以我没有尝试过。

/ * SEIIc DPS_NIGHTLY_BUILD JenkinsFile * /

def buildDescription    // for setting the build name, based on the downstream jobs name

def last_build_number(build) {
    println 'the display name is' + build.displayName
    return build.displayName
    if (build != null) {
        if(build.displayName!=null){
            println 'the display name is' + build.displayName
            return build.displayName
        }
    } 
    else {
        return '0.0.0.0'
    }
    return '0.0.0.0'
}

def autoIncBuildNightlyNumber(build) {
    def debugEnable = 1
    println 'build is: ' + build.displayName
    def lastBuildToGenerateNumber = build; //a build variable 
    def last_build_number; //last build number i.e: "52.88.0.7" or "#43"
    build_number=0;
    try{
        println 'last build to genreate from ' + lastBuildToGenerateNumber.displayName
        last_build_number = last_build_number(lastBuildToGenerateNumber);
        if (debugEnable == 1) println 'last successfull build: ' + last_successfull_build
        def tokens = last_build_number.tokenize('.')
        if (debugEnable == 1) println 'tokens: ' + tokens
        // update global variable - if it's not a legit number the crash will be catched
        build_number = tokens[3].toInteger() + 1
        if (debugEnable == 1) println 'new build number: ' + build_number
        return build_number

    } catch (e){
        if (debugEnable == 1) println 'error is ' + e
        if (debugEnable == 1) println 'build number: ' + build_number + ' is not valid. recurse now to find a valid number'
        build_number = autoIncBuildNightlyNumber(lastBuildToGenerateNumber.getPreviousBuild());
        println 'genrate ' + lastBuildToGenerateNumber
        return build_number
    } 
}

// Declarative Pipeline
pipeline {
    /*
    maximum time for this job
    */
    options { //maximum time for this job
         timeout(time: 1, unit: 'HOURS') 
    }

    environment {
        AUTO_BUILD_NUMBER = autoIncBuildNightlyNumber(currentBuild.getPreviousBuild())
        PLASTICSCM_TARGET_SERVER = "g-plasticscm-server.gilat.com:8087"
        PLASTICSCM_TARGET_REPOSITORY = "SEIIc_DPS"
        PLASTICSCM_WORKSPACE_NAME = "${env.JOB_BASE_NAME}_${env.BUILD_NUMBER}"
        AUTOMATION_FOLDER = "${env.PLASTICSCM_WORKSPACE_NAME}\\Tools\\Automation"
        Branch = "/main"
        TEST_BRANCH = "/QualiTest for SW Automation"
        QUALITEST_FOLDER = "${env.PLASTICSCM_WORKSPACE_NAME}\\QualiTest for SW Automation"
        PLASTICSCM_TEST_REPOSITORY="SW_Utiles"
        PLASTICSCM_TEST_WORKSPACE = "TEST_${env.JOB_BASE_NAME}_${env.BUILD_NUMBER}"
    }

    // Select target host for building this pipeline
    agent { node { label "SEIIc_DPS" } }

    // Stages to run for this pipeline
    stages {
        /*
        Checkout files from source control. In this case the pipeline use PlasticSCM plugin to checkout a branch with given parameter "Branch".
        When this stage run, it will checkout the branch in the parameter string from the defined repository and server.
        It will not
        */
        stage('SCM Checkout') {
            steps {
                cm branch: env.Branch, changelog: true, repository: env.PLASTICSCM_TARGET_REPOSITORY, server: env.PLASTICSCM_TARGET_SERVER, useUpdate: false, workspaceName: env.PLASTICSCM_WORKSPACE_NAME
                //checkOut QualiTest
                cm branch: env.TEST_BRANCH, changelog: false, repository: 'SW_Utiles', server: env.PLASTICSCM_TARGET_SERVER, useUpdate: false, workspaceName: env.PLASTICSCM_TEST_WORKSPACE
            }
        }
           }//stages
      }//pipeline

0 个答案:

没有答案