0

詹金斯版本:2.6,Linux

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

脚步:

  1. 使用多配置项目创建参数化构建。
  2. 向构建添加一个参数(使用 This project is parameterized-> string parameter, {if that questions} )。
  3. 将构建步骤“执行 shell”添加到作业。
  4. 将此 shell 脚本中的这些参数作为环境变量访问。

    echo "++++++++++++ 构建 $lib_name ($lib_version) ++++++++++++++"

为了解决这个问题,我尝试在“为运行准备环境”部分创建一个 groovy 脚本。我使用硬编码值创建了环境变量,这些值作为环境变量传递给 shell 脚本。

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

但是,如果没有硬编码,即使使用 如何使用 Groovy API 检索 Jenkins 构建参数的解决方案,我也无法访问这些变量值?

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

--->根据对此问题的评论进行更新:当我在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

4 回答 4

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,佐尔坦

于 2017-10-05T13:55:37.377 回答
0

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

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

但请注意,为了让您的自定义/更改的环境变量在接下来的步骤中可见,您应该使用EnvInject 插件,您可以使用它定义一个步骤,将新的环境变量导出为键值对,就像属性文件一样。

于 2016-06-13T20:34:41.110 回答
0

要访问 shell 脚本中的参数:

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

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

于 2016-06-13T09:39:34.297 回答
0

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

感谢你的帮助!

于 2016-06-28T11:26:35.763 回答