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

Jenkins声明式流水线中不使用script标签能否调用findFiles?

Jenkins声明式流水线无script块实现通配符解压方案

你之前的代码无法直接放在script块外运行,是因为声明式流水线的steps块中不允许直接执行变量赋值这类脚本式操作,仅允许步骤调用、方法参数内的表达式执行,以下是两种免script块的实现方式:

方案1:直接嵌套方法调用(适合单次使用路径)

无需单独定义变量,直接将findFiles方法的返回值嵌入unzip的入参中,可直接放在steps块内运行:

unzip zipFile: findFiles(glob: "directory/NoConfig*.zip")[0].toString(),
  dir: "otherDirectory",
  quiet: true

方案2:通过environment块定义变量(适合路径复用)

如果后续多个步骤都需要用到该压缩包路径,可以在environment块中提前赋值,声明式流水线支持在环境变量定义时调用内置流水线方法:

pipeline {
  agent any
  environment {
    // 提前匹配压缩包路径存入环境变量
    NO_CONFIG_ZIP = findFiles(glob: "directory/NoConfig*.zip")[0].toString()
  }
  stages {
    stage('解压配置包') {
      steps {
        unzip zipFile: "${NO_CONFIG_ZIP}",
          dir: "otherDirectory",
          quiet: true
        // 其他需要用到NO_CONFIG_ZIP的步骤可直接引用该变量
      }
    }
  }
}

注意事项

  • 请确保directory路径下至少存在1个符合NoConfig*.zip规则的文件,否则访问数组下标[0]会抛出索引越界异常
  • 可提前添加文件存在性校验步骤避免报错,示例:
    sh 'if [ $(ls directory/NoConfig*.zip 2>/dev/null | wc -l) -eq 0 ]; then echo "未找到匹配的压缩包" && exit 1; fi'
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 21:27:04