当前位置: 首页 > 知识库问答 >
问题:

组织。詹金西。插件。工作流程。cps。CpsThreadGroup@3123aac2原因:java。木卫一。NotSerializableException:

卜高超
2023-03-14

运行JavaGroovy脚本并更新到最新的Groovy管道时。谢谢你的帮助。

我得到了一个异常:在对象组织中的字段线程中的字段程序中的字段e中的字段调用者中的字段内局部变量。詹金西。插件。工作流程。cps。CpsThreadGroup@3123aac2原因:java。木卫一。NotSerializableException:hudson。模型运行$Artifact我认为问题的代码是

stage('Retrieve Code') {
        FileCacheCountCheck();
        def job = jenkins.model.Jenkins.instance.getItem("pipeline.preview.build")
        def build = job.getBuildByNumber(buildNumber)
        def art = build.artifacts[0]
        def file = art.file
        def targetPath = pwd()
        "rm -rf ${targetPath}/output".execute().text 
        "rm -rf ${targetPath}/script".execute().text 
        touch file: "${targetPath}/output/package.tmp"
        "cp ${file} ${targetPath}/output/package.zip".execute().text
        "cp -R ${targetPath}@script/ ${targetPath}/script/".execute().text 
                    }
stage('Stash Package') {

def targetPath=pwd()存储包括:“输出/**”,名称:“包”

根据这篇文章,,https://github.com/jenkinsci/pipeline-plugin/blob/master/TUTORIAL.md#serializing-我尝试使用的局部变量

@NonCPS
stage('Retrieve Code') {
    FileCacheCountCheck();
    @NonCPS
    def job = jenkins.model.Jenkins.instance.getItem("pipeline.preview.build")
    @NonCPS
    def build = job.getBuildByNumber(buildNumber)
    @NonCPS
    def art = build.artifacts[0]
    @NonCPS 
    def file = art.file
    @NonCPS
    def targetPath = pwd()
    "rm -rf ${targetPath}/output".execute().text 
    "rm -rf ${targetPath}/script".execute().text 
    touch file: "${targetPath}/output/package.tmp"
    "cp ${file} ${targetPath}/output/package.zip".execute().text
    "cp -R ${targetPath}@script/ ${targetPath}/script/".execute().text 
                }
stage('Stash Package') {
    @NonCPS
    def targetPath = pwd()
    stash includes: 'output/**', name: 'package' 
                        }

共有1个答案

耿弘阔
2023-03-14

根据这篇文章:最安全的方法是在标有注释@NonCPS的方法中隔离非序列化状态的使用

只需声明一个函数并将不可序列化的调用/步骤放入其中

@NonCPS  --- Once I removed this it worked. Also had to pass buildnumber as a parameter
def getArtifactPath(){
    def job = jenkins.model.Jenkins.instance.getItem("pipeline.preview.build")
    def build = job.getBuildByNumber(buildNumber)
    def art = build.artifacts[0]
    return art.file
}

并将此函数作为阶段步骤之一调用。

 类似资料:
  • 我们有一个Spring Boot应用程序,它被部署到AWS的EC2实例中包含的tomcat上。在本地我有redis设置。在我的申请中。yml我的redis配置如下: 我们用java对其进行了如下配置: 而我在QA中的集群负载平衡器url如下所示: aq***************亚马逊。com:6379实际上隐藏了所有redis集群。 我在本地测试了这个配置。。。。。。还有QA url。 但是不

  • 当我在独立java代码中运行相同的代码时,我会得到响应,而当我在web应用中运行时,我会得到这个错误。 Java 1.8和tomcat 6.0.53的原因是:Java。木卫一。EOFEException:SSL对等端错误关闭 代码:

  • 问题内容: 我有一个.Jar文件,它将在运行时将数据加载到数据库中。我已经计划通过詹金斯来担任这项工作。当我在詹金斯执行作业时,它将成功运行.JAR。但是,请说作业中是否存在空指针异常,并且该异常未成功完成。即便如此,詹金斯仍然说工作已经“通过”。如果作业执行过程中出现问题,如何使作业失败? 问题答案: @Corey的解决方案很好。而且,如果您不想编写JUnit测试并在Jenkins中提供支持,则

  • 问题内容: 在我的项目中,我有3个Web应用程序,都依赖于一个项目。 在我的詹金斯的服务器,我建了4个作业,,,和。这些工作的作用是构建工件,这些工件部署在我们的Nexus上。然后,有人在Nexus中检索这些工件,并将它们部署在我们的开发/认证服务器上。 我想要的是拥有一个(其他?)工作,该工作将按顺序启动所有这四个版本。这样,完成此作业后,所有的RELEASE作业都已执行。当然,如果一个构建失败

  • 问题内容: 我已经全局安装了gulp(npm install gulp -g)。但是我认为这是行不通的。当我在本地程序上进行gulp测试时,它工作正常。但是,当我在github(在Jenkins上)的同一个程序上进行gulp测试时,会出现以下错误。它不会识别gulp命令。有人能帮我吗?感谢詹金斯的错误: 但是在命令行中它运行良好。 问题答案: 为了知道您的gulp在哪里,您应该全局(对所有用户)将

  • 以下屏幕截图显示了jBPM 5中可用的各种工作流组件。使用这些组件,您可以创建一个工作流来协调您的流程。 您也可以创建自定义任务,但稍后会介绍。 此外,还有一些可用于协调流程的服务任务。 Start Event - 这是每个进程中执行的第一个节点。 您的流程中只能有一个启动节点。 End Event - 此节点表示进程结束。 在进程中可能存在多个此类节点的出现。 Rule Task - 它是一个评