在Jenkins中使用键值对

jjhzyzn0  于 11个月前  发布在  Jenkins
关注(0)|答案(3)|浏览(131)

这是我在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'.

在哪里以及如何定义键/值。我试图使用扩展选择参数插件,但不知道如何做到这一点.

r7s23pms

r7s23pms1#

我已经设法获得键/值与Active Choices Plugin工作的一个选择参数,它不像这里的其他答案那么复杂,它实际上埋在插件页面本身的评论。
要获取键/值对,请在Jenkins中选择列表参数(即显示一个人类可读的值,但传递一个不同的键给构建:

  • 您只需要从groovy脚本返回一个Map而不是List
  • 如果用户选择此选项,则Map键是参数将被设置为的值。Map值是将在列表中实际显示给用户的值。

例如groovy脚本:return ['Key1':'Display 1', 'Key2':'Display 2', 'Key3':'Display 3']将显示一个包含以下内容的文件:显示1、显示2和显示3给用户。然而,构建参数实际上将被设置为Key 1,Key 2或Key 3,这取决于所选择的内容。
对于这个特定的问题,这里是步骤。
1.确保您已安装Active Choices插件。
1.打开Jenkins作业的配置,选择This project is parameterized
1.点击【添加参数】,选择【主动选择参数】。
1.为参数命名,然后单击Groovy Script复选框。
1.在Groovy Script中输入内容: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的参数可能会导致问题,这取决于您在构建中稍后如何使用它,但这个概念确实是我试图说明的。

soat7uwm

soat7uwm2#

这可以实现使用主动选择插件,下面的链接和图片为您参考
插件参考:https://wiki.jenkins-ci.org/display/JENKINS/Active+Choices+Plugin

另一种方法没有任何插件
使用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

ej83mcc0

ej83mcc03#

您可以在groovy脚本中完成Map。如果你有一个名为InputParam的参数,你可以在System Groovy Script中将它Map到一个名为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)
}

选择ExecutesystemGroovyscript作为第一个构建操作。然后,您可以在windows shell中访问输出参数作为环境变量,例如。ECHO %OUTPARAM%

相关问题