【问题标题】:Parallel items in Jenkins Declarative pipelineJenkins 声明式管道中的并行项
【发布时间】:2019-09-07 18:36:00
【问题描述】:

我正在 jenkins 中设置自动构建和部署作业

现在我有一个像这样设置并行任务的阶段

stage ('Testing & documenting'){
        steps {
            parallel (
                "PHPLOC" : {
                    echo "Running phploc"
                    sh "./src/vendor/phploc/phploc/phploc --exclude=./src/vendor --no-interaction --quiet --log-csv=./build/logs/loc.csv src tests"
                },
                "SLOC": {
                    echo "Running sloc"
                    sh "sloccount --duplicates --wide --details . > ./build/logs/sloccount.sc  2>/dev/null"
                },
                "CPD" : {
                    echo "Running copy-paste detection"
                    sh "./src/vendor/sebastian/phpcpd/phpcpd --fuzzy . --exclude src/vendor --log-pmd ./build/logs/phpcpd.xml || true"
                },
                "MD" : {
                    echo "Running mess detection on code"
                    sh "./src/vendor/phpmd/phpmd/src/bin/phpmd src xml phpmd_ruleset.xml --reportfile ./build/logs/phpmd_code.xml --exclude vendor,build --ignore-violations-on-exit --suffixes php"
                },
                "PHPUNIT" : {
                    echo "Running PHPUnit w/o code coverage"
                    sh "./src/vendor/phpunit/phpunit/phpunit --configuration phpunit-quick.xml" 
                }
            )
        }
    }

阅读https://jenkins.io/blog/2018/07/02/whats-new-declarative-piepline-13x-sequential-stages/ 后,我注意到他们使用了不同的结构。

stage("Documenting and Testing") {
        parallel {
            stage("Documenting") {
                agent any
                stages {
                    stage("CPD") {
                        steps {
                            //CPD
                        }
                    }
                    stage("PMD") {
                        steps {
                            //PMD stuff
                        }
                    }
                }
                stage("Testing") {
                agent any
                stages {
                    stage("PHPUnit") {
                        steps {
                            //PHPUnit
                        }
                    }
                }
            }

我不确定这两种方法有什么区别

【问题讨论】:

    标签: jenkins-pipeline


    【解决方案1】:

    steps 块内运行parallel 的第一个示例是由声明性管道的早期版本引入的。这有一些缺点。例如,要在不同的代理上运行每个parallel 分支,您需要使用node 步骤,如果这样做,parallel 分支的输出将无法用于post 指令(在阶段或管道级别)。基本上,旧的parallel 步骤要求您在声明式管道中使用脚本化管道。

    第二个例子是为了克服前者的缺点而引入的真正的声明式语法。此外,此特定示例在并行阶段“记录”中运行两个串行阶段。

    您可以阅读此官方博客以了解有关parallel指令https://jenkins.io/blog/2017/09/25/declarative-1/的更多信息。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-12-03
      • 1970-01-01
      • 2017-08-12
      • 2021-01-15
      • 1970-01-01
      • 1970-01-01
      • 2021-08-02
      • 2019-10-11
      相关资源
      最近更新 更多