Дженкинс Общий отказ

У меня проблема с общей библиотекой Jenkins. Это терпит неудачу с нижеуказанной ошибкой.

an exception which occurred:
    in field org.codehaus.groovy.control.MultipleCompilationErrorsException.collector
    in object org.codehaus.groovy.control.MultipleCompilationErrorsException@545ac2e4
    in field com.cloudbees.groovy.cps.impl.BlockScopeEnv.locals
    in object com.cloudbees.groovy.cps.impl.BlockScopeEnv@633a4023
    in field com.cloudbees.groovy.cps.impl.CallEnv.caller
    in object com.cloudbees.groovy.cps.impl.FunctionCallEnv@4fc67d86
    in field com.cloudbees.groovy.cps.Continuable.e
    in object com.cloudbees.groovy.cps.Continuable@398d975c
    in field org.jenkinsci.plugins.workflow.cps.CpsThread.program
    in object org.jenkinsci.plugins.workflow.cps.CpsThread@45695fe5
    in field org.jenkinsci.plugins.workflow.cps.CpsBodyExecution.thread
    in object org.jenkinsci.plugins.workflow.cps.CpsBodyExecution@584b34fe
    in field org.jenkinsci.plugins.workflow.cps.CpsBodyExecution$SuccessAdapter.this$0
    in object org.jenkinsci.plugins.workflow.cps.CpsBodyExecution$SuccessAdapter@20f23f9f
Caused: java.io.NotSerializableException:org.codehaus.groovy.control.ErrorCollector
    at org.jboss.marshalling.river.RiverMarshaller.doWriteObject(RiverMarshaller.java:860)
    at org.jboss.marshalling.river.RiverMarshaller.doWriteFields(RiverMarshaller.java:1032)
    at org.jboss.marshalling.river.RiverMarshaller.doWriteSerializableObject(RiverMarshaller.java:988)

Groovy Vars код

import org.com.*

def call(string project, string repo){
    gt = new git(this, project, repo)
    gt.gitclone('pip','ospatchingpipeline' )
    git(this, project)
}

Исходный класс

package org.com.*

/**
 * Created by mishrav on 12/14/2017.
 */
class git implements Serializable {
    def project
    def repo
    git(string project, string repo) {
        this.project = project
        this.repo = repo
    }
    def gitclone(project, repo){
        echo(" cloning ${project}")
        git url: "ssh://git@bitbucket:7999/${project}/${repo}.git"
    }
}

Код трубопровода

@Library('pipelineLibrary') _
import java.util.regex.Pattern
//def lib = library("pipelineLibrary").com.clsa.scm.git()
//library identifier: 'pipelineLibrary@master', retriever: modernSCM([$class: 'GitSCMSource',remote: 'ssh://git@bitbucket:7999/pip/pipelinelibrary.git',credentialsId: 'my-private-key'])

pipeline {
    agent any
    stages{
        stage ('cleaning workspace'){
            steps{
                script{
                    checkoutScm("ospatchingpipeline")
                    }
                }
            }
        }
}  

Я не уверен, нужно ли мне скомпилировать этот код перед его загрузкой.

0 ответов

Эта ошибка возникает, когда вы используете функцию (доступ к объектам импортируемого вами класса), которая не реализует интерфейс Serializable.

Когда у нас возникла эта проблема из-за следующей функции:

@NonCPS
private static boolean isDebugOn (ParamType param1) { ...

Удаление static и изменив это, чтобы избавиться от этой ошибки:

@NonCPS
private boolean isDebugOn (ParamType param1) { ...

Похоже, это была комбинация @NonCPS а также static что привело к этой ошибке.

Аннотация @NonCPS полезна, когда у вас есть методы, которые используют объекты, которые не сериализуемы. Обычно все объекты, которые вы создаете в сценарии конвейера, должны быть сериализуемыми (причина этого в том, что Дженкинс должен иметь возможность сериализовать состояние сценария, чтобы его можно было приостановить и сохранить на диске).

Когда вы помещаете @NonCPS в метод, Дженкинс выполнит весь метод за один раз без возможности приостановки. Кроме того, вам не разрешается ссылаться на какие-либо шаги конвейера или методы преобразования CPS из аннотированного метода @NonCPS. Более подробную информацию об этом можно найти здесь.

Другие вопросы по тегам