Jenkins Active Choice Reactive Reference Parameter Formatted HTML in MultiBranch pipeline job 在脚本中获取当前分支名称
Jenkins Active Choice Reactive Reference Parameter Formatted HTML in MultiBranch pipeline job get current branch name in script
我花了很多时间在 MultibranchPipeline 作业中获取 当前分支名称 在 一个 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 repo 上问这个问题,但是不允许打开问题。另外,要在 Jenkins 上开一个问题,您需要一个 Jira 帐户或其他东西。 SO是唯一的地方。
看看 Groovy 的 string interpolation。
tl;dr 您可以使用 """
和 ${variable}
访问值
script: """
return <p>${env.BRANCH_NAME}</p>
"""
感谢 Michael 的回答,我设法找到了一种方法来完成这项工作。它所包含的内容比表面上看到的要多得多,但我会详细了解所有细节。我也回答了这个问题here.
我假设 reader 熟悉 Active Choices plugin。另外,我在多分支流水线作业中使用了它。您可能会遇到其他类型工作的不同行为。
遗憾的是参数无法访问环境变量。这是一个限制,我希望插件的维护者将来会 fixed/thought。
一些环境变量仅在构建时填充,例如 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: No such property: env for class: WorkflowScript
这让我们回到了我们无权访问环境变量的事实。
由此得出什么结论?好吧,如果我们使用三重双引号,first 我们有一个字符串插值,then 脚本是 运行.
必须使用的HTML元素是input
。如果您仔细阅读,这将在文档中进行解释。不仅如此,name
属性 也必须设置为 value
。这也在文档中进行了解释。
omitValueField
应设置为 true
,否则您的值中会出现尾随逗号。例如:myBranchName,
基本上,第一次 运行 作业时,您会通过字符串插值填充分支名称。只有在第二次构建之后,你才会有使用的价值。您将始终引用以前的值。
之后,您可以通过 referencedParameters
属性.
在其他 Active Choices
参数类型中引用此参数
我迫切需要这个,因为我有一个复杂的用例场景。我正在向 Azure Container Registry
发出请求,以获取某个 分支 .
的某个图像的所有标签
这个插件很棒,我很高兴它存在。我会喜欢更多的文档和示例 thoguh。
我花了很多时间在 MultibranchPipeline 作业中获取 当前分支名称 在 一个 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 repo 上问这个问题,但是不允许打开问题。另外,要在 Jenkins 上开一个问题,您需要一个 Jira 帐户或其他东西。 SO是唯一的地方。
看看 Groovy 的 string interpolation。
tl;dr 您可以使用 """
和 ${variable}
script: """
return <p>${env.BRANCH_NAME}</p>
"""
感谢 Michael 的回答,我设法找到了一种方法来完成这项工作。它所包含的内容比表面上看到的要多得多,但我会详细了解所有细节。我也回答了这个问题here.
我假设 reader 熟悉 Active Choices plugin。另外,我在多分支流水线作业中使用了它。您可能会遇到其他类型工作的不同行为。
遗憾的是参数无法访问环境变量。这是一个限制,我希望插件的维护者将来会 fixed/thought。
一些环境变量仅在构建时填充,例如 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: No such property: env for class: WorkflowScript
这让我们回到了我们无权访问环境变量的事实。
由此得出什么结论?好吧,如果我们使用三重双引号,first 我们有一个字符串插值,then 脚本是 运行.
必须使用的HTML元素是
input
。如果您仔细阅读,这将在文档中进行解释。不仅如此,name
属性 也必须设置为value
。这也在文档中进行了解释。omitValueField
应设置为true
,否则您的值中会出现尾随逗号。例如:myBranchName,
基本上,第一次 运行 作业时,您会通过字符串插值填充分支名称。只有在第二次构建之后,你才会有使用的价值。您将始终引用以前的值。
之后,您可以通过 referencedParameters
属性.
Active Choices
参数类型中引用此参数
我迫切需要这个,因为我有一个复杂的用例场景。我正在向 Azure Container Registry
发出请求,以获取某个 分支 .
这个插件很棒,我很高兴它存在。我会喜欢更多的文档和示例 thoguh。