2016-10-09 16 views
7

Tôi muốn cấu trúc lại kịch bản đường dẫn Jenkins của mình thành các lớp để dễ đọc và sử dụng lại.Làm thế nào để trích xuất các phần của kịch bản đường ống Jenkins vào các lớp học?

Vấn đề là tôi bị ngoại lệ khi làm như vậy. Hãy xem xét một ví dụ đơn giản:

Khi tôi chạy

echo currentBuild.toString() 

mọi thứ đều tốt

Nhưng khi tôi giải nén nó vào một lớp học như vậy:

class MyClass implements Serializable { 
    def runBuild() { 
     echo currentBuild.toString() 
    } 
} 
new MyClass().runBuild() 

tôi nhận được một ngoại lệ:

Started by user admin 
Replayed #196 
[Pipeline] End of Pipeline 
groovy.lang.MissingPropertyException: No such property: currentBuild for class: MyClass 

Cách thích hợp để trích xuất mã đường ống vào các lớp là gì?

Trả lời

7

Bạn đang đi đúng hướng, nhưng vấn đề là bạn không chuyển đối tượng kịch bản cho cá thể lớp của bạn và đang cố gắng gọi phương thức không được định nghĩa trong lớp mà bạn đã tạo.

Dưới đây là một cách để giải quyết việc này:

// Jenkins file or pipeline scripts editor in your job 
new MyClass(this).runBuild() 

// Class declaration 
class MyClass implements Serializable { 
    def script 
    MyClass(def script) { 
     this.script=script 
    } 
    def runBuild() { 
     script.echo script.currentBuild.toString() 
    } 
} 
+0

Cảm ơn bạn đã loại của bạn câu trả lời. Tôi đã tìm ra một vài phút sau khi đăng câu hỏi :) –

+0

Ồ, np Tôi rất vui khi bạn giải quyết câu hỏi này;) – sshepel

+1

Điều này dường như không hoạt động với plugin đường ống mới nhất v2.5. Ngoại lệ sau được ném 'groovy.lang.MissingPropertyException: Không có thuộc tính như vậy: tập lệnh cho lớp: MyClass' – bram

2

mã của bạn mất tích khai trường lớp kịch bản

class MyClass implements Serializable { 

    def script 

    MyClass(def script) { 
     this.script=script 
    } 

    def runBuild() { 
     script.echo script.currentBuild.toString() 
    } 
} 

mã này nên ok @bram

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