背景
最近项目管理中需要对jenkins的权限进行区分和限定,就研究了一下下。顺道把用户和权限这块的内容分享给大家。
用户
要想创建用户,需要先设定允许用户注册。
在系统设置,Configure Global Security下
设置完成后,进入“管理用户”,就可以创建用户了。
查看用户列表
用户这块基本上就这点东西,其他编辑操作也都很简单,接下来就是配置权限了。
权限
同样,打开Configure Global Security
这里主要通过授权策略来管理,总共四个选项,下面大致介绍下。
1)没有权限限制
两种情况:任何用户,特定用户可以做任何事
对应的配置文件config.xml
<useSecurity>true</useSecurity>
<authorizationStrategy class="hudson.security.AuthorizationStrategy$Unsecured"/>
<securityRealm class="hudson.security.HudsonPrivateSecurityRealm">
<disableSignup>false</disableSignup>
<enableCaptcha>false</enableCaptcha>
</securityRealm>
有人会问,留这个选择干嘛,相当于没有权限管理嘛。小编亲身经历告诉大家,要不是这个设置,现在jenkins还瘫着呢。如果不小心将admin用户权限也回收了,只能来狠的了,进入jenkins的安装目录,将config文件替换成上面的配置就可以解决了。
2)安全矩阵
这块是最好玩的了,项目中目前用的是这种配置。这种配置细化了权限,划分为Overall,Credentials(凭证),Slave(从节点),Job,Run,View等。
Credentials
用来主从节点连接时的配置。
它的权限包括:创建、删除、更新等
Slave
从节点的相关操作,包括断开、连接、创建等。
Job
对应每一个maven项目,操作包括:构建、编辑配置、删除等
View
视图模块,用来管理Job。
在具体项目中,根据角色不同,可以勾选相应的配置。配置完成后,可在config.xml中查看。
小编把能看懂的加了点注释,大家感兴趣可以瞅瞅。
<?xml version='1.0' encoding='UTF-8'?>
<hudson>
<disabledAdministrativeMonitors/>
<version>1.644</version>
<numExecutors>2</numExecutors>
<mode>NORMAL</mode>
<!--权限配置-->
<useSecurity>true</useSecurity>
<authorizationStrategy class="hudson.security.GlobalMatrixAuthorizationStrategy">
<permission>hudson.model.Computer.Build:admin</permission>
<permission>hudson.model.Computer.Configure:admin</permission>
<permission>hudson.model.Computer.Connect:admin</permission>
<permission>hudson.model.Computer.Create:admin</permission>
<permission>hudson.model.Computer.Delete:admin</permission>
<permission>hudson.model.Computer.Disconnect:admin</permission>
<permission>hudson.model.Hudson.Administer:admin</permission>
<permission>hudson.model.Hudson.ConfigureUpdateCenter:admin</permission>
<permission>hudson.model.Hudson.Read:admin</permission>
<permission>hudson.model.Hudson.RunScripts:admin</permission>
<permission>hudson.model.Hudson.UploadPlugins:admin</permission>
<permission>hudson.model.Item.Build:admin</permission>
<permission>hudson.model.Item.Cancel:admin</permission>
<permission>hudson.model.Item.Configure:admin</permission>
<permission>hudson.model.Item.Create:admin</permission>
</authorizationStrategy>
<securityRealm class="hudson.security.HudsonPrivateSecurityRealm">
<disableSignup>false</disableSignup>
<enableCaptcha>false</enableCaptcha>
</securityRealm>
<disableRememberMe>false</disableRememberMe>
<projectNamingStrategy class="jenkins.model.ProjectNamingStrategy$DefaultProjectNamingStrategy"/>
<workspaceDir>${JENKINS_HOME}/workspace/${ITEM_FULLNAME}</workspaceDir>
<buildsDir>${ITEM_ROOTDIR}/builds</buildsDir>
<markupFormatter class="hudson.markup.EscapedMarkupFormatter"/>
<!--jdk配置-->
<jdks>
<jdk>
<name>JDK</name>
<home>/usr/local/jdk1.8</home>
<properties/>
</jdk>
</jdks>
<viewsTabBar class="hudson.views.DefaultViewsTabBar"/>
<myViewsTabBar class="hudson.views.DefaultMyViewsTabBar"/>
<clouds/>
<quietPeriod>5</quietPeriod>
<scmCheckoutRetryCount>0</scmCheckoutRetryCount>
<!--视图-->
<views>
<hudson.model.AllView>
<owner class="hudson" reference="../../.."/>
<name>All</name>
<filterExecutors>false</filterExecutors>
<filterQueue>false</filterQueue>
<properties class="hudson.model.View$PropertyList"/>
</hudson.model.AllView>
<!--视图-->
<listView>
<owner class="hudson" reference="../../.."/>
<name>itoo-basic-225</name>
<filterExecutors>false</filterExecutors>
<filterQueue>false</filterQueue>
<properties class="hudson.model.View$PropertyList"/>
<!--Job,对应每个maven项目-->
<jobNames>
<comparator class="hudson.util.CaseInsensitiveComparator"/>
<string>itoo-base-parent</string>
<string>itoo-basic-api</string>
<string>itoo-basic-course-core</string>
<string>itoo-basic-course-ear</string>
<string>itoo-basic-course-web</string>
</jobNames>
<jobFilters/>
<columns>
<hudson.views.StatusColumn/>
<hudson.views.WeatherColumn/>
<hudson.views.JobColumn/>
<hudson.views.LastSuccessColumn/>
<hudson.views.LastFailureColumn/>
<hudson.views.LastDurationColumn/>
<hudson.views.BuildButtonColumn/>
</columns>
<recurse>false</recurse>
</listView>
<!--视图-->
<listView>
<owner class="hudson" reference="../../.."/>
<name>platform</name>
<filterExecutors>false</filterExecutors>
<filterQueue>false</filterQueue>
<properties class="hudson.model.View$PropertyList"/>
<jobNames>
<comparator class="hudson.util.CaseInsensitiveComparator" reference="../../../listView/jobNames/comparator"/>
<string>itoo-base</string>
<string>itoo-easyui</string>
<string>itoo-excelV2.0-api</string>
<string>itoo-root</string>
</jobNames>
<jobFilters/>
<columns>
<hudson.views.StatusColumn/>
<hudson.views.WeatherColumn/>
<hudson.views.JobColumn/>
<hudson.views.LastSuccessColumn/>
<hudson.views.LastFailureColumn/>
<hudson.views.LastDurationColumn/>
<hudson.views.BuildButtonColumn/>
</columns>
<recurse>false</recurse>
</listView>
</views>
<primaryView>All</primaryView>
<slaveAgentPort>0</slaveAgentPort>
<label></label>
<nodeProperties/>
<globalNodeProperties/>
</hudson>
最后补充一点,jenkins的权限真的做的不错,即使我们的需求怎么变,他都有办法解决。比如设定每个子系统只看自己那块,这个需要jenkins插件完成不同角色查看不同jobs。