jenkins中的参数化构建:未将参数作为shell env变量获取

时间:2016-06-13 09:35:13

标签: jenkins multi-configuration

Jenkins版本:2.6,Linux

问题:参数化的构建变量在执行步骤" shell脚本"中不可见(作为env变量),它们曾经在旧的1.x jenkins版本中可见。

步骤:

  1. 使用多配置项目创建参数化构建。
  2. 向构建添加参数(使用此项目参数化 - >字符串参数,{如果重要})。
  3. 添加构建步骤"执行shell"工作。
  4. 在此shell脚本中以env变量访问这些参数。

    echo" +++++++++++++++++++++++++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + / LI>

    为了解决这个问题,我试图在"为运行准备一个环境"中创建一个groovy脚本。部分。我使用硬编码值创建了env变量,这些值作为env vars以shell脚本为基础。

    def map = ['lib_name':'lib1']
    map['lib_version'] = 'master'
    return map
    

    但是,没有硬编码,即使使用解决方案,我也无法访问这些变量值 How to retrieve Jenkins build parameters using the Groovy API?

    我不知道还有什么必须做。有人可以建议吗?

    --->根据对此问题的评论进行更新: 当我在jenkins中运行以下行时,我得到例外:

    def buildVariablesMap = Thread.currentThread().executable.buildVariables 
    buildVariablesMap.each{ k, v -> println "${k}:${v}" }
    
    
    
    
    FATAL: No such property: executable for class: hudson.model.OneOffExecutor
    groovy.lang.MissingPropertyException: No such property: executable for class: hudson.model.OneOffExecutor
        at org.codehaus.groovy.runtime.ScriptBytecodeAdapter.unwrap(ScriptBytecodeAdapter.java:53)
        at org.codehaus.groovy.runtime.callsite.GetEffectivePojoPropertySite.getProperty(GetEffectivePojoPropertySite.java:66)
        at org.codehaus.groovy.runtime.callsite.AbstractCallSite.callGetProperty(AbstractCallSite.java:296)
    

4 个答案:

答案 0 :(得分:1)

我也遇到过类似的问题。这是一个对我有用的解决方案。我创建了一个方法,它总是需要并提供一个我需要的构建参数。

方法:

String readingBuildParameters(VariableResolver varRes, String paramName){
    return varRes.resolve(paramName)
}

我在代码中如何使用它的行:

Build currentBuild        = Executor.currentExecutor().currentExecutable
VariableResolver varResolver    = currentBuild.getBuildVariableResolver()

df_parameter    = readingBuildParameters(varResolver, "parameter_name")

BR, 佐尔坦

答案 1 :(得分:0)

要访问shell脚本中的参数:

在echo中评估它们:例如echo "${myParam}"

在代码中使用它们:def myNewvalueParam = ${myOtherParam}

答案 2 :(得分:0)

要从groovy脚本中检索构建变量作为构建步骤:

def buildVariablesMap = Thread.currentThread().executable.buildVariables 
println buildVariablesMap['BUILD_NUMBER']

但请注意,为了使您的自定义/更改的环境变量可用于后续步骤,您应该使用EnvInject plugin,使用它可以定义一个步骤,将新的env变量导出为键值对,就像属性文件。

答案 3 :(得分:0)

这是jenkins中的一个错误,可能在凭证插件中: https://issues.jenkins-ci.org/browse/JENKINS-35921

感谢您的帮助!