You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Jenkins Pipeline的sh步骤中调用Groovy自定义函数?

问题分析与解决

错误原因

sh步骤的代码是交给系统Shell执行的,而非Groovy解释器。你的自定义Groovy函数Greet只存在于Jenkins Pipeline的Groovy上下文里,Shell环境无法识别这个函数,因此抛出语法错误。

正确实现方式

根据需求分两种场景处理:

场景1:直接输出问候语(无需Shell)

既然echo本身就是Jenkins Pipeline的内置步骤,直接在Groovy上下文调用函数即可,不需要通过sh:

def Greet(name) {
    echo "Hello ${name}"
}

pipeline {
    agent any
    stages {
        stage('Test') {
            steps {
                script {
                    Greet('Build Team')
                }
            }
        }
    }
}

注:script块用于在声明式Pipeline的steps中执行脚本式Groovy代码,若使用脚本式Pipeline可省略script块。

场景2:需要在Shell命令中使用函数结果

如果必须通过Shell输出(比如结合其他Shell命令),先在Groovy上下文调用函数获取结果,再传递给sh命令:

def Greet(name) {
    return "Hello ${name}"
}

pipeline {
    agent any
    stages {
        stage('Test') {
            steps {
                script {
                    def greeting = Greet('Build Team')
                    // 使用单引号包裹避免Groovy插值与Shell插值冲突
                    sh "echo '${greeting}'"
                }
            }
        }
    }
}

若问候语包含特殊字符(如单引号、空格),建议使用双引号并转义,或使用Jenkins的sh参数returnStdout等方式处理,避免Shell语法错误。

内容的提问来源于stack exchange,提问作者Representator

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.06 17:00:11