jenkins pipeline-函数中的参数-缺少必需的上下文类hudson.FilePath

jenkins pipeline-函数中的参数-缺少必需的上下文类hudson.FilePath,jenkins,jenkins-pipeline,jenkins-groovy,Jenkins,Jenkins Pipeline,Jenkins Groovy,我试图将函数的返回值作为参数传递 @NonCPS def getLastRelease() { def RES = sh(script: '''cat version''', returnStdout: true).trim() return RES } pipeline{ parameters { choice(name: 'RELEASE_VERSION', choices: '${getLastRelease()}', description

我试图将函数的返回值作为参数传递

@NonCPS
def getLastRelease() {
    def RES = sh(script: '''cat version''', returnStdout: true).trim()
    return RES
}
pipeline{
    parameters {
            choice(name: 'RELEASE_VERSION', choices: '${getLastRelease()}', description: 'desc')
        }
}
但由于某些原因,它不起作用-如果我尝试:

'${getLastRelease()}'
我得到一个错误:

持久-73075a87/script.sh:第1行:${getLastRelease()}:错误 替代品

如果我使用:

"${getLastRelease()}"
我得到一个错误:

【管道】管道起点【管道】sh【管道】管道终点 org.jenkinsci.plugins.workflow.steps.MissingContextVariableException: 缺少必需的上下文类hudson.FilePath可能是您忘记了 要使用提供此功能的步骤包围代码,例如:node, dockerNode

你需要这个:

  • 删除注释
    @NonCPS
    ,因为NonCPS起作用
  • 由于执行shell脚本,所以将函数中的表达式包装在
    节点{…}
    块中
  • 只需在选项中调用函数
    getLastRelease()
    ,参数不带引号或大括号
  • 工作样本:

    def getLastRelease() {
        node {
            def RES = sh (script: 'cat version', returnStdout: true).trim()
            return RES
        }
    }
    pipeline {
        agent any
        parameters {
            choice(name: 'RELEASE_VERSION', choices: [getLastRelease(), <more choices, ...>], description: 'desc')
        }
    }
    
    def getLastRelease(){
    节点{
    def RES=sh(脚本:“cat版本”,返回stdout:true)
    返回RES
    }
    }
    管道{
    任何代理人
    参数{
    选项(名称:'RELEASE_VERSION',选项:[getLastRelease(),],说明:'desc')
    }
    }
    
    我不能完全确定您是否可以或希望为用户输入参数提供动态选择。默认值当然可以,但选择不多。我想得到发布版本,它实际上是由bash脚本生成的,我希望它是默认选项。脚本是正确的,我能够在管道中回显此值
    RES=getLastRelease()
    回显“${RES}”
    ,但由于某些原因,它对参数不起作用如果您希望它成为默认值,那么您需要使用
    defaultValue
    键,我得到了非常相同的错误
    hudson.FilePath丢失
    Ok,那么您可能需要使用完整的参数类来完成此操作。节点{}和不带大括号的caling函数完成了此操作。谢谢