我花了很多时间尝试在 MultibranchPipeline Job inside Active Choice Reactive Reference Parameter Formatted HTML 参数脚本块中获取当前分支名称
[
$class: 'DynamicReferenceParameter',
choiceType: 'ET_FORMATTED_HTML',
name: 'TestParam',
omitValueField: true,
description: 'Test.',
script: [
$class: 'GroovyScript',
fallbackScript: [
classpath: [],
sandbox: false,
script: '''
return """
<p>FallbackScript. Error in main script</p>
"""
'''
],
script: [
classpath: [],
sandbox: false,
script: '''
String branchName = env.BRANCH_NAME
return """
<p>${branchName}</p>
"""
'''
]
]
]
问题是,我相信,按下 BRANCH_NAME
按钮后,
Build
参数就会被注入。我尝试了很多事情,我的意思是,很多,但我仍然没有找到方法。
scm
变量也不存在,我试图用
jenkins.model.Jenkins.instance
找到一些东西,但没有成功。可能吗?我很想在他们的 Github 存储库上问这个问题,但是不允许打开问题。另外,要在 Jenkins 上提出问题,您需要一个 Jira 帐户或其他东西。 SO是唯一的地方。
这里。
我假设读者熟悉Active Choices 插件。另外,我在多分支管道工作中也使用过这个。您可能会在其他类型的工作中遇到不同的行为。 遗憾的是,这些参数无法访问环境变量。这是一个限制,我希望插件的维护者将来能够修复/考虑到它。
某些环境变量仅在构建时填充,例如
BRANCH_NAME
。在这种情况下,即使我们有权访问环境变量,我们手头也不会拥有实际值。
为了能够使用env.BRANCH_NAME
,我们需要两个反应参数。
该插件有一个名为FORMATTED_HIDDEN_HTML
的参数。该参数不会显示给用户。这很棒,因为我们不想在多分支管道作业中看到与我们当前所在分支同名的参数。
要设置此参数,我们可以在 Jenkinsfile 中编写类似的内容。[
$class: 'DynamicReferenceParameter',
choiceType: 'ET_FORMATTED_HIDDEN_HTML',
name: 'BranchName',
omitValueField: true,
script: [
$class: 'GroovyScript',
fallbackScript: [
classpath: [],
sandbox: true,
script: '''
return '<p>error</p>'
'''
],
script: [
classpath: [],
sandbox: true,
script: """
return '<input name="value" value="${env.BRANCH_NAME}" type="text">'
"""
]
]
]
这里有很多注意事项。
sandbox
true
。如果您不这样做,则需要在 Jenkins 的 ScriptApproval
菜单中接受脚本。定义 script
script: """
return '<input name="value" value="${env.BRANCH_NAME}" type="text">'
"""
首次启动作业时,会填充
BRANCH_NAME
变量。这会导致字符串插值,使您的脚本属性处于以下状态:
script: """
return '<input name="value" value="myBranchName" type="text">'
"""
如果我们使用三个单引号,我们会得到如下错误:
hudson.remoting.ProxyException:groovy.lang.MissingPropertyException:没有这样的属性:类的 env:WorkflowScript
这让我们回到了一个事实:我们无权访问环境变量。
由此可以得出什么结论?好吧,如果我们使用三重双引号,
first我们有一个字符串插值,then脚本将运行。
使用的HTML元素是input
。如果您仔细阅读,文档中对此进行了解释。不仅如此,
name
属性也必须设置为value
。文档中也对此进行了解释。
omitValueField
应设置为
true
,否则您的值中将会出现一个尾随逗号。例如:myBranchName,
之后,您可以通过
Active Choices
属性在其他
referencedParameters
参数类型中引用此参数。我迫切需要这个,因为我有一个复杂的用例场景。我正在向 Azure Container Registry
发出请求,以获取某个
分支的某个图像的所有标签。 这个插件很棒,我很高兴它存在。我希望有更多的文档和示例。
extendedChoice( defaultValue: "${env.BRANCH_NAME}", name: "branchName", type: 'PT_HIDDEN', value: "${env.BRANCH_NAME}")