2016-08-02 19 views
9

Hiện nay đường ống của tôi thất bại (màu đỏ), khi một maven-công việc không ổn định (màu vàng).Jenkins Pipeline Thất bại nếu Bước là ổn định

node { 
    stage 'Unit/SQL-Tests' 
    parallel (
     phase1: { build 'Unit-Tests' }, // maven 
     phase2: { build 'SQL-Tests' } // shell 
    ) 
    stage 'Integration-Tests' 
    build 'Integration-Tests' // maven 
} 

Trong ví dụ này kết quả Unit-Test không ổn định nhưng được hiển thị là không thành công trong đường ống.

Làm cách nào để thay đổi công việc/đường ống/jenkins để (1) bước đường ống không ổn định thay vì không thành công và (2) trạng thái của đường ống không ổn định thay vì không thành công.

Tôi đã thử thêm thông số MAVEN_OPTS-Dmaven.test.failure.ignore=true, nhưng điều đó không giải quyết được vấn đề. Tôi không chắc chắn làm thế nào để bọc build 'Unit-Test' vào một số logic có thể bắt và xử lý kết quả.

Thêm đường nhánh phụ với this logic không thực hiện thủ thuật, vì không có tùy chọn thanh toán từ lật đổ (tùy chọn đó có sẵn trong công việc thường xuyên). Tôi không muốn sử dụng thanh toán dòng lệnh nếu có thể.

Trả lời

10

Dù bước là không ổn định hoặc FAILED, xây dựng kết quả cuối cùng trong kịch bản của bạn sẽ được FAILED.

Bạn có thể thêm tuyên truyền sai sự thật để theo mặc định để tránh thất bại dòng chảy.

def result = build job: 'test', propagate: false 

Khi kết thúc luồng, bạn có thể phán quyết kết quả cuối cùng dựa trên những gì bạn nhận được từ biến "kết quả".

Ví dụ

currentBuild.result='UNSTABLE' 

Dưới đây là một ví dụ chi tiết How to set current build result in Pipeline

Br,

Tim

13

Bài học kinh nghiệm:

  • Jenkins sẽ liên tục cập nhật đường ống theo giá trị currentBuild.result có thể là SUCCESS, UNSTABLE hoặc FAILED
  • Kết quả của build job: <JOBNAME> có thể được lưu trữ trong một biến. Trạng thái xây dựng nằm trong variable.result.
  • build job: <JOBNAME>, propagate: false sẽ ngăn không cho toàn bộ quá trình xây dựng bị lỗi ngay lập tức.
  • currentBuild.resultcan only get worse. Nếu giá trị mà trước đây FAILED và nhận được một trạng thái mới SUCCESS qua currentBuild.result = 'SUCCESS' nó sẽ ở lại FAILED

Đây là những gì cuối cùng tôi đã sử dụng:

node { 
    def result // define the variable once in the beginning 
    stage 'Unit/SQL-Tests' 
    parallel (
     phase1: { result = build job: 'Unit', propagate: false }, // might be UNSTABLE 
     phase2: { build 'SQL-Tests' } 
    ) 
    currentBuild.result = result.result // update the build status. jenkins will update the pipeline's current status accordingly 
    stage 'Install SQL' 
    build 'InstallSQL' 
    stage 'Deploy/Integration-Tests' 
    parallel (
     phase1: { build 'Deploy' }, 
     phase2: { result = build job: 'Integration-Tests', propagate: false } 
    ) 
    currentBuild.result = result.result // should the Unit-Test be FAILED and Integration-Test SUCCESS, then the currentBuild.result will stay FAILED (it can only get worse) 
    stage 'Code Analysis' 
    build 'Analysis' 
} 
+2

Và bạn không thể đặt một 'kết quả SUCCESS', nếu nó đã được đặt thành 'FAILED' rồi (như đã thảo luận [ở đây] (http://stackoverflow.com/questions/38221836/how-to-manipulate-the-build-result-of-a-jenkins-pipeline-job). – StephenKing

+1

Cảm ơn thông tin đã được thêm vào câu trả lời – michaelbahr

+0

Tôi đang gặp vấn đề tương tự, nhưng tôi vẫn không hiểu lý do.Tại sao Unstable được coi là FAILED, nếu plugin Stage View hỗ trợ không ổn định (màu vàng)? tại sao bạn cần phải thiết lập currentBuild.result tất cả các thời gian và không chỉ mất tồi tệ nhất của tất cả? – lqbweb

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