Jenkins java.io.NotSerializableException при работе ведомого на AWS ECS - PullRequest
0 голосов
/ 01 апреля 2019

Странная проблема, с которой я столкнулся: я запускаю свое ведомое устройство как образ докера, иногда как докер-контейнер на главном узле, а иногда на ECS (Fargate) с помощью плагина Amazon Elastic Container Service.

Я запускаю этофрагмент кода ниже

publishLambda(
       awsAccessKeyId:"${env.AWS_ACCESS_KEY_ID}",
       awsSecretKey:"${env.AWS_SECRET_ACCESS_KEY}",
       awsRegion:"${lambda_config.region}",
       functionARN:lambda_name,
       functionAlias:"DEV"
      )

Работает нормально, когда я запускаю ведомое устройство как докер-контейнер, но при работе в ECS я получаю следующую ошибку после того, как лямбда-публикация успешно опубликована .Я подозреваю, что это что-то с hudson.remoting api при попытке получить ответ по сети.

IMO hudson.remoting должна вести себя одинаково, независимо от того, где работают контейнеры.Как я получаю такие несоответствия?

java.io.NotSerializableException: com.xti.jenkins.plugin.awslambda.publish.LambdaPublishServiceResponse в java.io.ObjectOutputStream.writeObject0 (ObjectOutputStream.javaOio.io.io.io.84)writeObject (ObjectOutputStream.java:348) в hudson.remoting.UserRequest._serialize (UserRequest.java:264) в hudson.remoting.UserRequest.serialize (UserRequest.java:273) Также: hudson.remoting.Channel $ CallSiteStackTrace:к соединению JNLP4-соединение от ec2-18-224-68-207.us-east-2.compute.amazonaws.com/18.224.68.207:40038 в hudson.remoting.Channel.attachCallSiteStackTrace (Channel.java:1741) в hudson.remoting.UserRequest $ ExceptionResponse.retrieve (UserRequest.java:357) в hudson.remoting.Channel.call (Channel.java:955) в com.xti.jenkins.plugin.awslambda.publish.LambdaPublishBuildStep.perform (LambdaPublishBuildStep.java: 58) в com.xti.jenkins.plugin.awslambda.publish.LambdaPublishBuildStep.perform (LambdaPublishBuildStep.java:46) в org.jenkinsci.plugins.workflow.steps.CoreStep $ Execution.run (CoreStep.java:80) в org.jenkinsci.plugins.workflow.steps.CoreStep $ Execution.run (CoreStep.java:67) в org.jenkinsci.plugins.workflow.steps.SynchronousNonBlockingStepExecution.lambda $ start $ 0 (SynchronousNonBlockingStepExecution.java:47) в java.util.concurrent.Executors $ RunnableAdapter.call (Executors.java:511) в java.util.concurrent.runk)java.util.concurrent.ThreadPoolExecutor.runWorker (ThreadPoolExecutor.java:1149) в java.util.concurrent.ThreadPoolExecutor $ Worker.run (ThreadPoolExecutor.java:624)


1018Причина: java.io.IOException: Невозможно сериализовать com.xti.jenkins.plugin.awslambda.publish.LambdaPublishServiceResponse@4ec0e00f в hudson.remoting.UserRequest.serialize (UserRequest.java:275) на hudson.remperform (UserRequest.java:223) в hudson.remoting.UserRequest.perform (UserRequest.java:54) в hudson.remoting.Request $ 2.run (Request.java:369) в hudson.remoting.InterceptingExecutorService $ 1.call (InterceptingExecutorService.java:72) в java.util.concurrent.FutureTask.run (FutureTask.java:266) в java.util.concurrent.ThreadPoolExecutor.runWorker (ThreadPoolExecuj) .jpgconcurrent.ThreadPoolExecutor $ Worker.run (ThreadPoolExecutor.java:624) в hudson.remoting.Engine $ 1.lambda $ newThread $ 0 (Engine.java:93)

Причина:java.lang.RuntimeException в com.xti.jenkins.plugin.awslambda.publish.LambdaPublishBuildStep.perform (LambdaPublishBuildStep.java:66) в com.xti.jenkins.plugin.awslambda.publish.Bub.pubtebLubda) в org.jenkinsci.plugins.workflow.steps.CoreStep $ Execution.run (CoreStep.java:80) в org.jenkinsci.plugins.workflow.steps.CoreStep $ Execution.run (CoreStep.java:67) в орг.jenkinsci.plugins.workflow.steps.SynchronousNonBlockingStepExecution.lambda $ start $ 0 (SynchronousNonBlockingStepExecution.java:47) в java.util.concurrent.Executors $ RunnableAdapter.call (Executors.java: 511)в java.util.concurrent.FutureTask.run (FutureTask.java:266) в java.util.concurrent.ThreadPoolExecutor.runWorker (ThreadPoolExecutor.java:1149) в java.util.concurrent.ThreadPoolExcecutor: 624) на java.lang.Thread.run (Thread.java:748) Закончено: НЕИСПРАВНОСТЬ

1 Ответ

0 голосов
/ 02 апреля 2019

Причиной этого был класс LambdaPublishServiceResponse в Плагин Amazon Elastic Container Service не наследовал java.io.Serializable .

И поскольку удаленное взаимодействие Java по сети от ведомого устройства, работающего на ECS (fargate), должно было быть сериализовано для извлечения мастером, это изменение необходимо было сделать.Повысили PR https://github.com/XT-i/aws-lambda-jenkins-plugin/pull/100

...