Skip to content

Walis 是什麼 ​

Walis 是自己架的 CI/CD。它依排程、webhook 或你按下按鈕來執行 shell 腳本,並保留日誌。

它刻意做得比 Jenkins 與 Woodpecker 少。差別在於它不要求什麼。

Walis 的取捨 ​

JenkinsWoodpeckerWalis
需要 Git forge否是否
需要容器否實務上是選用
執行端要裝 runtimeJVM容器執行環境不用
流程定義放在UI 或 Jenkinsfile只能是 repo 的 YAMLUI,可匯出成 JSON
讀得懂 Jenkinsfile—不可以,用匯入
外掛隔離沒有容器JavaScript 沙箱

Jenkins 什麼都做得到,是因為外掛跟核心在同一個 JVM 裡且沒有沙箱——這也是為什麼一個壞掉的外掛 可以拖垮整台 controller。Woodpecker 的隔離是免費的,因為每一步都是容器——代價是綁死 forge 與容器環境。

Walis 走第三條路:限制外掛的輸出形式,而不是限制它跑在哪。外掛回傳一段 shell, 你在安裝前就讀得到。

從小開始,不代表只能小 ​

預設是一個程序加一個 SQLite 檔:不必另外跑資料庫、不用設定,/health 會回報 clustered: false。

一個節點不夠用時,把 Walis 接上 PostgreSQL、MySQL 或 SQL Server,多個 API 節點就能共用同一份資料。 它們以原子操作認領建置,並用租約選出誰負責「整個叢集只該做一次」的工作——Cron 觸發、離線偵測、 清理與備份。搬過去就是一次備份加一次還原,因為備份檔與資料庫種類無關。

哪些會變、哪些不變,見高可用。

已經在用 Jenkins? ​

Walis 直接讀 Jenkins 自己的檔案。貼上 Jenkinsfile(宣告式或腳本式)或任務的 config.xml, 它會把 stage 轉成步驟、parallel 轉成平行步驟、post 轉成執行條件、parameters 轉成建置參數, 對不上的則列成警告清單。在你看過草稿並儲存之前,什麼都不會寫進去。

Jenkins 的流程常靠的那幾塊,Walis 現在也長出來了:建置參數、事後步驟、逐步驟重試、 disableConcurrentBuilds,以及下游任務觸發。

完整對應表,以及誠實列出轉不了的東西,見從 Jenkins 匯入。

它不是什麼 ​

  • 不是 Git 主機。 用 webhook 指向你的 repo,或者跑根本沒有 repo 的任務。
  • 不是容器平台。 它執行 shell;要用容器,讓你的腳本自己去啟動。

以 MIT 授權釋出。