Joe*_*g S 5 jenkins jenkins-plugins jenkins-pipeline
我们在 Jenkins 系统中大量使用管道作业,并且需要能够copyArtifacts使用Build selector for Copy Artifact作业参数对步骤进行参数化。
首先,我发现 - 虽然参数返回 a String- 该copyArtifacts步骤需要BuildSelector.
我找到了BuildSelectorParameter.getSelectorFromXml将参数转换为BuildSelector类似实例的方法:
properties([parameters([
[$class: 'BuildSelectorParameter',
defaultSelector: upstream(fallbackToLastSuccessful: true),
description: '',
name: 'copyArtifactSelector']])
])
@NonCPS
static BuildSelector getSelectorFromParam(String xmlText) {
BuildSelectorParameter.getSelectorFromXml(xmlText)
}
node {
def selector = getSelectorFromParam(params.copyArtifactSelector)
copyArtifacts(
projectName: 'sourceJob',
selector: selector
)
}
Run Code Online (Sandbox Code Playgroud)
但是我刚刚意识到BuildSelector创建的不是Serializable. 因此,我现在得到了预期的异常:
hudson.plugins.copyartifact.TriggeredBuildSelector
导致:java.io.NotSerializableException:hudson.plugins.copyartifact.TriggeredBuildSelector
在 org.jboss.marshalling.river.RiverMarshaller.doWriteObject(RiverMarshaller.java:860)
在 org.jboss.marshalling.river.RiverMarshaller.doWriteFields(RiverMarshaller.java:1032)
在 org.jboss.marshalling.river.RiverMarshaller.doWriteSerializableObject(RiverMarshaller.java:988)
在 org.jboss.marshalling.river.RiverMarshaller.doWriteSerializableObject(RiverMarshaller.java:967)
在 org.jboss.marshalling.river.RiverMarshaller.doWriteObject(RiverMarshaller.java:854)
之后,我尝试检查复制工件插件如何处理 - 不幸的是我在源代码中找不到任何线索。也许它只是偶然起作用?创建 a 的方法BuildSelector似乎没有创建任何类型的可序列化类。
但也许有人已经遇到过这个问题并有提示?
到目前为止我发现了什么:
BuildSelector对象存储在某个变量中,它会将NotSerializableException.但是,如果我不把它先通过一些可变的,但做呼叫的方法调用copyArtifacts该NotSerializableException不会发生-至少不是现在:
node {
copyArtifacts(
projectName: 'sourceJob',
selector: getSelectorFromParam(params.copyArtifactSelector)
)
}
Run Code Online (Sandbox Code Playgroud)Copy Artifact 插件中是否有可能导致NotSerializableException异常发生的隐藏错误- 或者我是否遗漏了什么?
getSelectorFromParam像在更新的示例中那样使用我的方法是否安全?如果不安全,是否有安全的解决方案?
Dav*_*Tam 12
在花了几个小时之后,我遇到了同样的问题,我发现了这一点,它对我来说非常有效。
这里复制工件作业参数的构建选择器的名称是copyArtifactSelector,这里的上游作业名称是sourceJob:
copyArtifacts(projectName: 'sourceJob',
selector: [$class: 'ParameterizedBuildSelector',
parameterName: 'copyArtifactSelector'] );
Run Code Online (Sandbox Code Playgroud)
注意:插件=“copyartifact@1.39.1”
编辑:同时 - 使用copyartifactV1.43 - 支持以下语法:
copyArtifacts(projectName: 'sourceJob',
selector: buildParameter('copyArtifactSelector'));
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5402 次 |
| 最近记录: |