斷更的這些日子,我又折騰了一個輪子,文末參考原始碼
大約在一年半以前寫過一篇文章『探祕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是無法正常執行的,具體部署方法參考官方文件