在Jenkins中使用键值对

7

以下是我对Jenkins参数的要求:

1. User selects 3 Values from Dropdown: DEV, QA, PROD
2. Upon selection I need to return single value as parameter as like this:
 If DEV selected, return "Development http://dev.com 1"
 If QA selected, return "QA http://qa.com 2"
 If PROD selected, return "Production http://prod.com 3"
3. Once the value is returned in a variable, I will use that variable value in next step of 'Windows batch command'.

在哪里以及如何定义键/值。我尝试使用扩展选择参数插件,但不确定如何操作。

3个回答

9
我已经使用Active Choices Plugin成功地实现了下拉选择参数的键/值,这并不像其他答案那样复杂,实际上它是在插件页面的评论中被埋藏的。
要在Jenkins中获得一个键/值对的选择下拉列表参数(即显示人类可读的值,但将一个不同的键传递给构建),你只需要在编写groovy脚本时使用map而不是list。如果用户选择了此选项,则map键就是参数的设置值。map的值是实际显示给用户的下拉列表中的值。
例如,脚本:return ['Key1':'Display 1', 'Key2':'Display 2', 'Key3':'Display 3']将显示一个下拉列表,其中包含:Display1、Display2和Display3。但是构建参数实际上将根据所选内容设置为Key1、Key2或Key3。
针对这个特定问题,以下是步骤:
  1. 确保已安装Active Choices插件。
  2. 打开Jenkins作业的配置,选择该项目具有参数
  3. 单击添加参数,然后选择Active Choices参数
  4. 命名您的参数并选中Groovy脚本复选框。
  5. Groovy脚本中输入以下内容:return ['Development http://dev.com 1':'DEV', 'QA http://qa.com 2':'QA', 'Production http://prod.com 3':'PROD']。对于此示例,用户将看到一个带有3个选项的下拉列表:DEV、QA和PROD。传递给该参数的值将是Development http://dev.com 1等。现在,在构建中稍后使用具有空格和URL的参数可能会导致问题,但实际上我想说明的是概念。
Active Choices Parameter configuration

我尝试了你的解决方案。当我选择 DEV 并执行 println(envParam) 时,结果如预期的那样是 Development http://dev.com 1。但现在我想打印出显示值(在本例中为 DEV 本身)。这可能吗? - Hien Le
1
@HienLe 如果不知道你要在哪里显示这个,很难说。定义地图的Groovy脚本逻辑可能无法从你想要打印显示值的逻辑处访问。因此,打印逻辑和地图定义地图逻辑需要使用一个公共属性文件或类似的东西来存储地图值,以便用于显示下拉列表,然后也可用于稍后打印显示值。最好你另外提出一个问题。 - ptha

2
这可以通过使用Active Choice插件来实现,以下是相关链接和图片供您参考。
插件参考:https://wiki.jenkins-ci.org/display/JENKINS/Active+Choices+Plugin enter image description here 另一种方法是不需要任何插件。可以使用shell脚本来实现此功能。
添加一个构建步骤作为shell脚本,并添加下面的脚本,它将返回您的值。假设下拉参数名称为“env”。
if [ $env == "DEV" ]
then
   url = "Development http://dev.com 1"
elif [ $env == "QA" ]
then
   url = "QA http://qa.com 2"
elif [ $env == "PROD" ]
then
   url = "Production http://prod.com 3"
fi
$url变量将具有预期值,可用于下一步构建步骤。
Shell脚本参考:http://www.tutorialspoint.com/unix/if-elif-statement.htm

1
您可以在Groovy脚本中进行映射。如果您有一个名为InputParam的参数,您可以在System Groovy Script中将其映射到一个名为OutParam的新参数,如下所示:
import hudson.model.*
def parameterMap=[:]
parameterMap.put('DEV','Development http://dev.com 1')
parameterMap.put('QA','QA http://qa.com 2')
parameterMap.put('PROD','Production http://prod.com 3')

def buildMap = build.getBuildVariables() 
def inputValue=buildMap['InputParam']
buildMap['OutParam']=parameterMap[inputValue]

setBuildParameters(buildMap)

def setBuildParameters(map) {
    def npl = new ArrayList<StringParameterValue>()
    for (e in map) {
        npl.add(new StringParameterValue(e.key.toString(), e.value.toString()))
    }
    def newPa = null
    def oldPa = build.getAction(ParametersAction.class)
    if (oldPa != null) {
        build.actions.remove(oldPa)
        newPa = oldPa.createUpdated(npl)
    } else {
        newPa = new ParametersAction(npl)
    }
    build.actions.add(newPa)
}

选择将“执行系统Groovy脚本”作为第一个构建操作。然后,您可以在Windows shell中将输出参数作为环境变量访问,例如。 ECHO %OUTPARAM%

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接