Làm thế nào để xây dựng một đường ống Jenkins song song phức tạp?


17

Tôi đã quan tâm đến việc chuyển đổi các tích hợp Jenkins của chúng tôi thành một đường ống dẫn. Tuy nhiên, tôi dường như không thể tìm ra cách để làm điều đó.

Bất cứ ai có thể giúp tôi với kịch bản Jenkins có thể làm như sau?

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

Điều này thậm chí có thể? Hay tôi chỉ nên tham gia sau 3, 4, 5? Như thế này:

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

1
Tôi sẽ bỏ phiếu cho tùy chọn thứ hai, âm thanh ít có khả năng bị phá vỡ và dễ dàng gia hạn hơn nếu có nhu cầu.
Tensibai

2
có thể dày đặc, nhưng tôi chưa hiểu phiên bản phức tạp hơn thêm vào. bạn có thể ghi lại những gì "9" không và nó phụ thuộc vào cái gì? không có số 8, trong trường hợp bạn muốn sửa lại và thêm nó. :)
burnettk

1
@BertGoethals Bạn có thể sử dụng Pipeline và vẫn có các công việc khác nhau. Có thể tôi đang thiếu một cái gì đó ở đây.
avi

1
Tôi đã cố gắng làm một cái gì đó tương tự một vài ngày trước. Tôi có thể làm cho nó hoạt động với các parallellệnh lồng nhau , nhưng luồng không phù hợp với BlueOcean.
lawnmowerlatte

1
@BertGoethals Bạn không thể bắt đầu một đường ống khác làm 5 và 6 và 7 từ đường ống chính của bạn?
Tensibai

Câu trả lời:



4

Tôi đã có một tình huống tương tự trong đó tôi muốn lồng các luồng công việc song song khác vào trong một chuỗi song song khác. Mã này làm việc cho tôi:

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

Để hưởng lợi hoàn toàn từ việc chạy song song, hãy nhớ gán đủ người thực thi.


Đoạn mã này có hoạt động mà không gán giá trị cho nodesappsbiến không?
jellenberger

@jellenberger nó sẽ không hoạt động nếu các vars này sẽ trống (chuỗi rỗng / rỗng). Nhưng thật tốt khi vượt qua các mục đơn lẻ (ứng dụng hoặc nút) mà không có dấu phẩy.
biniosuaf
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.