Probius:一個功能強大的自定義任務系統

NO IMAGE

斷更的這些日子,我又折騰了一個輪子,文末參考源碼

大約在一年半以前寫過一篇文章『探祕varian:優雅的發佈部署程序』,裡邊有講到我們採用類似lego的模塊化方式來構建CICD的流程,雖能滿足我們的需求,但終究需要編寫代碼,使用成本有點高,不夠友好。近段時間終於下定決心將其重構,只為帶來更好的使用體驗,於是便有了這個項目Probius

Probius為遊戲星際爭霸裡的角色,是一隻充滿好奇心的星靈探測機,取此名字的意思也是希望用戶能夠在這個系統中充分發揮想象,藉助此係統實現各種自定義的功能,覆蓋更多的運維場景

設計思路

Probius由三個關鍵詞構成:命令、模板、任務

命令:為系統中的最小粒度,可以是一個具體的linux命令,或者是一個腳本都可以

模板:模板為一組命令的集合

任務:模板為靜態的定義,而任務就是模板的執行,執行一個任務實際上就是去執行了一個模板內的所有命令

整體思想跟varian一樣,但不同的是可以僅僅通過web端的配置,就能實現各種各樣的功能,下邊具體介紹下如何配置的

頁面配置

新建命令,在這個頁面可以創建命令或者腳本

Probius:一個功能強大的自定義任務系統

如果是單純的命令,直接在命令輸入框填寫即可,如果是需要執行腳本,則點擊腳本之後,會額外多出一個腳本輸入框,填寫要執行的腳本

Probius:一個功能強大的自定義任務系統

理論上不限制腳本的類型,可以是shell、python或者go之類的,前提是系統上有腳本的運行環境,當命令或者腳本有參數的時候可以在參數列寫上參數名稱,然後在最終執行任務的時候需要傳遞具體參數的值過來

在命令執行完成後,會根據命令的返回狀態也就是$?的值來判斷命令是否執行成功,當$?為0是表示執行成功,否則表示執行失敗,如果是執行的腳本時,需要在腳本最後明確腳本返回狀態,shell腳本可以在腳本執行成功時通過exit指定退出狀態,例如

ls /ops-coffee.cn &&\
exit 0 ||\
exit 2

而對於python腳本則可以藉助sys.exit這樣寫

import sys
if 'www' in 'ops-coffee.cn':
sys.exit(0)
else:
sys.exit(3)

其他語言類似

模板的創建分為幾步,先創建一個模板

Probius:一個功能強大的自定義任務系統

然後給模板添加任務

Probius:一個功能強大的自定義任務系統

主要為選擇任務、確定執行順序、選擇執行主機以及執行用戶,添加完成後可以在模板詳情頁面看到關聯的命令

Probius:一個功能強大的自定義任務系統

模板定義了一個完整的任務流程,定義完成後就可以執行任務了,執行任務界面寫的比較簡單

Probius:一個功能強大的自定義任務系統

這界面主要給運維人員使用,定義任務名稱、所要執行的模板ID、以及參數,支持定時執行或者週期執行,只需要加上crontab參數即可,除了可以立即執行任務外,還可以將次任務保存為常用任務,後續在常用任務頁面可以直接執行

Probius:一個功能強大的自定義任務系統

這個功能主要方便其他非運維人員使用本系統,同時也支持針對任務設置權限,可以將權限設置給某個用戶組,那麼則只有這個組內的成員可以看到並執行任務了

Probius:一個功能強大的自定義任務系統

任務執行後可以通過任務歷史查看任務執行詳情,在這個頁面可以清晰的看到任務執行到了哪一步,是成功還是失敗

Probius:一個功能強大的自定義任務系統

可以點擊每一步任務後邊的日誌查看實時日誌輸出

Probius:一個功能強大的自定義任務系統

寫在最後

如果你用過我們開源的一站式DevOps平臺CODO的話,會發現這個系統跟CODO的TASK模塊非常像,是的沒錯,這個設計與CODO的TASK如出一轍,但開源的CODO任務模塊要更加強大,例如支持分組執行、支持任務重做、支持人工干預等等

Probius:一個功能強大的自定義任務系統

TASK的源碼在這裡:github.com/opendevops-…,感興趣可以自行閱讀部署,需要注意的是CODO為微服務架構,單獨安裝TASK是無法正常運行的,具體部署方法參考官方文檔

相關文章

AndroidGradle(二)簽名配置和依賴管理

AndroidJetpack架構組件(五)一文帶你瞭解LiveData(原理篇)

AndroidJetpack架構組件(四)一文帶你瞭解LiveData(使用篇)

遊記|一場說走就走的旅行,突破常規,驚喜不斷