首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >没有这样的属性:类的api : groovy.lang.Binding错误

没有这样的属性:类的api : groovy.lang.Binding错误
EN

Stack Overflow用户
提问于 2019-08-08 18:46:15
回答 3查看 63.2K关注 0票数 13

我正在尝试在Jenkins上构建一个管道,该管道在节点上运行命令并通知我以下错误:

代码语言:javascript
运行
复制
 groovy.lang.MissingPropertyException: No such property: api for class: groovy.lang.Binding
        at groovy.lang.Binding.getVariable(Binding.java:63)
        at org.jenkinsci.plugins.scriptsecurity.sandbox.groovy.SandboxInterceptor.onGetProperty(SandboxInterceptor.java:270)
        at org.kohsuke.groovy.sandbox.impl.Checker$6.call(Checker.java:289)
        at org.kohsuke.groovy.sandbox.impl.Checker.checkedGetProperty(Checker.java:293)
        at com.cloudbees.groovy.cps.sandbox.SandboxInvoker.getProperty(SandboxInvoker.java:29)
        at com.cloudbees.groovy.cps.impl.PropertyAccessBlock.rawGet(PropertyAccessBlock.java:20)

我不知道node命令,它是一个错误命令,或者它代表另一个错误,这是de pipeline文件:

代码语言:javascript
运行
复制
def call() {
        pipeline { 
            agent any 
            
            parameters {
                string(name: 'branch', defaultValue: 'refs/heads/develop', description: 'git branch where fetch sourcecode')
            }
            
            environment {
                GIT_URL = getGitRepoURL()
                GIT_CREDENTIALS = '*******'
            }
            
            tools {
                nodejs "node"
            }
            
            triggers {
                cron('H 06 * * 1-5')
            }
            
            stages {
                stage ('Initialize'){
                    steps { 
                        echo 'initializing'
                        deleteDir()
                        bat '''
                            echo "PATH = %PATH%"
                            echo "M2_HOME = %M2_HOME%"
                        ''' 
                    }
                }
    
                stage ('Sourcecode'){
                    steps { 
                        echo 'fetching sourcecode from ' + env.GIT_URL
                        checkout([$class: 'GitSCM', branches: [[name: params.branch]], doGenerateSubmoduleConfigurations: false, extensions: [], submoduleCfg: [], userRemoteConfigs: [[credentialsId: env.GIT_CREDENTIALS, url: env.GIT_URL]]])            
                    }
                }
                
                stage ('Execute raml2html'){
                    steps {
                        sh 'cd ..\HelpDevelopsAPI
                        node raml2html -s %WORKSPACE% -c %WORKSPACE%\..\apidef-aqj-commons -o /server/api --cat .*.html --schema /server/schema/%JOB_BASE_NAME% --mock /server/mock/%JOB_BASE_NAME%
                        cd %WORKSPACE%'
                    }
                }
            }
        }
    }
        
    def getGitRepoURL() {
        String projectName = env.JOB_BASE_NAME
        print 'projectName '+projectName  +'\n'
        String[] projectParts = projectName.tokenize( '-' )
        String bian = projectParts[1]
        String name = projectParts[0]+'-'+projectParts[1]+'-'+projectParts[2]
        echo 'exampleurl'+bian+'/'+name+'.git'
        return 'exapleurl'+bian+'/'+name+'.git'
    }
EN

回答 3

Stack Overflow用户

发布于 2019-08-09 17:56:57

您看到的错误意味着jenkins正在脚本中查找单词api,并试图解释是jenkins的变量或命令,但没有找到匹配项。我在您的脚本中搜索了单词api,发现了两个问题:

  • ,你试图使用多行字符串,但是你用单引号将它括起来。您需要使用三重引号(有关多行字符串here的更多信息)。我认为这导致了你看到的错误消息,因为管道无法识别字符串的第二行是字符串的一部分,而不是管道代码。
  • 你在bash步骤中使用了类似批处理的变量(%VAR%)。您应该改用$VAR

尝试更改:

代码语言:javascript
运行
复制
   sh 'cd ..\HelpDevelopsAPI
       node raml2html -s %WORKSPACE% -c %WORKSPACE%\..\apidef-aqj-commons -o /server/api --cat .*.html --schema /server/schema/%JOB_BASE_NAME% --mock /server/mock/%JOB_BASE_NAME%
       cd %WORKSPACE%'

至:

代码语言:javascript
运行
复制
   sh '''cd ..\HelpDevelopsAPI
       node raml2html -s $WORKSPACE -c $WORKSPACE\..\apidef-aqj-commons -o /server/api --cat .*.html --schema /server/schema/$JOB_BASE_NAME --mock /server/mock/$JOB_BASE_NAME
       cd $WORKSPACE'''
票数 16
EN

Stack Overflow用户

发布于 2021-07-01 19:14:06

您正在使用特定于Windows的构造/语法。除了@vasiliki-siakka提出的建议之外:将字符串中的反斜杠目录分隔符\替换为正斜杠/

代码语言:javascript
运行
复制
sh '''cd ../HelpDevelopsAPI
   node raml2html -s $WORKSPACE -c $WORKSPACE/../apidef-aqj-commons -o /server/api --cat .*.html --schema /server/schema/$JOB_BASE_NAME --mock /server/mock/$JOB_BASE_NAME
   cd $WORKSPACE'''

或者转义反斜杠:\\

票数 1
EN

Stack Overflow用户

发布于 2021-10-26 13:17:23

不允许声明性管道中的“def”部分,尽管它是脚本管道的一部分。请参阅此博客“如何使用嵌入脚本管道”- How can I use def in jenkins pipeline

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57410799

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档