2012-06-20 9 views
12

Tôi muốn có một móc sau xây dựng hoặc tương tự, để tôi có thể có cùng đầu ra như e. g. các plugin IRC, nhưng cho rằng để một kịch bản. Tôi đã có thể nhận tất cả thông tin, ngoại trừ trạng thái xây dựng thực tế. Điều này không hoạt động, không phải là "Tập lệnh sau xây dựng", "Tác vụ sau xây dựng", "Trình kích hoạt tham số" aso.Nhận trạng thái xây dựng trong tập lệnh sau khi xây dựng

Có thể có một số cách giải quyết rất xấu, nhưng tôi muốn hỏi, trong trường hợp ai đó có tùy chọn đẹp hơn ... viết ngắn plugin của riêng tôi.

Trả lời

7

Sử dụng tập lệnh Groovy trong bước xây dựng qua Groovy Post-Build plugin. Sau đó, bạn có thể truy cập vào nội bộ Jenkins qua Jenkins Java API. Plugin cung cấp tập lệnh có trình quản lý biến số có thể được sử dụng để truy cập các phần quan trọng của API (xem phần Cách sử dụng trong tài liệu plugin).

Ví dụ, dưới đây là cách bạn có thể thực hiện một kịch bản Python bên ngoài đơn giản trên Windows và đầu ra kết quả của nó (cũng như kết quả xây dựng) để xây dựng giao diện điều khiển:

def command = """cmd /c python -c "for i in range(1,5): print i" """ 
manager.listener.logger.println command.execute().text 

def result = manager.build.result 
manager.listener.logger.println "And the result is: ${result}" 
+0

Cảm ơn bạn, điều đó rất hay. Có thể gọi một công cụ bên ngoài, như một tập lệnh, từ đó không? – smlgbl

+0

Đã cập nhật câu trả lời. –

+0

Điều đó dường như hoạt động, nhưng đầu ra của lệnh không được in. – smlgbl

7

Nó hoạt động như đã đề cập với Groovy bài viết Xây dựng Plugin, nhưng không có bất kỳ trích dẫn thêm trong chuỗi được thực hiện. Vì vậy, tôi đã phải đặt các chức năng thực tế vào một kịch bản shell, mà thực hiện một cuộc gọi để curl, do đó cần trích dẫn cho các tham số POST aso.

def result = manager.build.result 
def build_number = manager.build.number 
def env = manager.build.getEnvironment(manager.listener) 
def build_url = env['BUILD_URL'] 
def build_branch = env['SVN_BRANCH'] 
def short_branch = (build_branch =~ /branches\//).replaceFirst("") 
def host = env['NODE_NAME'] 
def svn_rev = env['SVN_REVISION'] 
def job_name = manager.build.project.getName() 


"/usr/local/bin/skypeStagingNotify.sh Deployed ${short_branch} on ${host} - ${result} - ${build_url}".execute() 
+0

Nếu có lỗi trong lệnh trình bao, không có nội dung nào được in. Để in điều đó, hãy tham khảo https://stackoverflow.com/questions/159148/groovy-executing-shell-commands –

+0

Ngoài ra, để thực hiện chuỗi chứa dấu ngoặc kép/dấu cách trong Groovy, tốt hơn nên sử dụng luồng ngăn xếp https: // này. com/a/788401/1000551 –

1

Hãy thử Post Build Task plugin ...

Nó cho phép bạn xác định điều kiện dựa trên các dữ liệu ghi nhận ...

2

Đối với điều này tôi thực sự thích các plugin Conditional Build Step. Nó rất linh hoạt và bạn có thể chọn những hành động cần thực hiện dựa trên lỗi xây dựng hoặc thành công. Ví dụ, đây là một trường hợp mà tôi sử dụng có điều kiện xây dựng các bước để gửi một thông báo trên build thất bại:

enter image description here

Bạn cũng có thể sử dụng có điều kiện xây dựng các bước để thiết lập một biến môi trường hoặc gửi thư cho một log file mà bạn sử dụng trong các bước "thực thi shell" tiếp theo. Ví dụ: bạn có thể tạo bản dựng bằng ba bước: một bước để biên dịch các thử nghiệm mã/chạy, một bước khác để đặt biến môi trường STATUS="failed" và sau đó là bước thứ ba sẽ gửi email như The build finished with a status: ${STATUS}

2

Giải pháp thực sự dễ dàng, có thể không thanh lịch, nhưng nó hoạt động!

1: Bắt tất cả kết quả xây dựng bạn muốn nắm bắt (trong trường hợp này THÀNH CÔNG).

2: Tiêm một biến env có giá trị với tình trạng công việc

Step 1

3: Thực hiện tương tự cho bất kỳ loại tình trạng khác (trong trường hợp này tôi bắt từ hủy bỏ để không ổn định)

enter image description here

4: Sau khi bạn có thể sử dụng giá trị cho bất kỳ điều gì bạn muốn .. trong trường hợp này, tôi chuyển nó sang tập lệnh ANT! (Hoặc bạn có thể trực tiếp tải nó từ ANT dưới dạng biến môi trường ...)

enter image description here

Hy vọng điều đó có thể hữu ích!