解决 Jenkins 中的 java.lang.UnsupportedOperationException 错误

65次阅读
没有评论

问题描述

在Jenkins中准备了一个脚本,用于在构建作业期间发送电子邮件给用户以获取下一步的输入。然而,在构建作业时,他遇到了以下错误:

[Pipeline] End of Pipeline java.lang.UnsupportedOperationException: no known implementation of class jenkins.tasks.SimpleBuildWrapper is named BuildUser
    at org.jenkinsci.plugins.structs.describable.DescribableModel.resolveClass(DescribableModel.java:549)
    at org.jenkinsci.plugins.structs.describable.DescribableModel.coerce(DescribableModel.java:473)
    ...
    ...

用户提供的信息中还包括Jenkins的版本以及相关的Pipeline代码。

解决方案

安装 Build User Vars 插件

在继续之前,请确保你已备份Jenkins配置和数据。

根据你提供的信息,该错误与Jenkins中的BuildUser类的实现有关。要解决这个问题,你需要安装名为Build User Vars的插件,这个插件提供了BuildUser类的实现。以下是解决方案的步骤:
1. 打开Jenkins的管理界面。
2. 在左侧导航栏中,点击“插件管理”。
3. 在“可选插件”选项卡中,搜索并找到“Build User Vars”插件。
4. 勾选插件旁边的复选框。
5. 点击“安装无需重启”按钮以安装插件。
6. 插件安装完成后,返回到Jenkins主页。

更新Pipeline代码

一旦你安装了Build User Vars插件,你需要更新你的Pipeline代码以使用BuildUser类。以下是你提供的Pipeline代码的更新版本:

def usernode {
    wrap([$class: 'BuildUser']) {
        user = env.BUILD_USER_ID
    }

    emailext mimeType: 'text/html',
        subject: "[Jenkins]${currentBuild.fullDisplayName}",
        to: "user@xxx.com",
        body: '''<a href="${BUILD_URL}input">click to approve</a>'''
}

pipeline {
    agent any

    stages {
        stage('deploy') {
            input {
                message "Should we continue?"
                ok "Yes"
            }
            when {
                expression { user == 'hardCodeApproverJenkinsId' }
            }
            steps {
                sh "echo 'describe your deployment' "
            }
        }
    }
}

在更新的Pipeline代码中,我们首先在usernode闭包中使用wrap([$class: 'BuildUser'])来包装用户变量。这将确保你可以使用BuildUser类来获取用户信息。然后,你可以像之前一样继续使用emailext和其他步骤。

请注意,如果你的Pipeline代码中其他部分依赖于BuildUser类的信息,你也需要相应地更新这些部分。

验证

完成上述步骤后,重新运行你的Jenkins作业,并确保不再出现java.lang.UnsupportedOperationException错误。如果一切顺利,你的Pipeline应该能够成功执行,而不会遇到关于BuildUser类的问题。

请记得在进行任何更改之前备份Jenkins配置和数据,以防万一出现问题。

希望这些步骤能够帮助你成功解决问题!如果你有任何其他疑问或需要进一步的帮助,请随时提问。

正文完