2017-03-16 22 views
5

Tôi cần khởi chạy một bộ thử nghiệm động trong một đường dẫn khai báo. Để có mục đích trực quan hóa tốt hơn, tôi muốn tạo một giai đoạn cho mỗi bài kiểm tra. Có cách nào để làm như vậy không?Tôi có thể tạo các giai đoạn động trong một đường ống Jenkins không?

Cách duy nhất để tạo ra một giai đoạn tôi biết là:

stage('foo') { 
    ... 
} 

Tôi đã nhìn thấy this example, nhưng tôi nó không sử dụng cú pháp khai báo.

Trả lời

9

Sử dụng cú pháp theo kịch bản cho phép linh hoạt hơn cú pháp khai báo, mặc dù khai báo được tài liệu và được đề xuất nhiều hơn.

Đối với giai đoạn ví dụ có thể được tạo ra trong một vòng lặp:

def tests = params.Tests.split(',') 
for (int i = 0; i < tests.length; i++) { 
    stage("Test ${testd[i]}") { 
     sh '....' 
    } 
} 
1

tôi sử dụng để tạo ra các giai đoạn của tôi có chứa một công việc Jenkins trong đó. build_list là danh sách các công việc của Jenkins mà tôi muốn kích hoạt từ công việc chính của Jenkins, nhưng có một giai đoạn cho mỗi công việc được kích hoạt.

build_list = ['job1', 'job2', 'job3'] 
     for(int i=0; i < build_list.size(); i++) { 
      stage(build_list[i]){ 
       build job: build_list[i], propagate: false 
      } 
     } 
1

Bạn có thể muốn có một cái nhìn tại this example - bạn có thể có một hàm trả về một kết thúc mà nên có thể có một giai đoạn trong đó.

Mã này hiển thị khái niệm nhưng không có giai đoạn trong đó.

def transformDeployBuildStep(OS) { 
    return { 
     node ('master') { 
     wrap([$class: 'TimestamperBuildWrapper']) { 
... 
     } } // ts/node 
    } // closure 
} // transformDeployBuildStep 

stage("Yum Deploy") { 
    stepsForParallel = [:] 
    for (int i = 0; i < TargetOSs.size(); i++) { 
     def s = TargetOSs.get(i) 
     def stepName = "CentOS ${s} Deployment" 
     stepsForParallel[stepName] = transformDeployBuildStep(s) 
    } 
    stepsForParallel['failFast'] = false 
    parallel stepsForParallel 
} // stage 
Các vấn đề liên quan