2016-04-15 16 views
25

Sau khi đọc Jenkins tutorial giải thích Pipeline trình cắm, có vẻ như plugin sẽ giúp bạn có thể triển khai Các bước sau khi xây dựng. Tuy nhiên tài liệu là khá hạn chế liên quan đến hướng dẫn cụ thể.Làm cách nào để triển khai giai đoạn Post-Build bằng trình cắm thêm Jenkins Pipeline?

Ví dụ Tôi tự hỏi làm thế nào để thực hiện:

  • Run chỉ khi xây dựng thành công
  • Run chỉ khi xây dựng thành công hoặc không ổn định
  • Run bất kể kết quả xây dựng
  • Run chỉ khi xây dựng thành công

    stage 'build' 
    ... build 
    ... tests 
    stage 'post-build' 
    ... 
    

    (Hoặc thêm -Dmaven.test.failure.ignore=false đến MAVEN_OPTS)

  • Run chỉ khi xây dựng thành công hoặc không ổn định

    stage 'build' 
    ... build 
    try { 
        ... tests 
    } catch { 
        ... 
    } 
    stage 'post-build' 
    ... 
    

    (Hoặc thêm -Dmaven.test.failure.ignore=true đến MAVEN_OPTS)

  • Chạy bất kể kết quả xây dựng - nó có thể được thực hiện bằng cách sử dụng try/catch/finally không?

    try { 
        stage 'build' 
        ... 
    } catch { 
        ... 
    } finally { 
        stage 'post-build' 
        ... 
    } 
    

(tôi đã nhận thấy rằng tình trạng thức xây dựng được thiết lập như SUCCESS mặc dù một số giai đoạn, tức là. 'Xây dựng', đã thất bại vì nó thiết lập dựa trên giai đoạn cuối cùng. Điều đó có nghĩa chính thức trạng thái xây dựng cần được đặt rõ ràng, tức là currentBuild.result = 'UNSTABLE'?)

+0

trùng lặp có thể xảy ra của [Làm thế nào để đảm bảo rằng một đường ống dẫn giai đoạn Jenkins luôn thực hiện, ngay cả khi một trước một thất bại ?] (http://stackoverflow.com/questions/37463489/how-do-i-assure-that-a-jenkins-pipeline-stage-is-always-executed-even-if-a-prev) –

Trả lời

4

Nếu bạn đang sử dụng thử/nắm bắt và bạn muốn xây dựng được đánh dấu là không ổn định hoặc không thành công thì bạn phải sử dụng currentBuild.result = 'UNSTABLE'. một số plugin như plugin JUnit Report sẽ thiết lập điều này cho bạn nếu nó tìm thấy các kiểm tra không thành công trong kết quả junit. Nhưng trong hầu hết các trường hợp, bạn phải tự thiết lập nếu bạn gặp lỗi.

Tùy chọn thứ hai nếu bạn không muốn tiếp tục là phải sửa lại lỗi.

stage 'build' 
... build 
try { 
    ... tests 
} catch(err) { 
    //do something then re-throw error if needed. 
    throw(err) 
} 
stage 'post-build' 
... 
1

try-catch khối có thể được thiết lập để xử lý các lỗi như trong mã ứng dụng thực.

Ví dụ:

try { 
    node { 
     sh 'sleep 20' // <<- can abort here 
    } 
} catch (Exception e) { 
    println 'catch' 
} finally { 
    println 'finally' 
} 

node { 
    println 'second' 
} 

try { 
    node { 
     sh 'sleep 20' // <<- can abort here again 
    } 
} catch (Exception e) { 
    println 'catch' 
} finally { 
    println 'finally' 
} 

Và đây là kết quả ví dụ với hai hủy bỏ.

Started by user me 
Replayed #3 
[Pipeline] node 
Running on my-node in /var/lib/jenkins-slave/workspace/my-job 
[Pipeline] { 
[Pipeline] sh 
[my-job] Running shell script 
+ sleep 20 

Aborted by me 

Sending interrupt signal to process 

/var/lib/jenkins-slave/workspace/[email protected]/durable-9e1a15e6/script.sh: line 2: 10411 Terminated    sleep 20 
[Pipeline] } 
[Pipeline] // node 
[Pipeline] echo 
catch 
[Pipeline] echo 
finally 
[Pipeline] node 
Running on my-node in /var/lib/jenkins-slave/workspace/my-job 
[Pipeline] { 
[Pipeline] echo 
second 
[Pipeline] } 
[Pipeline] // node 
[Pipeline] node 
Running on my-node in /var/lib/jenkins-slave/workspace/my-job 
[Pipeline] { 
[Pipeline] sh 
[my-job] Running shell script 
+ sleep 20 

Aborted by me 

Sending interrupt signal to process 
/var/lib/jenkins-slave/workspace/[email protected]/durable-d711100c/script.sh: line 2: 10416 Terminated    sleep 20 
[Pipeline] } 
[Pipeline] // node 
[Pipeline] echo 
catch 
[Pipeline] echo 
finally 
[Pipeline] End of Pipeline 
Finished: ABORTED 

Tất nhiên, điều này làm việc cho mọi trường hợp ngoại lệ xảy ra trong quá trình thực thi.

14

Cách tốt nhất là sử dụng hành động xây dựng bài đăng trong tập lệnh đường ống.

Thất bại Xử
Declarative đường ống hỗ trợ thất bại mạnh mẽ xử lý theo mặc định qua đường bưu phần của nó mà cho phép khai báo một số của "hậu điều kiện" khác nhau như: luôn luôn, không ổn định, thành công, thất bại, và thay đổi. Phần Cú pháp Đường ống cung cấp chi tiết hơn về cách sử dụng các điều kiện đăng khác nhau.

Jenkinsfile (Declarative Pipeline)

pipeline { 
    agent any 
    stages { 
     stage('Test') { 
      steps { 
       sh 'make check' 
      } 
     } 
    } 
    post { 
     always { 
      junit '**/target/*.xml' 
     } 
     failure { 
      mail to: [email protected], subject: 'The Pipeline failed :(' 
     } 
    } 
} 

Các tài liệu dưới https://jenkins.io/doc/book/pipeline/syntax/#post

+3

điều này không 't làm việc cho tôi khi tôi đang chạy nó trong dự án Pipeline –

+0

@Mohamed, a s Subrat nói, điều này không hoạt động bên ngoài tập tin jenkins. Có cách nào khác để làm điều đó không? – Jason

+0

Nó có thể là do phiên bản jenkins hoặc phiên bản plugin tuy nhiên tôi không chắc chắn. Cách khác để làm điều đó là đặt các thay đổi trong một lần thử bắt và chặn cuối cùng. –

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