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

2022-02-21 11:57:58 字數 2427 閱讀 1610

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

大約在一年半以前寫過一篇文章『探秘varian:優雅的發布部署程式』,裡邊有講到我們採用類似lego的模組化方式來構建cicd的流程,雖能滿足我們的需求,但終究需要編寫**,使用成本有點高,不夠友好。近段時間終於下定決心將其重構,只為帶來更好的使用體驗,於是便有了這個專案probiusprobius為遊戲星際爭霸裡的角色,是乙隻充滿好奇心的星靈探測機,取此名字的意思也是希望使用者能夠在這個系統中充分發揮想象,借助此系統實現各種自定義的功能,覆蓋更多的運維場景

命令:為系統中的最小粒度,可以是乙個具體的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的原始碼在這裡:感興趣可以自行閱讀部署,需要注意的是codo為微服務架構,單獨安裝task是無法正常執行的,具體部署方法參考官方文件

乙個功能強大的linux命令 find

linux下find命令在目錄結構中搜尋檔案,並執行指定的操作。linux下find命令提供了相當多的查詢條件,功能很強大。由於find具有強大的功能,所以它的選項也很多,其中大部分選項都值得我們花時間來了解一下。即使系統中含有網路檔案系統 nfs find命令在該檔案系統中同樣有效,只你具有相應的...

乙個功能強大的日誌工具類

日誌可謂是開發中必不可少的工具了,但是一般的日誌資訊難以滿足我們的需要,特別是對於大一點的複雜的專案,日誌太多,經常導致我們定位不到列印日誌的位置.因此我們希望列印的日誌能告訴我們日誌是在 列印的,哪個類,哪個方法,哪一行?更進一步,最好我點選日誌就能跳轉到原始碼處,那就更好啦.可以看到有具體的執行...

功能強大的KSnapshot

ksnapshot是kde整合桌面環境自帶的截圖工具,不過在gnome整合桌面環境下也可以安裝和使用它。我們可以通過新立得軟體包管理器或使用apt get命令來安裝它。假設使用命令列方式來安裝,開啟乙個gnome終端視窗,在終端視窗中輸入如下命令 sudo apt get install ksnap...