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

coffee發表於2020-06-17

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

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

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

設計思路

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

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

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

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

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

頁面配置

新建命令,在這個頁面可以建立命令或者指令碼

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

理論上不限制指令碼的型別,可以是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)

其他語言類似

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

然後給模板新增任務

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

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

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

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

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

可以點選每一步任務後邊的日誌檢視實時日誌輸出

寫在最後

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

掃碼關注公眾號檢視更多實用文章

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

相關文章