2017-08-22 1 views
0

J'essaie d'utiliser le plugin Publish over SSH dans un Jenkinsfile. Toutefois, j'obtiens l'exception java.io.NotSerializableException dans la méthode createClient. Ceci est mon code:NotSerializableException en utilisant Publier sur SSH dans Jenkinsfile

def publish_ssh   = Jenkins.getInstance().getDescriptor("jenkins.plugins.publish_over_ssh.BapSshPublisherPlugin") 
def hostConfiguration = publish_ssh.getConfiguration("${env.DSV_DEPLOY_SERVER}"); 

if(hostConfiguration == null) 
{ 
    currentBuild.rawBuild.result = Result.ABORTED 
    throw new hudson.AbortException("Configuration for ${env.DSV_DEPLOY_SERVER} not found.") 
} 

def buildInfo = hostConfiguration.createDummyBuildInfo(); 

def sshClient = hostConfiguration.createClient(buildInfo, new BapSshTransfer(
     env.SOURCE_FILE, 
     null, 
     env.DSV_DEPLOY_REMOTE_DIR, 
     env.REMOVE_PREFIX, 
     false, 
     false, 
     env.DSV_DEPLOY_COMMAND, 
     env.DSV_DEPLOY_TIMEOUT as Integer, 
     false, 
     false, 
     false, 
     null 
    )); 

Comment puis-je me débarrasser de l'exception?

Répondre

2

C'est parce que certaines variables ne sont pas sérialisables.

De doc

Depuis les pipelines doivent survivre à Jenkins redémarre, l'état du programme en cours d'exécution est régulièrement enregistré sur le disque afin qu'il puisse être repris plus tard (arrêts se produit après chaque étape ou au milieu des étapes telles que sh).

Vous pouvez utiliser l'annotation @NonCPS faire la création, utiliser le

@NonCPS 
def createSSHClient() { 
// your code here. 
}