我如何 return 来自 Jenkins 插件管道步骤的复杂对象?

How do I return complex objects from pipeline steps in a Jenkins plugin?

我创建了一个插件,其中包含一个名为 DeployFromCatalogStep 的步骤。此步骤 return 是描述部署的记录。它目前 return 编辑为 Deployment class 的对象。这纯粹是一个数据载体对象(getters 和 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

我明白为什么会出现该错误。我没有明确允许访问该方法。

这是我的问题:在这种情况下最好的做法是什么?我可以想到几个选项:

  1. 避免 return 任何不是简单类型的东西(真的不是我想要的)
  2. 要求管理员允许访问对象 I return
  3. 上的所有 getter
  4. 将所有内容转换为 Map 或其他一些“无害”数据类型。
  5. 我还没有找到一些奇特的注释或机制。

有什么想法吗?

由于您方法的 return 类型,这里的脚本批准不会到来。即使您使用像字符串这样的类型作为 return 值,您最终也会收到错误消息。

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