Jenkins-專案權限管理
jenkins 的專案權限管理練習,之所以會弄這個是因為專案越來越多的話,針對組織內的使用者及專案之間的權限管理,如果還是一個個的設定,不僅容易出錯,也難以整體的確認當前分配的權限概況。
Intro
專案如果採用的是Matrix Authorization Strategy
這個 plugin 所提供的專案型矩陣授權策略
的話,應該也很納悶 Role 怎麼設定,據我找到的這篇文章Jenkins 权限管理之 Matrix Authorization Strategy來看的話,說是要靠 LDAP 或是 Active Directory 來做,這就牽涉到我不熟悉的網管、主機、域名等等的設定,坦白說這東西對我就是天書。我不可能為了吃一碗麵還去研究要怎麼鑽木取火、把麵團發酵吧。
REF:How to create and add users to a group in Jenkins for authentication?
在該文章得到另外一個關鍵字:Role-based Authorization Strategy
,於是就來研究一下怎麼設定這個 plugin
Role-based Authorization Strategy
在Role-based Authorization Strategy的介紹網頁中可以看到基本的用法,大致上的流程就是:安裝->啟用->設定角色群組->設定使用者角色對應
安裝並啟用
安裝套件這個沒有什麼好說的,啟用也很簡單,不外乎就是到管理jenkins
->設定全域安全性
這邊將授權
的下拉選單,從原先的專案型矩陣授權
改為Role-Based Strategy
值得一提的是,當你的授權策略改變的話,原先在各個專案的矩陣授權設定,就會一併隱藏起來,若未來調整回來專案型矩陣授權
的話,這些被隱藏的授權設定也會回復,至少這個是我測試出來的經驗啦,這樣的話就比較不害怕改壞掉要切回來,然後設定全部消失的窘境,不過因為軟體版本太多,所以最好在調整的時候自己先測試、備份一下原有的專案設定,以免發生了不可挽回的操作,人生跑馬燈就會出現了。
設定角色群組及角色對應
接著到管理jenkins
->Security
->Manage and Assign Roles
會看到設定角色群組、指派角色的功能
設定有一點點的難懂,但是測試了一下發現的確是挺不錯的,他的設定有三個部分,這邊先關注在Global Roles
、Item Roles
這兩項就可以了,最後一項Node Rules
我還是沒看懂,或許有人可以分享一下?
設定範例
我覺得用範例來解釋會比較好懂,假設我有專案叫做
pipeline_job_1
pipeline_job_2
taskProject
我想要達成的效果是
- 沒有特別設定的話,一般的使用者就是只能看到
pipeline_job
任務,但是不能夠操作 - 開發人員(develop)可以執行
pipeline_job
任務,但是看不到建置設定 - 管理人員(manager)針對
pipeline_job
任務具備所有權限 - 所有的人都看不到
taskProject
,除了 admin
所以整理完需求,描述大概就是像下面這樣
使用者 | 權限 |
---|---|
art | 最高管理者(admin)阿,全部打開!! |
demouser1 | pipeline_job 專案的管理者(manager) |
demouser2 | pipeline_job 專案的開發人員(develop) |
demouser3 | 什麼都看不到 |
那麼,我就需要
- 針對超級管理者 art 給予全域的超級管理者(admin)權限
- 針對管理者 demouser1 作一個管理者(manager),這個設定對應的專案是 pipeline_job_1 跟 2,且權限都開
- 針對開發人員 demouser2 作一個開發人員(develop),這個設定對應的專案是 pipeline_job_1 跟 2,且權限是 build 跟 read
- 最後,針對一般使用者給予全域的什麼都看不到(anyone)的權限
整理一下就是
scope | role | permission | for who? | result |
---|---|---|---|---|
全域 | admin | 全開 | art | 所有權限 |
全域 | anyone | 僅給予整體的 read | 沒有特別設定的人 | 進來介面什麼都沒有 |
pipeline_job_1 跟 2 | Develop | 允許 build , read | demouser2 | 可以執行 pipeline_job_1 跟 2 |
pipeline_job_1 跟 2 | Manager | 允許該專案所有操作 | demouser1 | 可以執行所有操作 |
我們先搞定全域的兩個設定,分別是 admin 跟 anyone
接著指派給使用者,因為只有 art 所以只需要指派一個,其他的人就不用特別指派了
透過正則表達式去比對我們要符合的pipeline_job_1
、pipeline_job_2
這兩個專案,所以 pattern
就是 pipeline_job.*
,因為這樣很直觀所以我也沒打算寫得很複雜的 pattern,設定的話就像下面這樣
可以測試一下 pattern match 哪些專案,點一下就可以看到,如果你屬於 regex 之神的話,可以當我沒說
指派使用者,將 demouser1 套用 manager, demouser2 套用 develop
這邊的群組名稱可以命名的更清晰一點,方便管理,例如專案叫做 SuperStar,管理者就可以命名為 SuperStarManager,開發人員就可以命名為 SuperStarDevelop;又或者是你們專案有 SuperStar,TravelToday 都是同一組人,這個團隊叫做 TeamA,那其實也可以把群組名稱命名為 TeamA-Manager 之類的,總之就是讓人一看就知道這個群組是誰,責任範疇在哪裡。千萬不要真的傻傻的明明一個團隊要負責十個專案,結果十個專案還都有各自的 Manager 跟 Develop 或是其他一堆有的沒有的權限,然後搞個每次設定那個清單排到 1920 螢幕寬度都還看不完,那就累人了,不過如果真的硬要好像也是可以拉~(笑)
那麼最後來測試一下每一位使用者登入後的情況,看看是否如我們預期
art,所有專案功能都開放
demo user 1,可以看到 pipeline_job 專案,可以執行且能夠設定建置
demo user 2,可以看到 pipeline_job 專案,可以執行但是不能夠設定建置
demo user 3,應該是什麼都看不到
補充:切換回『專案型矩陣授權策略』
如果設定之後因故,老闆叫你先還原呢?那就直接把一開始提到的管理jenkins
->設定全域安全性
這邊將授權
的下拉選單,再改回來專案型矩陣授權
就好了,以pipeline_job_1
為例,我在調整之前有把權限給予好幾個 user,調整回來後,設定也回來了
當然,這個步驟再次強調,希望還是要在你自己的環境作一下簡單的 POC 測試,但是如果切回來後還想要切過去Role-based
,那麼剛剛設定的就會全部清空,需要全部再重新建立了;雖說是全部重新建立,但其實因為設定也就在兩個頁面的地方,其實如果有做好備份、截圖,甚至用 EXCEL 記錄好有哪些權限設定、群組,其實設定也不繁瑣。
結論
作為一個老牌的軟體,jenkins 是真的很多工具可以用,出問題想找資料也很多,這也是我喜歡 jenkins 的原因,好用的東西功能自然複雜,設定自然就困難,瞭解概念再去處理,自然事半功倍。這也是我整理這篇文章的原因,叫我看官方那一串我真的會看半天還是看不懂。自己 RUN 過一次記錄一下,以後我肯定還會碰上這個問題忘記怎麼設定的。也算救救未來的自己了