Walis 是什麼
Walis 是自己架的 CI/CD。它依排程、webhook 或你按下按鈕來執行 shell 腳本,並保留日誌。
它刻意做得比 Jenkins 與 Woodpecker 少。差別在於它不要求什麼。
Walis 的取捨
| Jenkins | Woodpecker | Walis | |
|---|---|---|---|
| 需要 Git forge | 否 | 是 | 否 |
| 需要容器 | 否 | 實務上是 | 選用 |
| 執行端要裝 runtime | JVM | 容器執行環境 | 不用 |
| 流程定義放在 | UI 或 Jenkinsfile | 只能是 repo 的 YAML | UI,可匯出成 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;要用容器,讓你的腳本自己去啟動。