jenkins 中的参数化构建:未将参数作为 shell env 变量获取
Parameterised build in jenkins: Not getting parameters as shell env variables
詹金斯版本:2.6,Linux
问题:参数化构建变量在执行步骤中不可见(作为 env 变量)"shell script",它们曾经在旧的 1.x jenkins 版本中可见。
步骤:
- 使用多配置项目创建参数化构建。
- 为构建添加一个参数(使用 This project is parameterized-> string parameter, {if that matters} )。
- 向作业添加构建步骤 "Execute shell"。
在此 shell 脚本中将这些参数作为环境变量访问。
echo "++++++++++++ 建筑 $lib_name ($lib_version) ++++++++++++++" =14=]
为了解决这个问题,我尝试在 "Prepare an environment for the run" 部分创建一个 groovy 脚本。我使用硬编码值创建了环境变量,这些值作为环境变量传递给 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)
要访问 shell 脚本中的参数:
在回声中评估它们:例如echo "${myParam}"
在代码中使用它们:def myNewvalueParam = ${myOtherParam}
要从 groovy 脚本中检索构建变量作为构建步骤:
def buildVariablesMap = Thread.currentThread().executable.buildVariables
println buildVariablesMap['BUILD_NUMBER']
但请注意,要让您的 custom/altered 环境变量在接下来的步骤中可见,您应该使用 EnvInject plugin,您可以使用它定义一个步骤,将新的环境变量导出为关键 -值对就像属性文件一样。
这是 jenkins 中的一个错误,可能在凭据插件中:
https://issues.jenkins-ci.org/browse/JENKINS-35921
感谢您的帮助!
我也遇到过类似的问题。这是一个对我有用的解决方案。我创建了一种方法,它始终只接受并传递我需要的一个构建参数。
方法:
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,
佐尔坦
詹金斯版本:2.6,Linux
问题:参数化构建变量在执行步骤中不可见(作为 env 变量)"shell script",它们曾经在旧的 1.x jenkins 版本中可见。
步骤:
- 使用多配置项目创建参数化构建。
- 为构建添加一个参数(使用 This project is parameterized-> string parameter, {if that matters} )。
- 向作业添加构建步骤 "Execute shell"。
在此 shell 脚本中将这些参数作为环境变量访问。
echo "++++++++++++ 建筑 $lib_name ($lib_version) ++++++++++++++" =14=]
为了解决这个问题,我尝试在 "Prepare an environment for the run" 部分创建一个 groovy 脚本。我使用硬编码值创建了环境变量,这些值作为环境变量传递给 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)
要访问 shell 脚本中的参数:
在回声中评估它们:例如echo "${myParam}"
在代码中使用它们:def myNewvalueParam = ${myOtherParam}
要从 groovy 脚本中检索构建变量作为构建步骤:
def buildVariablesMap = Thread.currentThread().executable.buildVariables
println buildVariablesMap['BUILD_NUMBER']
但请注意,要让您的 custom/altered 环境变量在接下来的步骤中可见,您应该使用 EnvInject plugin,您可以使用它定义一个步骤,将新的环境变量导出为关键 -值对就像属性文件一样。
这是 jenkins 中的一个错误,可能在凭据插件中: https://issues.jenkins-ci.org/browse/JENKINS-35921
感谢您的帮助!
我也遇到过类似的问题。这是一个对我有用的解决方案。我创建了一种方法,它始终只接受并传递我需要的一个构建参数。
方法:
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, 佐尔坦