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

如何将Pipeline中的变量值传递给Shell脚本?含多环境任务场景

刚好帮你解决过类似的Jenkins Pipeline传参问题,这里给你几种靠谱的方法,结合你的场景来讲解:

方法1:直接利用Groovy双引号插值

Groovy的双引号字符串会自动解析其中的变量,你可以直接把Pipeline中的Ajob/Bjob变量嵌入到Shell脚本的双引号里,非常适合简单场景:

// 先定义你的任务名变量
def Ajob = "ProjectBuild_ABD_${TARGET_PLATFORM.toUpperCase()}_fe"
def Bjob = "ProjectBuild_ABD_${TARGET_PLATFORM.toUpperCase()}_be"

// 直接在sh脚本的双引号中引用变量
def feBuildNum = sh(
    returnStdout: true,
    script: "curl -s 'http://你的Jenkins地址/job/${Ajob}/lastBuild/buildNumber'"
).trim() // 记得trim去掉换行符,避免后续处理出问题

def beBuildNum = sh(
    returnStdout: true,
    script: "curl -s 'http://你的Jenkins地址/job/${Bjob}/lastBuild/buildNumber'"
).trim()

echo "FE任务构建号:${feBuildNum}"
echo "BE任务构建号:${beBuildNum}"

这种方法的核心是:Groovy会先把${Ajob}替换成实际的任务名字符串,再把完整的命令传给Shell执行。

方法2:通过环境变量传递

如果你的Shell逻辑比较复杂,或者需要多次使用这些变量,可以先把Pipeline变量注入到Jenkins的环境变量中,然后在Shell里直接用$变量名访问:

def Ajob = "ProjectBuild_ABD_${TARGET_PLATFORM.toUpperCase()}_fe"
def Bjob = "ProjectBuild_ABD_${TARGET_PLATFORM.toUpperCase()}_be"

// 将Pipeline变量存入环境变量
env.FE_JOB_NAME = Ajob
env.BE_JOB_NAME = Bjob

// Shell脚本用单引号,避免Groovy提前插值,直接读取环境变量
def feBuildNum = sh(
    returnStdout: true,
    script: 'curl -s "http://你的Jenkins地址/job/$FE_JOB_NAME/lastBuild/buildNumber"'
).trim()

def beBuildNum = sh(
    returnStdout: true,
    script: 'curl -s "http://你的Jenkins地址/job/$BE_JOB_NAME/lastBuild/buildNumber"'
).trim()

这种方法更安全,尤其是当变量包含空格、特殊字符时,Jenkins会自动处理转义问题。

方法3:作为命令行参数传递

如果你的Shell脚本是多行复杂逻辑,可以把Pipeline变量作为位置参数传给Shell,代码结构更清晰:

def Ajob = "ProjectBuild_ABD_${TARGET_PLATFORM.toUpperCase()}_fe"

def feBuildNum = sh(
    returnStdout: true,
    script: """
        #!/bin/bash
        # 第一个参数就是传入的任务名
        TARGET_JOB=\$1
        # 执行逻辑
        curl -s "http://你的Jenkins地址/job/\$TARGET_JOB/lastBuild/buildNumber"
    """,
    args: Ajob // 把Ajob作为参数传给Shell脚本
).trim()
额外优化:直接用Jenkins API(无需Shell)

其实在Jenkins Pipeline里,你完全可以跳过Shell,直接用Groovy调用Jenkins内部API获取构建号,效率更高还不用处理网络请求:

def Ajob = "ProjectBuild_ABD_${TARGET_PLATFORM.toUpperCase()}_fe"

// 获取Jenkins实例和目标任务
def jenkinsInstance = Jenkins.instance
def feJob = jenkinsInstance.getItem(Ajob)

// 直接获取最新构建号
def feBuildNum = feJob.lastBuild.number

echo "FE任务构建号:${feBuildNum}"

注意:这种方法需要确保你的Pipeline有足够的权限访问Jenkins内部API,如果遇到权限问题,可以在Jenkins全局安全配置中调整权限策略。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 09:56:04