Tôi đang sử dụng một Jenkinsfile trong một đường ống dẫn trên phiên bản 2.32.2.Đường ống Jenkins sh dường như không tôn trọng đường ống trong lệnh shell
Vì nhiều lý do tôi muốn trích xuất chuỗi phiên bản từ pom. Tôi đã hy vọng tôi sẽ không phải thêm các plugin trợ giúp maven và sử dụng đánh giá.
Tôi nhanh chóng đưa ra một biểu thức nhỏ để có được nó ra khỏi pom sử dụng đường ống và hoạt động trên dòng lệnh trong không gian làm việc jenkins trên người thực thi.
$ sed -n '/<version>/,/<version/p' pom.xml | head -1 | sed 's/[[:blank:]]*<\/*version>//g' 1.0.0-SNAPSHOT
Nó có thể có thể được tối ưu hóa, nhưng tôi muốn hiểu lý do tại sao các đường ống dẫn có vẻ là không vào lệnh sh máy. Tôi đã chơi với các định dạng chuỗi khác nhau và hiện đang sử dụng chuỗi đô la slashy.
Bước đường ống trông giống như sau để cho phép đầu ra dễ dàng của chuỗi lệnh:
script {
def ver_script = $/sed -n '/<version>/,/<version/p' pom.xml | head -1 | sed 's/[[:blank:]]*<\/*version>//g'/$
echo "${ver_script}"
POM_VERSION = sh(script: "${ver_script}", returnStdout: true)
echo "${POM_VERSION}"
}
Khi chạy trong các đường ống Jenkins tôi nhận được đầu ra giao diện điều khiển sau đây có vẻ như được tách các lệnh bằng đường ống vào các lệnh riêng biệt:
[Pipeline] script
[Pipeline] {
[Pipeline] echo
sed -n '/<version>/,/<version/p' pom.xml | head -1 | sed 's/[[:blank:]]*<\/*version>//g'
[Pipeline] sh
[FRA-198-versioned-artifacts-44SD6DBQOGOI54UEF7NYE4ECARE7RMF7VQYXDPBVFOHS5CMSTFLA] Running shell script
+ sed -n /<version>/,/<version/p pom.xml
+ head -1
+ sed s/[[:blank:]]*<\/*version>//g
sed: couldn't write 89 items to stdout: Broken pipe
[Pipeline] }
[Pipeline] // script
Bất kỳ hướng dẫn nào về cách sử dụng đúng cách lệnh đường ống trong tệp jenkinsfile?
Không cần phải làm điều đó nữa. Xem câu trả lời của tôi bằng cách sử dụng bước 'readMavenPom'. – StephenKing
Tuyệt vời! Tôi sẽ sử dụng nó ngay lập tức. Cảm ơn – mattvbv