Karmaşık bir paralel Jenkins boru hattı nasıl inşa edilir?


17

Ismarlama Jenkins entegrasyonlarımızı bir boru hattına dönüştürmekle ilgileniyordum. Ancak, bunu nasıl yapacağımı anlayamıyorum.

Herkes aşağıdakileri yapabilen Jenkins senaryosunda bana yardımcı olabilir mi?

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

Bu mümkün mü? Yoksa 3, 4, 5'ten sonra katılmalı mıyım? Bunun gibi:

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

1
İkinci seçenek için oy verirdim, kulağa kırılma olasılığı daha az ve ihtiyaç ortaya çıkarsa uzatılması daha kolay.
Tensibai

2
muhtemelen yoğun olmakla birlikte, daha karmaşık sürümün ne eklediğini henüz anlamadım. "9" un ne yaptığını ve neye bağlı olduğunu belgeleyebilir misiniz? gözden geçirmek ve eklemek isterseniz 8 yoktur. :)
burnettk

1
@BertGoethals Pipeline'ı kullanabilir ve yine de farklı işleriniz olabilir. Burada bir şey eksik olabilirim.
avi

1
Birkaç gün önce benzer bir şey yapmaya çalışıyordum. İç içe geçmiş parallelkomutlarla çalışmayı başardım , ancak akış BlueOcean'da doğru görünmüyordu.
çim biçme makinesi

1
@BertGoethals Ana boru hattınızdan 5 ve sonra 6 ve 7 yaparak başka bir boru hattı başlatamaz mısınız?
Tensibai

Yanıtlar:



4

Başka bir paralel iş parçasını başka bir paralel iş parçasının içine yerleştirmek istediğim benzer bir durum vardı. Bu kod benim için çalıştı:

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
                }
            }
        }
    }
}

Paralel çalıştırmadan tam olarak yararlanmak için yeterli sayıda yürütücü atamayı unutmayın.


Bu snippet ve nodesve appsdeğişkenlerine değer atamadan çalışıyor mu?
jellenberger

@jellenberger bu değişkenler boş olacaksa çalışmaz (boş / boş dize). Ancak virgül kullanmadan tek öğeleri (tek uygulama veya düğüm) geçirmek iyidir.
biniosuaf
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.