外掛
Walis 的外掛只做一件事:把使用者填的參數變成一段 shell。Walis 把那段 shell 當成建置的一個步驟執行。
這個限制就是整個設計。外掛產出的是資料,不是行為——所以安裝之前, 你可以按預覽,讀到它到底會跑什麼。
為什麼不走 Jenkins 那條路
Jenkins 的外掛什麼都做得到:它們跟核心在同一個 JVM,沒有沙箱。這是它生態龐大的原因, 也是為什麼一個會洩漏記憶體的外掛可以拖垮 controller,以及為什麼那麼多安全公告的開頭是某個外掛的名字。
Walis 沒辦法同時給你那種能力,又讓你安裝陌生人寫的東西。它選了後者。
外掛碰得到什麼
只有 manifest 宣告過的:
json
"permissions": {
"http": ["https://acme.atlassian.net"],
"secrets": ["JIRA_TOKEN"]
}機密是能用但讀不到——外掛要求 host 把值放進某個標頭,自己拿不到內容。 少了這條規則,任何有連外權限的外掛都能把你的權杖送去任何地方。
執行環境是 Jint(純 C# 的 JS 直譯器):沒有 require、fs、process,執行期也沒有 npm。 上限是 10 秒、8 MB、50 萬語句、遞迴 64 層。
安裝是管理員的動作
外掛是會被執行的程式碼,所以 /api/plugins 需要管理員角色——operator 的金鑰裝不了。
接著看:開發外掛。