2014-10-22 13 views
5

Tôi có một kịch bản xây dựng dòng chảy tương tự như documentation example: hai công việc, một chạy sau khi khác.Jenkins + Xây dựng dòng chảy, làm thế nào để vượt qua một biến từ một công việc khác

b = build("job1") 
build("job2", param1: b.????) 

My job1 là một kịch bản mà xây dựng một gói ra khỏi một kiểm tra ra git repositoy và in ra các phiên bản của gói xây dựng.

Tôi cần trích xuất phiên bản từ job1 (phân tích đầu ra ??) và làm cho nó có sẵn bằng cách nào đó dưới dạng tham số job2. Làm thế nào điều này có thể đạt được? Xin lưu ý rằng tôi không thể biết phiên bản trước khi chạy job1.

Trả lời

9

Vấn đề chỉ đơn giản bằng cách sử dụng export trong bước xây dựng kịch bản trình bao là các biến được xuất biến mất khi tập lệnh hệ vỏ thoát ra, chúng không được truyền đến công việc.

Sử dụng EnvInject plugin để tạo biến môi trường trong bản dựng của bạn. Nếu bạn ghi ra một tệp thuộc tính như một phần của bản dựng, EnvInject có thể đọc tệp và inject variables as a build step. Một tập tin thuộc tính có một định dạng đơn giản KEY=VALUE:

MY_BUILD_VERSION=some_parsed_value 

Một khi bạn có một biến môi trường thiết lập trong công việc của bạn, trong xây dựng luồng plugin, bạn có thể trích xuất giá trị của biến và sử dụng nó trong công việc tiếp theo:

def version = build.environment.get("MY_BUILD_VERSION") 
out.println String.format("Parameters: version: %s", version) 
build("My Second Build", MY_BUILD_VERSION: version) 
+0

Điều này có hiệu quả với bạn không? Tôi đang tạo một tập tin thuộc tính 'vars.txt' (chứa 'MY_BUILD_VERSION = something') và sử dụng" inject variables "làm bước xây dựng tiếp theo như một phần của' job1'. Nhưng vì lý do nào đó, trong phiên bản xây dựng, phiên bản xuất hiện dưới dạng 'null', sau khi kích hoạt' job1' (sử dụng ví dụ của bạn) như mã) – Unknown

+0

Nevermind, tôi đã tìm ra nó.Tôi đang làm 'b = build ('job-1')' và cố gắng 'build.environment.get()'; 'b.environment.get()' hoạt động đúng . Cảm ơn! – Unknown

0

Khi bạn chạy job1 xuất phiên bản có tên làm thuộc tính hệ thống.

export appVersion="stringOfVersion-123" 

Sau đó, nó phụ thuộc nếu bạn biết bao lâu là phiên bản (đếm số hoặc những người khác ký tự). Nếu bạn biết nó, bạn có thể phân tích biến từ kết thúc trong lần xây dựng thứ hai dưới dạng biến mới và sử dụng nó.

Cách chuỗi phân tích cú pháp bạn có thể tìm thấy trong this question with nice examples.

+0

Bạn có một số ví dụ về điều này thực sự hoạt động không? Bởi vì trong các thử nghiệm của tôi có vẻ như nó không; môi trường không được bảo quản từ công việc này sang công việc khác. – Unknown

+0

Trên thực tế không, thỉnh thoảng chúng tôi chỉ sử dụng Jenkins. Nhưng nếu bạn chạy một số kịch bản Bash như build1 thì bạn có thể xuất biến dưới dạng biến hệ thống và trong lần xây dựng thứ hai, bạn có thể sử dụng biến này. Hoặc bạn có thể dán thêm thông tin về điều đó (ảnh chụp màn hình từ Jenkins, mã, ...) cho câu hỏi không? –

+0

Xem cấu hình của tôi tại đây. http://imgur.com/a/rT72w – Unknown

0

Nếu công việc 2 luôn nhận được một số thông tin từ công việc1, bạn có thể sử dụng cách tiếp cận không có tham số. job1 có thể xuất bản tạo phẩm với phiên bản và job2 sẽ sử dụng tạo phẩm đó (ví dụ: Copy Artifact Plugin). Với cách tiếp cận đó job2 có thể được thực thi cũng như công việc độc lập.

0

Đối với bất cứ ai khác đến khi này, một giải pháp khác là sử dụng một kịch bản scriptler, nơi bạn vượt qua trong đường dẫn .properties tập tin, và kịch bản sẽ bổ sung thêm các thuộc tính vào danh sách các biến công việc:

Properties properties = new Properties() 

FilePath workspace = build.getWorkspace() 
FilePath sourceFile = workspace.child(path) 

properties.load(sourceFile.read()) 

properties.each { key, value -> 
    key = key.replace(".", "_").toUpperCase() 
    Job.setVariable(build, key, value) 

    println "Created Variable: " + key + "=" + value 
} 

Điều này sẽ chuyển đổi bất kỳ dấu chấm nào thành dấu gạch dưới và viết hoa tất cả các chữ cái. Sử dụng tập lệnh scriptler đảm bảo rằng bạn có phương thức hoạt động độc lập với "plugin plugin" mà bạn đang sử dụng.

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