Tôi có hai công việc trong jenkins, cả hai đều cần cùng một tham số.
Làm cách nào tôi có thể chạy công việc đầu tiên với một tham số để khi nó kích hoạt công việc thứ hai, cùng một tham số được sử dụng?
Tôi có hai công việc trong jenkins, cả hai đều cần cùng một tham số.
Làm cách nào tôi có thể chạy công việc đầu tiên với một tham số để khi nó kích hoạt công việc thứ hai, cùng một tham số được sử dụng?
Câu trả lời:
Bạn có thể sử dụng Trình cắm kích hoạt tham số cho phép bạn chuyển các tham số từ nhiệm vụ này sang tác vụ khác.
Bạn cũng cần thêm thông số này mà bạn đã truyền từ ngược dòng xuống hạ lưu.
1.Post-Build Actions> Chọn "Kích hoạt bản dựng được tham số hóa trên các dự án khác"
2.Nhập biến môi trường với giá trị. Giá trị cũng có thể là Tham số xây dựng Jenkins.
Các bước chi tiết có thể xem tại đây: -
Hy vọng nó hữu ích :)
Các câu trả lời được chấp nhận ở đây không làm việc đối với trường hợp sử dụng của tôi. Tôi cần có khả năng tạo động các tham số trong một công việc và chuyển chúng vào một công việc khác. Như Mark McKenna đề cập, dường như không có cách nào để xuất một biến từ bước xây dựng trình bao sang các hành động xây dựng bài đăng.
Tôi đã đạt được giải pháp thay thế bằng cách sử dụng Plugin trình kích hoạt tham số bằng cách ghi các giá trị vào tệp và sử dụng tệp đó làm tham số để nhập thông qua 'Thêm hành động sau xây dựng' -> 'Bản dựng tham số kích hoạt ...' rồi chọn 'Thêm thông số' - > 'Tham số từ tệp thuộc tính'.
Tôi nghĩ câu trả lời ở trên cần một số cập nhật:
Tôi đang cố tạo một thư mục động để lưu trữ các tạo tác bản dựng ngược dòng của mình, vì vậy tôi muốn chuyển số bản dựng công việc ngược dòng của mình sang công việc hạ lưu, tôi đã thử các bước trên nhưng không thể hoạt động. Đây là cách nó hoạt động:
Điều này là do phiên bản jenkins mới cũng yêu cầu bạn xác định biến trong công việc hạ lưu. Tôi hy vọng nó hữu ích.
(dành cho các googlers đồng nghiệp)
Nếu bạn đang xây dựng một đường dẫn nghiêm túc với Plugin luồng xây dựng , bạn có thể chuyển các tham số giữa các công việc với DSL như sau:
Giả sử tham số chuỗi có sẵn "CVS_TAG", để chuyển nó cho các công việc khác:
build("pipeline_begin", CVS_TAG: params['CVS_TAG'])
parallel (
// will be scheduled in parallel.
{ build("pipeline_static_analysis", CVS_TAG: params['CVS_TAG']) },
{ build("pipeline_nonreg", CVS_TAG: params['CVS_TAG']) }
)
// will be triggered after previous jobs complete
build("pipeline_end", CVS_TAG: params['CVS_TAG'])
Gợi ý để hiển thị các biến / tham số có sẵn:
// output values
out.println '------------------------------------'
out.println 'Triggered Parameters Map:'
out.println params
out.println '------------------------------------'
out.println 'Build Object Properties:'
build.properties.each { out.println "$it.key -> $it.value" }
out.println '------------------------------------'
Chỉ cần thêm câu trả lời của tôi ngoài câu trả lời của Nigel Kirby vì tôi chưa thể bình luận:
Để truyền một tham số được tạo động, bạn cũng có thể xuất biến trong ô 'Execute Shell' và sau đó chuyển nó qua 'Bản dựng tham số kích hoạt trên các dự án khác' => 'Tham số được xác định trước "=> đưa ra' YOUR_VAR = $ YOUR_VAR '. Nhóm của tôi sử dụng tính năng này để chuyển phiên bản gói npm từ công việc xây dựng sang công việc triển khai
CẬP NHẬT: ở trên chỉ hoạt động đối với các tham số được Jenkins tiêm vào, tham số được tạo từ trình bao vẫn cần sử dụng phương thức tương tự. ví dụ. echo YOUR_VAR = $ {YOUR_VAR}> variable.properties và chuyển tệp đó xuống dòng
Tôi cũng gặp phải vấn đề tương tự khi phải chuyển phiên bản pom cho công việc Rundeck hạ lưu.
Những gì tôi đã làm, là sử dụng việc tiêm tham số qua tệp thuộc tính như sau:
1) Tạo thuộc tính trong tệp thuộc tính thông qua shell:
Xây dựng các hành động:
2) Chuyển các thuộc tính đã xác định cho công việc phía dưới: Post Build Actions:
Vd: gửi thuộc tính
3) Sau đó, có thể sử dụng $ POM_VERSION như vậy trong công việc Rundeck hạ nguồn.
/! \ Jenkins Phiên bản: 1.636
/! \ Vì một số lý do khi tạo bản dựng được kích hoạt, cần phải thêm tùy chọn 'Tham số bản dựng hiện tại' để chuyển các thuộc tính.
Đọc qua các câu trả lời, tôi không thấy một tùy chọn nào khác mà tôi thích cũng sẽ cung cấp cho nó. Tôi thích tham số hóa công việc, nhưng nó không phải lúc nào cũng mở rộng quy mô tốt. Nếu bạn có các công việc không trực tiếp xuống phía dưới của công việc đầu tiên nhưng ở xa hơn trong đường ống dẫn, bạn không thực sự muốn tham số hóa mọi công việc trong đường ống để có thể chuyển các tham số đến hết mức. Hoặc nếu bạn có một số lượng lớn các tham số được sử dụng bởi nhiều công việc khác (đặc biệt là những công việc không nhất thiết phải gắn với một công việc chính hoặc công việc chính), thì tham số hóa lại không hoạt động.
Trong những trường hợp này, tôi ưu tiên xuất các giá trị vào tệp thuộc tính và sau đó đưa giá trị đó vào bất kỳ công việc nào tôi cần bằng cách sử dụng plugin EnvInject . Điều này có thể được thực hiện động, là một cách khác để giải quyết vấn đề từ một câu trả lời khác ở trên, nơi các công việc được tham số hóa vẫn được sử dụng. Giải pháp này có quy mô rất tốt trong nhiều tình huống.
Bạn có thể sử dụng trình tạo Hudson Groovy để thực hiện việc này.
Công việc đầu tiên đang triển khai
Công việc thứ hai trong quy trình
Tôi đã hiểu rồi!
Với gần 2 giờ thử và sai, tôi đã tìm ra.
Điều này HOẠT ĐỘNG và là những gì bạn làm để chuyển các biến cho công việc từ xa:
def handle = triggerRemoteJob(remoteJenkinsName: 'remoteJenkins', job: 'RemoteJob' paramters: "param1=${env.PARAM1}\nparam2=${env.param2}")
Sử dụng \ n để phân tách hai tham số, không có dấu cách ..
Trái ngược với tham số: '' 'someparams' ''
chúng tôi sử dụng các tham số: "someparams"
"..." là giá trị của các biến mong muốn. (Đây là dấu ngoặc kép, không phải hai dấu ngoặc kép)
'' '...' '' hoặc '...' sẽ không cho chúng ta những giá trị đó. (Ba dấu nháy đơn hoặc chỉ nháy đơn)
Tất cả các tham số ở đây được xác định trong khối môi trường {} khi bắt đầu đường dẫn và được sửa đổi trong các giai đoạn> các bước> tập lệnh nếu cần thiết.
Tôi cũng đã thử nghiệm và thấy rằng khi bạn sử dụng "...", bạn không thể sử dụng một cái gì đó như '' '... "..."' '' hoặc "... '..'..." hoặc bất kỳ sự kết hợp nào của nó ...
Vấn đề ở đây là khi bạn đang sử dụng "..." trong phần tham số, bạn không thể chuyển một tham số chuỗi; ví dụ Điều này sẽ KHÔNG hoạt động:
def handle = triggerRemoteJob(remoteJenkinsName: 'remoteJenkins', job: 'RemoteJob' paramters: "param1=${env.PARAM1}\nparam2='param2'")
nếu bạn muốn chuyển một cái gì đó giống như ở trên, bạn sẽ cần đặt một biến môi trường param2 = 'param2' và sau đó sử dụng $ {env.param2} trong phần tham số của bước plugin kích hoạt từ xa