寫在前面的話
在一個企業研發部門內部,可能存在多個運維人員,而這些運維人員往往負責不同的項目,但是有可能他們用的又是同一個 Jenkins 的不同用戶。那么我們就希望實現一個需求,能夠不同的用戶登錄 Jenkins 以后看到不同的項目。Jenkins 提供了簡單的權限管理,我們可以在 系統管理 --> 全局安全配置 看到:
但是這里的權限配置太過簡略,顯然無法滿足我們復制的需求,所以在這個時候引入了 Jenkins 的一個插件:Role-based Authorization Strategy
插件:Role-based Authorization Strategy
打開插件中心,我們可以搜索:
重啟 Jenkins 以后,再度打開:系統管理 --> 全局安全配置 會發現多了我們剛剛插件的選項
我們選擇該配置,同時在 系統管理 中出現了新的選項:
准備工作:
1. 將我們的項目復制成如下用於測試:
2. 新建 3 個測試用戶:test / develop / product
打開:系統管理 --> 管理用戶
最終用戶格式:
配置權限:
打開:系統管理 --> Manage and Assign Roles
我們主要使用上面兩種。一個用戶想要進行操作必須要有兩種角色,一種是全局,一種是 Project:
1. 創建角色:Manage Roles
2. 分配角色:Assign Roles
說明:我們這三個用戶其實代表着三個不同的屬性,為了區分我給他定義了三種不同角色。這樣以后就可以給每個角色授權不一樣的權限。
當然,我們這里就給了一個全部的只讀權限,用戶可以登錄,並且修改自己的東西。
3. 創建項目角色:Manage Roles
4. 給用戶分配項目權限:Assign Roles
說明:我們給用戶分配不同的項目和權限,便於測試對比。
5. 查看權限效果:
test 用戶登錄后項目:
test 用戶項目權限:
test 用戶權限說明:test 用戶登錄后能看到 TEST 開頭的項目,包括文件夾,但是對於項目,test 用戶都只具有執行權限,而沒有修改和配置的權限。
develop 用戶登錄后項目:
develop 用戶項目權限:
develop 用戶權限說明:可以看到,因為我們多配置了 Config 權限的原因,develop 相比於 test 用戶對於分配給自己權限的項目多了修改配置權限。
product 用戶登錄后項目:
product 用戶對於 TEST 項目權限:
product 用戶對於 PRODUCT 項目權限:
product 用戶授權說明:我們可以看到,PROCUDT 項目由於授權了 config 權限,所以用戶能夠修改,TEST 項目沒用 config 權限,雖然同樣是授權給了 product 用戶,但是也是只有執行權限而已。
至此,基本的權限管理大致完成!
特別注意
在我們設置用戶權限的時候,默認已經包含了管理員角色:
如果我們一不小心把這個勾去掉了,然后就炸了!
最終的解決辦法是:
1. 停止 Jenkins。
2. 備份 /data/jenkins/jenkins-data/config.xml 配置文件。
3. 修改配置:
<useSecurity>true</useSecurity> # 改為 <useSecurity>false</useSecurity>
4. 刪除權限配置:建議文件拿來了使用 nodepad++ 類似的工具修改
刪除:<authorizationStrategy> 標簽及其內部內容。
刪除:<securityRealm> 標簽及其內部內容。
5. 啟動 jenkins,此時不需要用戶名密碼,查看設置:
默認沒有啟動安全,我們需要重新配置我們之前的東西!
小結
Role 插件相比於系統的雖然完善了不少,但是仍然在很多時候顯得不那么只能,而且前端似乎並不友好。但沒辦法,這東西沒得挑。