
一、Jenkins系統用戶管理
- 1.1 Jenkins 專有用戶數據庫
- 1.2 LDAP認證集成
- 1.3 GitLab單點登錄
- 1.4 GitHub單點登錄
我們進入系統設置 > 全局安全配置,在這里可以配置jenkins的用戶認證和授權策略。

在配置之前還是要囑咐一句,由于配置失敗或者不當可能會影響后續用戶的登錄。在此建議大家首先在測試環境進行測試。可以提前將${JENKINS_HOME}/config.xml備份一下,然后配置失敗的時候迅速還原。
還有一種情況,配置gitlab和jenkins 用戶認證時弄的jenkins沒有權限了。修改${JENKINS_HOME}/config.xml中的<useSecurity>true</usrSecurity>為<useSecurity>false</usrSecurity>以關閉Jenkins的權限認證,然后重啟Jenkins,重新配置管理的權限,最后開啟權限認證功能。可以暫時開啟允許任何人訪問。
我們先來看Authentication部分,Jenkins默認使用的Jenkins專有用戶數據庫管理用戶,支持LDAP、GitHub、GitLab等認證集成。但是同時只能配置一種認證集成方式。我們主要配置這三種認證。
1、Jenkins 專有用戶數據庫
系統管理>安全>管理用戶, 可以對系統用戶增刪改查。

我們來創建一個普通的用戶zeyang。

創建完成后,我們進入${JENKINSS_HOME}/users目錄下可以看到如下內容:
[root@zeyang-nuc-service users]# ls
admin_3285798656405222668 users.xml zeyang_1686679553273142732
Jenkins的所有配置都是采用文件存儲,即xml文件。在這里users目錄包含了兩部分數據:用戶文件夾和所有用戶信息配置文件users.xml。Jenkins默認在users目錄下創建一個與用戶同名的文件夾存儲該用戶的配置信息,保存在該目錄下的config.xml文件中。
[root@zeyang-nuc-service users]# ls zeyang_1686679553273142732/
config.xml
這個config.xml文件中包含了用戶的配置信息,這些信息都可以在web頁面中更新。

更新完成后,點擊保存。則會更新${JENKINS_HOME}/users目錄下該用戶目錄對應的config.xml文件。類似下面這樣:
<?xml versinotallow='1.1' encoding='UTF-8'?>
<user>
<version>10</version>
<id>zeyang</id>
<fullName>zeyangli</fullName>
<properties>
<jenkins.security.ApiTokenProperty>
<tokenStore>
<tokenList/>
</tokenStore>
</jenkins.security.ApiTokenProperty>
<io.jenkins.plugins.localization__zh__cn.UserCommunityProperty plugin="localization-zh-cn@1.0.17">
<showCondition>Chinese</showCondition>
</io.jenkins.plugins.localization__zh__cn.UserCommunityProperty>
<com.cloudbees.plugins.credentials.UserCredentialsProvider_-UserCredentialsProperty plugin="credentials@2.3.12">
<domainCredentialsMap class="hudson.util.CopyOnWriteMap$Hash"/>
</com.cloudbees.plugins.credentials.UserCredentialsProvider_-UserCredentialsProperty>
<hudson.plugins.emailext.watching.EmailExtWatchAction_-UserProperty plugin="email-ext@2.69">
<triggers/>
</hudson.plugins.emailext.watching.EmailExtWatchAction_-UserProperty>
<hudson.model.MyViewsProperty>
<views>
<hudson.model.AllView>
<owner class="hudson.model.MyViewsProperty" reference="../../.."/>
<name>all</name>
<filterExecutors>false</filterExecutors>
<filterQueue>false</filterQueue>
<properties class="hudson.model.View$PropertyList"/>
</hudson.model.AllView>
</views>
</hudson.model.MyViewsProperty>
<org.jenkinsci.plugins.displayurlapi.user.PreferredProviderUserProperty plugin="display-url-api@2.3.3">
<providerId>default</providerId>
</org.jenkinsci.plugins.displayurlapi.user.PreferredProviderUserProperty>
<hudson.model.PaneStatusProperties>
<collapsed/>
</hudson.model.PaneStatusProperties>
<jenkins.security.seed.UserSeedProperty>
<seed>d93c5425095c7688</seed>
</jenkins.security.seed.UserSeedProperty>
<hudson.search.UserSearchProperty>
<insensitiveSearch>true</insensitiveSearch>
</hudson.search.UserSearchProperty>
<hudson.model.TimeZoneProperty/>
<hudson.security.HudsonPrivateSecurityRealm_-Details>
<passwordHash>#jbcrypt:$2a$10$KwFJ/S69z8S/wf65xnyFB.iUEbsNWJCN0gKlD8AkOyL.k2cgKVLSO</passwordHash>
</hudson.security.HudsonPrivateSecurityRealm_-Details>
<hudson.tasks.Mailer_-UserProperty plugin="mailer@1.32">
<emailAddress>zeyangli@test.com</emailAddress>
</hudson.tasks.Mailer_-UserProperty>
</properties>
</user>
2、LDAP認證集成
LDAP系統是用于統一管理用戶,關于LDAP服務的部署,在測試環境推薦用Docker部署更加方便些。基本上企業中都會有現成的LDAP服務,所以我們的重點是拿到系統信息即可,在jenkins與LDAP能夠正常通信的前提下,你可能需要需要的信息:
- LDAP服務器地址:ldap://192.168.1.200
- LDAP服務器端口:389
- 用于認證集成組織OU信息:ou=jenkins,dc=devops,dc=com
- 用于集成時具有查詢權限的用戶:cn=admin,dc=devops,dc=com
首先,我需要在Jenkins系統中安裝LDAP插件,然后進入系統管理 >全局安全配置。

填寫好信息之后,我們可以點擊測試按鈕進行測試。會模擬用戶登錄,成功后再保存配置即可。

3、GitLab單點登錄
為什么要配置GitLab單點登錄呢?之前有這樣的一個場景,每次開發人員登錄Jenkins和其他系統的時候都需要再次填寫登錄信息。增加了工具鏈之間的跳轉成本。為了解決這樣的問題,我們可以以GitLab為中心配置單點登錄。配置過程分為兩部分:GitLab創建應用、Jenkins配置Gitlab插件信息。
首先,我們需要使用管理員賬號在GitLab中添加一個應用。系統設置 > 應用管理 > 新建應用。

填寫Jenkins回調地址http://jenkinsserver:8080/securityRealm/finishLogin,勾選權限默認具有read_user權限即可。(這里的地址填寫的是jenkins的實際地址)保存配置,會提示下面的信息:

OK,這些信息后續需要填寫到Jenkins中。ApplicationID secret。我們開始配置Jenkins。我們需要在Jenkins系統中安裝插件Gitlab Authentication, 然后導航到全局安全配置,填寫Gitlab系統地址和上面在Gitlab創建的應用的ApplicationId secret。

到此就配置完成了。注意:當Jenkins前面有代理的時候可能會出現跳轉錯誤的問題。這時候需要看下提示錯誤的redirect URL地址,檢查下圖配置。如果下圖配置沒有問題,請檢查代理的配置問題。另外要注意是??http?
?模式哦

4、GitHub單點登錄
配置的GitHub集成與GitLab配置很類似: 首先登錄GitHub, settings -> Developer Settings -> Oauth Apps。

新建應用:填寫Jenkins回調地址http://jenkinsserver:8080/securityRealm/finishLogin。

保存,獲取應用ID和secret。

接下來我們需要在Jenkins系統中安裝插件Github Authentication, 然后導航全局安全配置。填寫GitHub系統地址和上面在GitHub創建的應用的ApplicationId secret。

最終的效果如下:

到此,我們完成了Jenkins用戶的認證管理。大家按需配置即可。后續我們來講解權限管理為項目和用戶授權。