2014-04-07 15 views
7

Tôi muốn thêm bước Xây dựng với plugin Groovy để đọc tệp và kích hoạt xây dựng không thành công tùy thuộc vào nội dung của tệp.Đọc tệp từ Không gian làm việc trong Jenkins với tập lệnh Groovy

Làm cách nào để có thể chèn đường dẫn tệp không gian làm việc trong plugin groovy?

myFileDirectory = // Get workspace filepath here ??? 
myFileName = "output.log" 
myFile = new File(myFileDirectory + myFileName) 

lastLine = myFile.readLines().get(myFile.readLines().size().toInteger() - 1) 
if (lastLine ==~ /.Fatal Error.*/){ 
    println "Fatal error found" 
    System.exit(1) 
} else{ 
    println "nothing to see here" 
} 
+0

Jenkins có thể tự không thành công dựa trên ví dụ: kết quả kiểm tra. Chính xác bạn muốn đạt được điều gì? Có lẽ có một plugin cho nó rồi. Thay vì truyền tên tệp Bạn có thể thực hiện tìm kiếm tệp. – Opal

+0

Tôi có một chương trình bên ngoài (exe) mà tôi đang gọi để tạo một tệp thực thi, nó cũng tạo tệp nhật ký. Tôi muốn tìm trong tệp nhật ký đó và không xây dựng nếu tìm thấy [Lỗi nghiêm trọng]. –

+0

Vâng, ok. Tôi đoán nhật ký này có một số tên có thể dễ dàng nhận ra. Nếu có, hãy tìm tệp này cho đường dẫn cụ thể và kiểm tra nội dung. – Opal

Trả lời

3

Dựa trên ý kiến ​​của bạn, bạn sẽ được tốt hơn off với Text-finder plugin.

Nó cho phép tìm kiếm (các) tệp, cũng như bảng điều khiển, cho cụm từ thông dụng và sau đó đặt bản dựng hoặc unstable hoặc failed nếu tìm thấy.

Đối với Groovy, bạn có thể sử dụng sau đây để truy cập vào biến ${WORKSPACE} môi trường:
def workspace = manager.build.getEnvVars()["WORKSPACE"]

+9

#groovyNoob tại đây. nơi có thể quản lý.bulid.getEnvVars? –

0

Nếu bạn đã có Groovy (Postbuild) cài đặt plugin, tôi nghĩ rằng đó là một mong muốn chính đáng để có được điều này được thực hiện với (generic) Groovy thay vì cài đặt một plugin (chuyên dụng).

Điều đó nói rằng, bạn có thể nhận được không gian làm việc bằng cách sử dụng manager.build.workspace.getRemote(). Đừng quên thêm File.separator giữa đường dẫn và tên tệp.

20

Tôi nhận ra câu hỏi này là tạo plugin, nhưng kể từ khi xây dựng đường ống Jenkins 2 mới sử dụng Groovy, tôi thấy mình ở đây trong khi cố gắng tìm ra cách đọc tệp từ không gian làm việc trong xây dựng Đường ống. Vì vậy, có lẽ tôi có thể giúp một người như tôi trong tương lai.

Hóa ra nó rất dễ dàng, có một bước readfile, và tôi nên có RTFM:

env.WORKSPACE = pwd() 
def version = readFile "${env.WORKSPACE}/version.txt" 
+0

Bạn có thể lặp qua đối tượng, sau khi đọc nó không? Tôi không thể làm .. Và Jenkins không ném một lỗi cùng một lúc .. cố gắng od gỡ lỗi ngớ ngẩn thứ .. pheww! – OK999

+0

đầu ra là một String để bạn có thể phân tích cú pháp đó và chia thành \ n nếu bạn muốn xem nó theo dòng – Cal

0

Nếu bạn đang cố gắng để đọc một tập tin từ workspace trong một bước đường ống xây dựng, có một phương pháp cho rằng:

readFileFromWorkspace('name-of-file.groovy') 

Để tham khảo, hãy xem https://jenkins.io/doc/pipeline/steps/workflow-basic-steps/#code-readfile-code-read-file-from-workspace.

+0

thực sự liên kết được cung cấp nói về 'readFile()' (tôi không tìm thấy bất kỳ 'readFileFrom Workspace() nào ') - nhưng dù sao đi nữa, vì readFile() đã giải quyết được vấn đề của tôi! – Roman

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