一、Jenkins 平台基于 GitLab 的 SSO 授权认证

为了避免权限上的报错先设置权限:

1、打开浏览器输入http://jenkins.zhang-qing.com/,输入账号root和密码root登录(这是我设置的账号和密码,实际需要根据你自己设计的账号和密码来定)

2、点击【系统管理】 - 【全局安全配置】

授权策略处选择【登录用户可以做任何事 】

image-20231128165956474

说明:默认设置的授权策略就是【登录用户可以做任何事 】

4.1 安装 Jenkins 插件

1、点击gitlab-oauth/选择自己Jenkins对应的GitLab Authentication插件版本。这里我的Jenkins版本为V2.387.2,所以下载1.16版本的GitLab Authentication插件

image-20231128182201828

2、点击【系统管理】-【插件管理】

3、点击【Advanced settings】,点击【选择文件】,选择好本地导入的文件后,点击【Deploy】进行本地导入

image-20231120194817001

4、勾选【Restart Jenkins when installtion is complete and no jobs are running】等待下载完成

4.2 GitLab 创建 App

1、在浏览器上输入http://gitlab.zhang-qing.com/,默认的管理员用户root,密码S6n5Y7b81wRrJnKv

2、点击【你的工作】-【管理中心】

image-20231223225852250

点击【应用程序】-【新建应用】

image-20231223225952859

3、勾选相关选项

勾选:Trusted,Confidential;

权限:api,read_user;

image-20231223230055146

4、完成信息填写后,点击【Save application】

name:jenkins-auth

Redirect URI:http://jenkins.zhang-qing.com/securityRealm/finishLogin

说明:http://jenkins.zhang-qing.com是Jenkins地址,/securityRealm/finishLogin是固定后缀

image-20231223230246558

5、完成后如下图:

image-20231223230316431

复制Application ID:0c75e95507ac6a3d7107e02444f0c2ba400477bbea438f586d619e0470300ca2

复制Secret:

1f2cfeabdab15a01102ae8e4e3b42e1e1cbbaae665c135b71466410861c9ca1e

4.3 Jenkins 配置

1、点击【系统管理】-【全局安全配置】,【安全域】处选择【GitLab Authentication Plugin】

image-20231223230453402

2、填写下面相关信息

GitLab Web URI:http://gitlab.zhang-qing.com(填写Gitlab地址,注意末尾不要加斜线)

GitLab API URI:http://gitlab.zhang-qing.com(填写Gitlab地址,注意末尾不要加斜线)

Client ID:Gitlab界面的 “Application ID”即0c75e95507ac6a3d7107e02444f0c2ba400477bbea438f586d619e0470300ca2

Client Secret:Gitlab界面的 “Secret”即1f2cfeabdab15a01102ae8e4e3b42e1e1cbbaae665c135b71466410861c9ca1e

3、配置完成后,点击【保存】

image-20231128201658360

4.4 测试验证

1、在浏览器上输入http://gitlab.zhang-qing.com,默认的管理员用户root,密码S6n5Y7b81wRrJnKv

2、点击【Admin Area】 -【Users】-【New user】 在Gitlab中创建新的用户

image-20231128202210374

3、填写相关信息

Name:lisi

Username:lisi

Email:lisi@qq.com

image-20231128202425942

4、重新点击【Users】-【Edit】

image-20231128202542830

修改密码为S6n5Y7b81wRrJnKv

image-20231129102409362

5、使用新账户lisi登录Gitlab,会提示你再次修改密码,这里密码修改为S6n5Y7b81wRrJn

image-20231223231002887

6、注销Jenkins当前用户

image-20231129102802835

点击完成后,会跳转到以下界面。此时退出Jenkins,但是没有退出Gitlab

image-20231129102848368

7、继续点击右上角的【登录】,观察到此时会以lisi这个用户登录Jenkins

image-20231129103148936

点击【用户列表】-【lisi】查看用户信息

image-20231129103356240

image-20231129103410890

如果想查看详细信息,需要将lisi用户切换成Jenkins管理用户

4.5 异常修复

4.5.1 问题描述

当对jenkins配置gitlab授权登录时,可能会存在redirect url配置错误等情况,此时登录 jenkins时则无法登录了,因为此时jenkins会一直跳转到错误的url,从而无法打开 jenkins。

4.5.2 解决办法

此时显然是不希望重新卸载安装jenkins的,因为此时完全有可能jenkins上已经存在大量的流水线配置了,因此此时需要通过在后台对jenkins进行处理。

解决问题的思路就是授权登录的方式重新改回admin登录的方式

(1)编辑 /var/jenkins_home/config.xml 文件(如果使用NFS,去到指定的pvc目录找到config.xml 文件修改即可)

从中找到类似如下内容

#这里演示nfs环境修改
[root@nfs01 ~]# cd /opt/sharedata/devops-jenkins-pvc-pvc-d0a1cc4a-789e-4129-9e51-102fe701f0e5/
[root@nfs01 devops-jenkins-pvc-pvc-d0a1cc4a-789e-4129-9e51-102fe701f0e5]# vim config.xml

主要做以下修改

<securityRealm class="org.jenkinsci.plugins.GitLabSecurityRealm">
    <gitlabWebUri>http://xxxxxx.cn</gitlabWebUri>
    <gitlabApiUri>http://xxxxxx.cn</gitlabApiUri>
    <clientID>6841a6932bdca3846d4375a36a3d182081d681e750494718b56590f653e6f351</clientID>
    <clientSecret>{AQAAABAAAABQeSsOX2Et0rq8SKcG+PJJKy3MALz7sTmpxeEfCspErVIMZ3OyqhGLRBipi+FDwHakzz9lxU9KIlKaYojh6qUh0TND0/UrnqVDEcWvIbOB8GxKDxeUhLpKhvSq6BL54kMP}</clientSecret>
</securityRealm>

将上述内容替换为如下内容:

  <securityRealm class="hudson.security.HudsonPrivateSecurityRealm">
      <disableSignup>true</disableSignup>
      <enableCaptcha>false</enableCaptcha>
  </securityRealm>

然后重启jenkins,即又可以用admin账号登录了

[root@master01 4]# k delete po jenkins-b6bf6dd-vwrhz -ndevops

4.6 总结

1、通过GitLab OAuth2.0授权认证控安全可追溯;

2、账号统一管理授权;