Jenkins Active Choice Reactive Reference Parameter Formatted HTML in MultiBranch pipeline job get currentbranch name in script

问题描述 投票:0回答:3

我花了很多时间尝试在 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是唯一的地方。

jenkins jenkins-pipeline jenkins-plugins jenkins-groovy
3个回答
2
投票
感谢迈克尔的回答,我设法找到了一种方法来完成这项工作。其中的内容比表面上看到的要多得多,但我会详细介绍所有细节。我也回答了这个问题

这里

我假设读者熟悉

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
  1. 属性设置为
    true
    。如果您不这样做,则需要在 Jenkins 的
    ScriptApproval
    菜单中接受脚本。
    定义 
  2. script
  3. 属性时,我们使用三双引号。
    
    
  4. 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脚本将运行。

  1. 必须

    使用的HTML元素是input。如果您仔细阅读,文档中对此进行了解释。不仅如此,

    name
    属性也必须设置为
    value
    。文档中也对此进行了解释。
    
    

  2. omitValueField

    应设置为

    true
    ,否则您的值中将会出现一个尾随逗号。例如:
    myBranchName,
    
    

  3. 基本上,第一次运行作业时,您会通过字符串插值填充分支名称。只有在第二次构建之后,你才会有使用的价值。您将始终引用之前的值。

之后,您可以通过

Active Choices

属性在其他

referencedParameters
参数类型中引用此参数。
我迫切需要这个,因为我有一个复杂的用例场景。我正在向 

Azure Container Registry

发出请求,以获取某个

 分支
的某个图像的所有标签。 这个插件很棒,我很高兴它存在。我希望有更多的文档和示例。


1
投票
字符串插值

tl;dr 您可以使用

"""

${variable}
 访问值
script: """ return <p>${env.BRANCH_NAME}</p> """



0
投票

extendedChoice( defaultValue: "${env.BRANCH_NAME}", name: "branchName", type: 'PT_HIDDEN', value: "${env.BRANCH_NAME}")

    

© www.soinside.com 2019 - 2024. All rights reserved.