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

Jenkins声明式pipeline如何获取目录下zip文件名赋值为全局变量跨阶段调用

Jenkins声明式Pipeline获取指定目录下zip文件名解决方案

核心说明

你预先在pipeline外层定义的全局变量PS本身就支持跨stage调用,只需要补全正确的文件名获取逻辑即可,注意如果你的目标目录是根路径下的/dev/team/,不要写相对路径dev/team/,否则会默认读取当前Jenkins工作空间下的子目录,和需求不符。

两种可行实现方案

方案1:使用Jenkins内置findFiles步骤(兼容性最好,推荐)

依赖Jenkins官方的Pipeline Utility Steps插件,绝大多数Jenkins环境默认已预装,不依赖节点操作系统:

  • 单zip文件场景:直接取匹配到的第一个文件名
  • 多zip文件场景:可自行修改逻辑取最新/符合指定规则的文件

方案2:Linux节点专用shell命令方案

如果你的运行节点是Linux系统,可以直接调用ls命令获取结果,注意要加trim()去除返回结果自带的换行符。

完整可运行代码

def PS
pipeline{
    agent any
    stages
    {
        stage('assigning variable') {
            steps
            {
                // 注意此处写绝对路径 /dev/team/ 而不是相对路径
                dir('/dev/team/')
                {
                    script
                    {
                        // 方案1代码(二选一即可)
                        def zipFiles = findFiles(glob: '*.zip')
                        if(zipFiles.length > 0){
                            PS = zipFiles[0].name
                            // 如果需要取全路径就写 PS = zipFiles[0].path
                        }else{
                            error "未找到任何zip格式文件"
                        }
                        
                        // 方案2代码(二选一即可,注释掉方案1再用)
                        // PS = sh(script: 'ls *.zip | head -n 1', returnStdout: true).trim()
                    }
                }
            }
        }
        stage('calling variable') {
            steps
            {
                script
                {
                    // 注意groovy语法中字符串插值用"${PS}"格式
                    echo "获取到的zip文件名为:${PS}"
                }
            }
        }
    }
}

额外注意事项

  • 如果目录下存在多个zip文件,上述代码默认取第一个匹配结果,你可以根据需求增加规则,比如按修改时间排序后取最新的文件
  • 如果目标目录在Jenkins工作空间内,才可以使用相对路径写法

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 09:15:05