如何从Jenkins插件中的管道步骤返回复杂对象?

如何从Jenkins插件中的管道步骤返回复杂对象?,jenkins,jenkins-plugins,jenkins-groovy,Jenkins,Jenkins Plugins,Jenkins Groovy,我创建了一个插件,其中包含一个名为DeployFromCatalogStep的步骤。此步骤返回描述部署的记录。它当前作为部署类的对象返回。这纯粹是一个数据载体对象(getter和setter)。该步骤工作正常,但当我的管道尝试调用getter时,会出现脚本安全错误。下面是我正在运行的代码片段: def dep = vraDeployFromCatalog( catalogItemName: 'plain-ubuntu-18', count: 1,

我创建了一个插件,其中包含一个名为
DeployFromCatalogStep
的步骤。此步骤返回描述部署的记录。它当前作为
部署
类的对象返回。这纯粹是一个数据载体对象(getter和setter)。该步骤工作正常,但当我的管道尝试调用getter时,会出现脚本安全错误。下面是我正在运行的代码片段:

def dep = vraDeployFromCatalog(
            catalogItemName: 'plain-ubuntu-18', 
            count: 1, 
            deploymentName: 'Jenkins-#', 
            projectName: 'Pontus Project', 
            reason: 'Test', 
            timeout: 300, 
            version: '6',
            inputs: '{ username: \'testuser\' }')
          assert dep != null
          def addr = vraWaitForAddress(dep[0].id)
当我试图提取代码段最后一行上的ID时,最后一行失败:

org.jenkinsci.plugins.scriptsecurity.sandbox.RejectedAccessException: Scripts not permitted to use method net.virtualviking.vra.jenkinsplugin.model.catalog.Deployment getId
我明白为什么我会犯这样的错误。我没有明确允许访问该方法

我的问题是:在这种情况下,最佳做法是什么?我可以想出几个选择:

  • 避免返回任何不是简单类型的内容(实际上不是我想要的)
  • 要求管理员能够访问我返回的对象上的所有getter
  • 将所有内容转换为
    Map
    或其他“无害”数据类型
  • 我还没有找到一些奇特的注释或机制

  • 有什么想法吗?

    由于方法的返回类型,这里出现的脚本批准不会出现。即使使用字符串等类型作为返回值,也会出现错误消息


    无论在方法中使用哪种数据类型,插件类都被认为是不安全的。您可以像前面提到的那样自动预填充脚本安全签名的白名单。这不会解决问题,但会是一个有效的解决方法。

    由于方法的返回类型,此处出现的脚本批准不会出现。即使使用字符串等类型作为返回值,也会出现错误消息


    无论在方法中使用哪种数据类型,插件类都被认为是不安全的。您可以像前面提到的那样自动预填充脚本安全签名的白名单。这不会解决问题,但会是一个有效的解决方法。

    谢谢!最后我把所有的东西都转换成了简单的地图和数组,效果非常好。因此,我没有返回
    部署
    而是返回一个包含其成员的地图。谢谢!最后我把所有的东西都转换成了简单的地图和数组,效果非常好。因此,我没有返回
    部署
    而是返回一个包含其成员的映射。