相关疑难解决方法(0)

Jenkins Pipeline:遍历地图时如何使用 sh 模块?

我的詹金斯管道内容是:

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 已列出,则运行正常。

我无法修复该错误,希望有人可以回答。

谢谢您的回答。

groovy jenkins jenkins-pipeline

3
推荐指数
1
解决办法
3744
查看次数

按顺序运行 Jenkins 并行任务

我正在编写一个新的 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 脚本。

parallel-processing jenkins jenkins-pipeline

2
推荐指数
1
解决办法
2249
查看次数

迭代 Jenkins Groovy 映射,具有多个集合

我想寻求有关 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)

groovy jenkins jenkins-groovy jenkins-pipeline

1
推荐指数
1
解决办法
6186
查看次数