2016-09-17 39 views
17

Tôi đang cố gắng hiểu cách cấu trúc kịch bản lệnh đường dẫn Jenkins 2.7 của tôi. Tôi đã đọc qua số pipeline tutorial, nhưng cảm thấy rằng nó có thể mở rộng hơn về các chủ đề này.Sự khác biệt giữa nút, giai đoạn và bước trong đường ống Jenkins là gì?

Tôi có thể hiểu rằng một đường ống có thể có nhiều stage s và mỗi stage có thể có nhiều số step s. Nhưng sự khác biệt giữa số step(); và cuộc gọi phương thức trong một số stage là gì, giả sử sh([script: "echo hello"]);. Nên node s bên trong hoặc bên ngoài của stage s? Các thuộc tính tổng thể của công việc có phải là bên trong hoặc bên ngoài một node không?

Dưới đây là cấu trúc hiện tại của tôi trên một nút chính ubuntu:

#!/usr/bin/env groovy 

node('master') { 
    properties([ 
     [$class: 'BuildDiscarderProperty', strategy: [$class: 'LogRotator', numToKeepStr: '10']] 
    ]); 

    stage 'Checkout' 
     checkout scm 

    stage 'Build' 
     sh([script: "make build"]); 

    archive("bin/*"); 
} 

Trả lời

4

Nó phụ thuộc. Bất kỳ khai báo node nào đều cấp phát một trình thực hiện (trên trình chủ hoặc nô lệ Jenkins). Điều này yêu cầu bạn stashunstash không gian làm việc, vì một người thi hành khác không có sẵn nguồn kiểm tra.

Một số bước của đường ống DSL chạy trong một trình điều khiển thừa cân và do đó không yêu cầu phải nằm trong khối node. Điều này có thể hữu ích cho một ví dụ như sau, nơi bạn cần phải phân bổ nhiều nút anyways:

stage("Checkout") { 
    checkout scm 
} 

stage("Build") { 
    node('linux') { 
    sh "make" 
    } 
    node('windows') { 
    bat "whatever" 
    } 
} 

stage("Upload") { 
    ... 

khác (ví dụ có lẽ thực tế hơn) sẽ được bố trí nhiều nút trong parallel. Sau đó, không cần phải thực hiện cuộc gọi stage trong một trình thực thi được phân bổ khác (aka trong số node).

Ví dụ của bạn có vẻ tốt với tôi. Không cần phải phân bổ nhiều node s trong một đơn stage s, vì đây sẽ chỉ là phí bổ sung.

15

Các khái niệm về node, stagestep là khác nhau:

  • node định nơi một cái gì đó sẽ xảy ra. Bạn đưa ra một tên hoặc một nhãn, và Jenkins chạy khối đó.

  • stage cấu trúc tập lệnh của bạn thành chuỗi cấp cao. Các giai đoạn hiển thị dưới dạng các cột trong chế độ xem Đường ống tầng với thời gian và màu sắc trung bình của giai đoạn cho kết quả giai đoạn.

  • step là một cách để chỉ định điều gì sẽ xảy ra. sh có chất lượng tương tự, đó là một loại hành động khác. (Bạn cũng có thể sử dụng build cho những thứ mà đã được quy định như dự án.)

Vì vậy step s có thể cư trú trong phạm vi node s, (nếu họ không, họ được thực hiện trên tổng thể), và node s và step s có thể được cấu trúc thành một chuỗi tổng thể với stage s.

+0

Từ cuối cùng có nghĩa là 'giai đoạn '? – IronSean

+0

Vâng, bạn nói đúng. –

Các vấn đề liên quan