您好,登錄后才能下訂單哦!
小編給大家分享一下Jenkins可視化階段視圖的改進是什么,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!
流水線除了成功或失敗以外,還有一種介于兩者之間的狀態
最近發布了的一些變更給了流水線編輯者新的工具以改善在 Blue Ocean 中的流水線可視化,有一個備受矚目關注的工單JENKINS-39203,這會導致當流水線的構建結果為不穩定時所有的階段都被設置為不穩定的。這個缺陷導致無法快速地識別為什么構建是不穩定的,使得用戶必須查看完整的日志和 Jenkinsfile 才能弄明白究竟發生了什么。
為了修復這個問題,我們引入了一個新的流水線 API 用于為單個流水線步驟添加額外的結果信息。像 Blue Ocean 這樣的可視化工具在決定階段如何顯示時會使用到這新的 API。像 junit
這樣的步驟只能設置整個構建結果,現在可以通過新的 API 設置步驟級別的結果信息。我們創建了新的步驟 unstable
和 warnError
,這樣流水線編輯者在更復雜的場景下仍然可以利用這個新的 API。
該問題涉及到的重要的修復包含在如下的插件中,它們都需要 Jenkins 2.138.4 以及更新的版本:
Pipeline: API 2.34
Pipeline: Basic Steps 2.18 (需要同步更新到 Pipeline: Groovy 2.70)
Pipeline: Graph Analysis 1.10
Pipeline: Declarative 1.3.9
Blue Ocean 1.17.0
這里是一條使用了 unstable
步驟的流水線在 Blue Ocean 中的截圖,只會把失敗的階段標識為不穩定的:
這里給出一些如何在你的流水線中使用該特性的示例:
使用新的步驟 warnError
用于捕獲錯誤,并把構建和階段標記為不穩定的。 warnError
只需要一個 字符串
的參數,用于當捕獲到錯誤時以日志的形式輸出。當 warnError
捕獲到一個錯誤時,它會記錄該消息以及錯誤,并設置構建和階段的結果為不穩定的。效果如下:
warnError('Script failed!') { sh('false') }
使用新的步驟 unstable
設置構建和階段結果為不穩定的。可以使用該步驟直接替換 currentBuild.result = 'UNSTABLE'
,在 warnError
不夠靈活時這會比較有用。步驟 unstable
只需要一個 字符串
參數,當該步驟運行時會作為消息。使用的方法如下:
try { sh('false') } catch (ex) { unstable('Script failed!') }
JUnit Plugin: 更新到 1.28 或者更高的版本,使得步驟 junit
可以直接把該階段設置為不穩定的。
Warnings Next Generation Plugin: 更新到 5.2.0 或者更高的版本,使得步驟 publishIssues
和 recordIssues
可以直接把該階段設置為不穩定的。
其他插件: 如果你的流水線被其他插件中的步驟標記為不穩定的,請(在檢查沒有重復項后)給該組件提交一個新的 issue,清晰地描述哪個步驟是有問題的,以及發生問題的環境,并添加鏈接到該文章的開發者區域,以便維護者了解如何才能解決該問題。
如果你不遷移到 unstable
或 warnError
步驟,或不升級插件到集成來新 API 的情況下設置構建狀態,那么即使構建是不穩定的,Blue Ocean 也不會把任何階段顯示為不穩定的。
即使在這些變化后,currentBuild.result
繼續只會覆蓋構建狀態。不幸的是,由于 currentBuild
是作為全局變量而實現的,因此,無法讓它設置步驟或者階段級別的結果,這意味這它沒有任何步驟級別的上下文可以使用到新的 API。
Pipeline Stage View Plugin 尚未升級到使用這個新的 API,因此,這些變更不會在它提供的可視化中得到體現。
Jenkins 流水線步驟可以以兩種方式完成:成功并返回一個結果(可能為 null),或者是失敗的,并拋出一個異常。當步驟失敗并拋出異常時,該異常會貫穿整個流水線,直到有其他的步驟或者 Groovy 代碼捕獲,或者它到達流水線的頂層并導致流水線失敗。基于拋出的異常的不同類型,流水線最終的結果可能不是失敗(例如:某些情況下是被終止的)。基于異常傳播的方式,像 Blue Ocean 這樣的工具可以輕松地識別哪些步驟(以及階段)是失敗的。
為了能夠讓流水線能夠與相應的 Jenkins API 交互,對于流水線構建來說,可以在構建期間修改構建結果也是有必要的。對于其他的,這使得流水線可以使用構建步驟以及原先出自于自由風格的任務中的項目。
在一些情況下,一個流水線步驟需要能夠成功地完成,以便流水線可以繼續正常執行,但對此而言能夠標記有某種錯誤發生,因此,在可視化時能夠識別到發生錯誤的步驟,即使沒有徹底失敗。比較好的一個例子就是 junit
步驟。該步驟關注特定的測試結果,如果有任何錯誤,會把整個構建結果標記為不穩定的。這種行為對類似 BlueOcean 的可視化工具而言是有問題的,因為該步驟是成功的,而且無法通過編程的方式覆蓋于該步驟相關的最終結果。
再次查看下 JENKINS-39203,我們看到關于可視化有兩項基本的選項。因為有的步驟導致構建變成不穩定的,設置總體的構建結果是不穩定的,或者所有的步驟都成功完成來也展示為不穩定的;或者由于我們沒有辦法把特定步驟相關的構建結果作設置,它們可能顯示為成功的。最后,選擇了第一個選項。
為了解決該問題,部分用戶嘗試通過拋出異常并在階段中增加 try/catch
這樣的代碼塊用于處理異常,這樣 Blue Ocean 能夠借助這些異常來標記步驟和階段的結果為期望的狀態,而且,捕獲異常后,流水線可以繼續正常執行。這種方式不容易理解,脆弱,而且無法在申明式的流水線中使用。
以上是“Jenkins可視化階段視圖的改進是什么”這篇文章的所有內容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內容對大家有所幫助,如果還想學習更多知識,歡迎關注億速云行業資訊頻道!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。