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

Jenkins Java . lang . nosuchmethod错误:在步骤中找不到这样的DSL方法“post”

龙浩博
2023-03-14

我正在尝试在 Jenkins 上实现一个阶段,以便在 Jenkins 上产生故障时发送电子邮件。我做了一些类似于詹金斯文档的东西:

    #!/usr/bin/env groovy
    
    node {
    
    stage ('Send Email') {
            
            echo 'Send Email'
            
                post {
                    failure {
                        mail to: 'aa@bb.cc',
                             subject: "Failed Pipeline: ${currentBuild.fullDisplayName}",
                             body: "Something is wrong with ${env.BUILD_URL}"
                    }
                }
                        
            }
    
    }

但是我总是得到这个错误:

java.lang.NoSuchMethodError:在步骤中找不到这样的DSL方法“post”[archive,bat,build,catchError,checkout,deleteDir,dir,dockerFingerprintFrom,Docker FingerPrintRun,echo,emailext,EmailExtrecients,envVarsForTool,error,fileExists,getContext,git,input,isUnix,library,libraryResource,load,mail,milestone,node,parallel,powershell,properties,publishHTML,pwd,readFile,readTrusted,resolveScm,retry,script,sh,sleep,stage,stash,step,svn,超时,时间戳,tm,工具,非存档,取消存档,ValidateDeclarativeFileLine,WaitTill,withContext,withCredentials,withDockerContainer,WithTockerRegistry,withDockerServer,withEnv,wrap,writeFile,ws]或符号[all,allOf,always,ant,antFromApache,antOutcome,antTarget,any,anyOf,apiToken,architecture,archiveArtifacts,artifactManager,authorizationMatrix,batchFile,booleanParam,branch,buildButton,buildDiscarder,不区分大小写,区分大小写的,证书,变更日志,变更集,选择,choiceParam,cleanWs,时钟,云,命令,凭据,cron,crum,defaultView,demand,disableConcurrentBuilds、docker、dockerCert、dockerfile、downloadSettings、下游、dumb、envVars、环境、表达式、文件、fileParam、filePath、指纹、frameOptions、freeStyle、freeStyle Job、fromScm、fromSource、git、github、githubPush、gradle、headRegexFilter、headWildcardFilter、超链接模型、继承、继承全局、installSource、jacoco、jdk、jdkInstaller、jgit、,jgitapache、jnlp、jobName、junit、label、lastDuration、lastFailure、LastGrantedAuthories、lastStable、lastSuccess、legacy SCM、list、local、location、logRotator、loggedInUsersCanDoAnything、masterBuild、maven、maven3Mojos、mavenErrors、maven Mojos、mavenWarnings、modernSCM、myView、nodeProperties、非继承、nonStoredPasswordParam、none、not、OverrideInExtriggers、paneStatus、,参数、密码、模式、管道模型、pipelineTriggers、明文、插件、pollSCM、projectNamingStrategy、proxy、queueItemAuthenticator、quietPeriod、remotingCLI、run、runParam、schedule、scmRetryCount、search、security、shell、skipDefaultCheckout、skipStagesAfterUnstable、slave、sourceRegexFilter、SourceWilderFilter、ShuserPrivateKey、stackTrace、standard、status、string、,stringParam、swapSpace、text、textParam、tmpSpace、toolLocation、不安全、上游、用户名ColonPassword、用户名密码、ViewStirbar、weather、withAnt、zfs、zip]或全局[currentBuild、docker、env、params、pipeline、scm]

我看到其他一些帖子,但提出的建议对我不起作用

共有3个答案

景品
2023-03-14

下面的代码片段在脚本管道中对我有用。我在现有的舞台上增加了一个新的舞台。

stage ('Send Email') {
        echo "Mail Stage";

         mail to: "email@domainxxx.com",
         cc: 'manager@domainxxx.com', charset: 'UTF-8', 
         from: 'noreply@domainxxx.com', mimeType: 'text/html', replyTo: '', 
         bcc: '',
         subject: "CI: Project name -> ${env.JOB_NAME}",
         body: "<b>Example</b><br>Project: ${env.JOB_NAME} <br>Build Number: ${env.BUILD_NUMBER} <br> URL de build: ${env.BUILD_URL}";
    }
娄嘉石
2023-03-14

您面临的问题是,您的节点并没有添加到声明性管道,您不能在节点上使用post。您需要使用声明性管道包装节点。

下面是示例代码

pipeline {
    agent any
    stages {
        stage('Send Email') {
            steps {
            node ('master'){
                echo 'Send Email'
            }
        }
        }
    }
    post { 
        always { 
            echo 'I will always say Hello!'
        }
        aborted {
            echo 'I was aborted'
        }
        failure {
            mail to: 'aa@bb.cc',
            subject: "Failed Pipeline: ${currentBuild.fullDisplayName}",
            body: "Something is wrong with ${env.BUILD_URL}"
        }
    }
}
穆洋
2023-03-14

我在这里遇到了同样的问题。很多声明性的例子...无脚本。它几乎让你相信没有解决方案,但这没有意义。

这对我来说很有效(它不需要尝试/最后-或者如果你愿意的话抓住)。

node {
    //some var declarations... or whatever

    try {
        //do some stuff, run your tests, etc.            
    } finally {
        junit 'build/test-results/test/*.xml'
    }
}

*编辑:看一看他们的文档……不小心,我完全按照他们的建议做了。只需单击“切换脚本化管道(高级)”链接,您就会看到它。

 类似资料: