如何编写Jenkins插件获取账号创建日期、总用户数及授权用户数?
Jenkins插件开发:获取用户统计数据(创建日期、总用户数、授权用户数)
问题描述
我正尝试编写一款Jenkins插件,以获取账号创建日期、总用户数以及授权用户数。但我不清楚如何访问所需数据,也不知道如何创建插件来展示这些信息。我曾搜索解决方案但无果,目前仅尝试过以下代码:
import hudson.model.User; String user = User.current(); String mailAddress = user.getMailAddress();请问是否有方法实现上述需求?
解决方案
一、访问用户核心数据的API用法
Jenkins核心API的hudson.model.User类已封装所需的用户数据操作,具体用法如下:
1. 获取总用户数
通过User.getAll()获取系统所有用户集合,调用size()即可得到总用户数:
import hudson.model.User; int totalUsers = User.getAll().size();
2. 获取单个用户的创建日期
User类的getCreatedTimestamp()方法返回用户创建时间戳,需注意处理旧版本Jenkins用户可能没有创建时间记录的null情况:
import hudson.model.User; import java.util.Date; User targetUser = User.getById("username", false); // false表示用户不存在时返回null if (targetUser != null) { Long timestamp = targetUser.getCreatedTimestamp(); if (timestamp != null) { Date createDate = new Date(timestamp); // 可按需格式化日期 } }
3. 获取授权用户数
授权用户指拥有至少一项系统权限的用户,可结合Jenkins权限检查API实现,以下示例统计拥有系统访问权限(Overall.Read)的用户数:
import hudson.model.User; import jenkins.security.SecurityListener; import org.springframework.security.core.Authentication; import jenkins.model.Jenkins; int authorizedUsers = 0; for (User user : User.getAll()) { Authentication auth = user.impersonate(); if (SecurityListener.checkPermission(auth, Jenkins.READ)) { authorizedUsers++; } }
二、插件中展示数据的实现方式
推荐通过**仪表盘小部件(Dashboard Widget)**直观展示统计数据,实现步骤如下:
- 创建小部件核心类
继承jenkins.widgets.Widget,封装数据获取逻辑:
import jenkins.widgets.Widget; import hudson.model.User; import jenkins.model.Jenkins; import org.springframework.security.core.Authentication; import jenkins.security.SecurityListener; import java.util.Date; public class UserStatsWidget extends Widget { @Override public String getDisplayName() { return "用户统计信息"; } public int getTotalUsers() { return User.getAll().size(); } public int getAuthorizedUsers() { int count = 0; for (User user : User.getAll()) { Authentication auth = user.impersonate(); if (SecurityListener.checkPermission(auth, Jenkins.READ)) { count++; } } return count; } public String getCurrentUserCreateDate() { User current = User.current(); if (current != null && current.getCreatedTimestamp() != null) { return new Date(current.getCreatedTimestamp()).toString(); } return "无记录"; } }
- 注册小部件
在插件的src/main/resources/META-INF/services/jenkins.widgets.Widget文件中添加类的全路径,示例:
com.yourcompany.jenkins.plugins.UserStatsWidget
- 编写渲染模板
在src/main/resources/com/yourcompany/jenkins/plugins/UserStatsWidget/index.jelly创建Jelly模板,渲染数据:
<j:jelly xmlns:j="jelly:core" xmlns:l="/lib/layout"> <l:header title="${it.displayName}"/> <div class="jenkins-widget"> <h2>${it.displayName}</h2> <ul> <li>总用户数:${it.totalUsers}</li> <li>授权用户数:${it.authorizedUsers}</li> <li>当前用户创建日期:${it.currentUserCreateDate}</li> </ul> </div> </j:jelly>
注意事项
- 确保插件依赖Jenkins核心API,Maven项目可在
pom.xml中添加:
<dependency> <groupId>org.jenkins-ci.main</groupId> <artifactId>jenkins-core</artifactId> <version>2.346.3</version> <!-- 使用与目标Jenkins兼容的版本 --> <scope>provided</scope> </dependency>
- 遍历所有用户并检查权限的操作,可能需要插件拥有管理员权限才能正常执行。
内容的提问来源于stack exchange,提问作者ajith babu
相关产品推荐
相关产品推荐

