簡體   English   中英

如何在Jenkins聲明式管道腳本塊內的循環中分配給env

[英]How to assign to env in loop inside Jenkins declarative pipeline script block

我在循環中分配給env變量時遇到問題。 我基本上想將所有內容從用戶輸入表單復制到env:

for (elem in userInput)
  env["${elem.key}"] = "${elem.value}"

但是這失敗了:

org.jenkinsci.plugins.scriptsecurity.sandbox.RejectedAccessException: Scripts not permitted to use staticMethod
org.codehaus.groovy.runtime.DefaultGroovyMethods putAt java.lang.Object java.lang.String java.lang.Object
    at org.jenkinsci.plugins.scriptsecurity.sandbox.whitelists.StaticWhitelist.rejectStaticMethod(StaticWhitelist.java:189)
    at org.jenkinsci.plugins.scriptsecurity.sandbox.groovy.SandboxInterceptor.onSetArray(SandboxInterceptor.java:474)
    at org.kohsuke.groovy.sandbox.impl.Checker$11.call(Checker.java:438)
    at org.kohsuke.groovy.sandbox.impl.Checker.checkedSetArray(Checker.java:445)
    at com.cloudbees.groovy.cps.sandbox.SandboxInvoker.setArray(SandboxInvoker.java:49)
    at com.cloudbees.groovy.cps.impl.ArrayAccessBlock.rawSet(ArrayAccessBlock.java:26)
    at WorkflowScript.run(WorkflowScript:120)
    at ___cps.transform___(Native Method)
    ...

這種分配方式有效:

env.KEY1 = userInput['KEY1']
env.KEY2 = userInput['KEY2']

但是,我還是希望循環更新env以避免重復和輸入錯誤,是否有任何方式可以做到這一點/與輸入數據合並? (是的,管道是聲明性的,在沙箱中運行,應該保持不變)

批准沙箱中的 putAt方法。

可以選擇

env.put(elem.key, elem.value)
env."${elem.key}" = elem.value

也不要在此語法env["key"]使用雙引號。 因為env["key"]env['key']是兩個不同的鍵。 在您的示例中,如果elem.key可能不是字符串,則elem.key只使用env[elem.key]env[elem.key.toString()] 請參見為什么Map在Groovy中不適用於GString?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM