我的詹金斯管道内容是:
pipeline {
agent any
stages {
stage('Example Build') {
steps {
script {
repos = [
'a': '1',
'b': '2',
'c': '3']
for (i in repos) {
echo "${i.key}, ${i.value}"
sh "echo test"
}
}
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
我在构建时遇到错误:
Caused: java.io.NotSerializableException: java.util.LinkedHashMap$Entry
at org.jboss.marshalling.river.RiverMarshaller.doWriteObject(RiverMarshaller.java:926)
at org.jboss.marshalling.river.BlockMarshaller.doWriteObject(BlockMarshaller.java:65)
at org.jboss.marshalling.river.BlockMarshaller.writeObject(BlockMarshaller.java:56)
at org.jboss.marshalling.MarshallerObjectOutputStream.writeObjectOverride(MarshallerObjectOutputStream.java:50)
at org.jboss.marshalling.river.RiverObjectOutputStream.writeObjectOverride(RiverObjectOutputStream.java:179)
at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:344)
at java.util.HashMap.internalWriteEntries(HashMap.java:1793)
at java.util.HashMap.writeObject(HashMap.java:1363)
at sun.reflect.GeneratedMethodAccessor176.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at org.jboss.marshalling.reflect.JDKSpecific$SerMethods.callWriteObject(JDKSpecific.java:156)
at org.jboss.marshalling.reflect.SerializableClass.callWriteObject(SerializableClass.java:191)
...
Finished: FAILURE
Run Code Online (Sandbox Code Playgroud)
如果 repos 已列出,则运行正常。
我无法修复该错误,希望有人可以回答。
谢谢您的回答。
我正在编写一个新的 Jenkins 管道,并有一组我最终希望并行运行的步骤。但是在我开发这个管道时,我想强制它按顺序运行。我没有看到任何方法来指定并行步骤使用的线程数或类似的东西。这是到目前为止的基本代码:
node('x') {
stage('cleanup'){
def cleanupScripts = [:]
cleanupScripts[1] = { sh(script: "cleanup1.sh") }
cleanupScripts[2] = { sh(script: "cleanup2.sh") }
cleanupScripts[3] = { sh(script: "cleanup3.sh") }
cleanupScripts[4] = { sh(script: "cleanup4.sh") }
parallel cleanupScripts
}
}
Run Code Online (Sandbox Code Playgroud)
我希望能够在不更改大量代码的情况下按顺序运行这些 shell 脚本。
我想寻求有关 Jenkins Groovy 管道的帮助,从这里复制: Is it possible to createparallel Jenkins Declarative Pipeline stages in a loop?
我希望在并行运行的几个阶段中在地图下传递几组变量。但是,只有最后一组(地图底部的方括号)会在我的地图中注册。
当并行阶段运行时,映射会成功迭代,但仅限于最后一组(当前install_Stage(it)),忽略其他组。这意味着我得到了一个"stage: install ${product}"并行显示四个阶段的管道,仅此而已。我想通过四个阶段(网络设置、恢复和安装)获得三个并行,按照下面的代码:
#!groovy
@Library('ci_builds')
def products = ["A", "B", "C", "D"]
def parallelStagesMap = products.collectEntries {
switch (it) {
case "A":
static_ip_address = "10.100.100.6"; static_vm_name = "install-vm1"; version = "14.1.60"
break
case "B":
static_ip_address = "10.100.100.7"; static_vm_name = "install-vm2"; version = "15.1"
break
case "C":
static_ip_address = "10.100.100.8"; static_vm_name = "install-vm3"; version = "15.1" …Run Code Online (Sandbox Code Playgroud)