首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在我的Jenkins声明管道中的多个代理上运行相同的任务

在我的Jenkins声明管道中的多个代理上运行相同的任务
EN

Stack Overflow用户
提问于 2018-05-31 16:51:15
回答 2查看 3.4K关注 0票数 2

我有个街区:

代码语言:javascript
复制
stage('Clone on win10x64-b-ut') {
    agent {
        node {
            label 'win10x64-b-ut'
        }
    }
    steps {
        gitClone()
    }
}    

stage('Clone on win81x64-b-ut') {
    agent {
        node {
            label 'win81x64-b-ut'
        }
    }
    steps {
        gitClone()
    }
}

我想通过更改标签,在某种程度上像循环一样运行相同的任务。我想尽可能地消除冗余。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-06-01 09:57:52

看看这个答案:https://stackoverflow.com/a/48421660/9498358

如果不希望并行运行阶段(如链接的答案),可以在脚本块中添加一个for循环,因此它将如下所示:

代码语言:javascript
复制
def generateStage(nodeLabel) {
    return {
        stage("Clone on ${nodeLabel}") {
            agent {
                node {
                    label nodeLabel
                }
            }
            steps {
                gitClone()
            }
        } 
    }
}

// ...

stage('Clone') {
    steps {
        script {
            def allNodes = [win10x64-b-ut', 'win81x64-b-ut']

            for (def i = 0; i < allNodes[i]; i++) {
                generateStage(allNodes[i])
            }
        }
    }
}
票数 2
EN

Stack Overflow用户

发布于 2019-02-05 10:11:37

接受的答案是行不通的。特别是def部分。

这是行之有效的:

代码语言:javascript
复制
def generateStage(nodeLabel) {
    stage("Runs on ${nodeLabel}") {
        node(nodeLabel) {
            sh 'hostname'
        }
    }
}

pipeline {
    agent {
        node {
            label '!docker'
        }
    }
    stages {
        stage('Run') {
            steps {
                script {
                    nodes = nodesByLabel(label: 'docker')

                    for (node in nodes) {
                        generateStage(node)
                    }
                }
            }
        }
    }
}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50629225

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档