我如何 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
我明白为什么会出现该错误。我没有明确允许访问该方法。
这是我的问题:在这种情况下最好的做法是什么?我可以想到几个选项:
- 避免 return 任何不是简单类型的东西(真的不是我想要的)
- 要求管理员允许访问对象 I return
上的所有 getter
- 将所有内容转换为
Map
或其他一些“无害”数据类型。
- 我还没有找到一些奇特的注释或机制。
有什么想法吗?
由于您方法的 return 类型,这里的脚本批准不会到来。即使您使用像字符串这样的类型作为 return 值,您最终也会收到错误消息。
无论您在方法中使用哪种数据类型,您的插件 类 都被认为是不安全的。您可以自动 pre-populate 提到的脚本安全签名的白名单 。这不会解决问题,但却是一个有效的解决方法。
我创建了一个插件,其中包含一个名为 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
我明白为什么会出现该错误。我没有明确允许访问该方法。
这是我的问题:在这种情况下最好的做法是什么?我可以想到几个选项:
- 避免 return 任何不是简单类型的东西(真的不是我想要的)
- 要求管理员允许访问对象 I return 上的所有 getter
- 将所有内容转换为
Map
或其他一些“无害”数据类型。 - 我还没有找到一些奇特的注释或机制。
有什么想法吗?
由于您方法的 return 类型,这里的脚本批准不会到来。即使您使用像字符串这样的类型作为 return 值,您最终也会收到错误消息。
无论您在方法中使用哪种数据类型,您的插件 类 都被认为是不安全的。您可以自动 pre-populate 提到的脚本安全签名的白名单