如何构建复杂的并行Jenkins管道?


17

我一直对将定制的Jenkins集成转换为管道感兴趣。但是,我似乎无法弄清楚该怎么做。

有人可以帮助我完成以下工作的Jenkins脚本吗?

1---2---3-----------9---10
    |           |
    |---4-------|
    |           |
    |---5---6---|
        |       |
        |---7---|

1: Start pipeline
10: End pipeline
5: Build some files
   * needed by 6, 7,
   * needed as artifacts at the end
2, 3, 4, 6, 7: Have jUnit result files, should be available at end of
   test (somewhere), even if one failed

这有可能吗?还是我应该在3、4、5之后加入?像这样:

1---2---3-------6-------9---10
    |       |   |   |
    |---4---|   7---|
    |       |
    |---5---|

1
我会投票赞成第二种选择,如果需要的话,听起来不太可能破裂,而且更容易扩展。
Tensibai '17

2
可能很密集,但我还不了解更复杂的版本所添加的内容。您可以记录“ 9”的含义和含义吗?没有8,以防您要修改和添加。:)
burnettk

1
@BertGoethals您可以使用Pipeline,但仍然有不同的工作。我可能在这里错过了一些东西。
2014年

1
几天前我试图做类似的事情。我可以使它与嵌套parallel命令一起使用,但是在BlueOcean中,流程看起来不正确。
grassmowerlatte

1
@BertGoethals您是否可以从主管道开始执行另一个管道,依次执行5、6和7?
Tensibai'5

Answers:



4

我有一种类似的情况,我想将其他并行作业线程嵌套在另一个并行作业线程中。这段代码对我有用:

def performDeploymentStages(String node, String app) {
    stage("build") {
        echo "Building the app [${app}] on node [${node}]"
    }
    stage("deploy") {
        echo "Deploying the app ${app}] on node [${node}]"
    }
    stage("test") {
        echo "Testing the app [${app}] on node [${node}]"
    }
}

pipeline {
    agent {
        label 'master'
    }
    parameters {
        string(name: 'NODES', defaultValue: '1,2,3', description: 'Nodes to build, deploy and test')
        choice(name: 'ENV', choices: 'qa', description: 'Environment')
        string(name: 'APPS', defaultValue: 'app01,app02', description: 'App names')
    }

    stages {
        stage('parallel stage') {
            steps {
                script {
                    def nodes = [:]
                    for (node in params.NODES.tokenize(',')) {
                        def apps = [:]
                        for (app in params.APPS.tokenize(',')) {
                            performDeploymentStages(node, app)
                        }
                        parallel apps
                    }
                    parallel nodes
                }
            }
        }
    }
}

要充分利用并行运行,请记住分配足够的执行程序。


无需为nodesapps变量分配值的情况下,此代码段是否有效?
jellenberger

@jellenberger,如果这些变量为空(空/空字符串),它将不起作用。但是传递单个项目(单个应用程序或节点)而不用逗号也可以。
biniosuaf '19
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.