一、背景
需求是Job/Item隔離。即各個團隊可以建立自己的job/item,别人無法看到。
ps:我全文用了Job一詞,在Jenkins中其實是Item
ps:自己研究了幾天,從一開始以為Jenkins權限支援的不好,到 Role-based Authorization Strategy插件,再到LDAP、組權限等,其實發現最簡單的就在眼皮下。
二、步驟
- 安裝插件 Matrix Authorization Strategy Plugin
- 進入 Configure Global Security (全局安全配置) > 在Authorization子產品下 > 選擇“項目矩陣授權政策”
-
将登入使用者的Job檢視、建立權限加上。
第一行是匿名使用者,也就是沒登入的使用者的權限,第二行是授權使用者,就是登入的使用者。這樣配置後,使用者登入之後就可以看到自己有權限的job,也可以建立。
下圖是我用admin賬号進行的全局操作,也就是下面的權限會追加到所有job中,類似與統一授權,謹慎使用。
假設我們有一個團隊A的使用者qq,它是所在團隊的管理者,那麼它就可以建立自己需要的job,例如job-a。那麼job-a的配置頁中也會出現一個權限配置頁面,并預設的把自己添加進去,如下圖。 此時,job-a隻有admin和使用者qq可以看到,同時qq可以自己拉人進來。
三、關于group、組。
- 添加人員的時候“Add user or group”,我們會想,是不是可以按組添加,答案是肯定的,可以。那這個group來自哪裡呢?
- 其實,這個group是對應賬号體系的,我文中選擇的是Jenkins自有的賬号體系。你也可以選擇LDAP或者GItlab體系,這些裡面都有組。
- 選擇GItlab體系,配置插件,讓jenkins登入時直接打開gitlab登入頁,實作單點。那麼這時候,組就是gitlab中的group。
- 選擇LDAP,那麼你可以在LDAP中添加組,在組中添加成員。在jenkins的ldap配置時,可以選擇組成員的搜尋方法:一是從group裡加成員,二是從使用者屬性裡配置。
四、Gitlab單點
Gitlab和Jenkins可以通過配置插件,實作使用Gitlab賬号單點登入。效果是:登入Gitlab後,打開Jenkins已經登入,沒登入直接打開Jenkins會跳轉到Gitlab登入頁,輸入賬号密碼,跳轉會Jenkins
五、Role-based Authorization Strategy
這個插件也是基于上述的安全矩陣進行權限控制的,這個ACL(通路控制清單)是Jenkins權限控制的基礎。
插件的優點是可以基于角色控制、可以通過正規表達式對一批Job進行權限管理。
插件的缺點是隻能由admin來管理,不能讓團隊自己管理,且團隊建立的Job必須符合表達式,否則建立之後也看不到。
2020.8.11更新
團隊協作,還需要憑證的隔離,請看我的這篇文章:
[Jenkins權限]-多團隊如何隔離憑證,隐藏憑證,不讓别人看到