如何使用 jenkins active choices 参数读取目录中的所有文件名?

How to read all file names in a directory with jenkins active choices parameter?

如何读取目录中的所有文件名并将它们显示为 Jenkins GUI 中的下拉列表?

我的目标实际上是创建两个依赖的下拉菜单,用户在第一个下拉菜单中选择一个文件,关于选择,在第二个下拉菜单中,第一个选择的文件内容将作为参数显示给用户。

我尝试了以下但没有成功。

在活动选择参数中 - Groovy 脚本:

import groovy.io.FileType

def list = []

def dir = new File("/some/path/to/variable/TEST/*")
dir.eachFileRecurse (FileType.FILES) { file ->
  list << file
}
return list

这里的 Active Choice Parameter Name 是 SWITCH

在 Active Choices 反应参数中

import groovy.json.JsonSlurper
def list = []

File textfile= new File("/some/path/to/variable/${SWITCH}") 
JsonSlurper slurper = new JsonSlurper()
def parsedJson = slurper.parse(textfile)
parsedJson.each{ list.add(it.port_name + " " + it.description)}
return list

PS:文件为 JSON 格式。

我认为您错过了屏幕截图中的选项 Referenced parameters

这个字段的描述是here:

This option, takes a list of job parameters that trigger an auto-refresh of the Reactive Parameter when any of the 'Referenced parameters' change

更新:

对我来说,你的代码可以工作,除了一个小的变化:

import groovy.json.JsonSlurper
def list = []

File textfile= new File("${SWITCH}")
JsonSlurper slurper = new JsonSlurper()
def parsedJson = slurper.parse(textfile)
parsedJson.each {
    list.add "$it.port_name $it.description".toString()
}
return list

我为每个列表元素添加了 toString() 以将 GString 类型的项目转换为 String。我想这是你的问题。如果没有 toString(),Jenkins 会显示 [Object object],因为它不知道如何转换它。

我已经解决了这个问题,所以如果有人需要:

import groovy.io.FileType

def list = []

def dir = new File("/some/path/to/variable/TEST/")
dir.eachFileRecurse (FileType.FILES) { file ->
  list.add(file.getName())
}

return list