You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何编写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)**直观展示统计数据,实现步骤如下:

  1. 创建小部件核心类
    继承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 "无记录";
    }
}
  1. 注册小部件
    在插件的src/main/resources/META-INF/services/jenkins.widgets.Widget文件中添加类的全路径,示例:
com.yourcompany.jenkins.plugins.UserStatsWidget
  1. 编写渲染模板
    在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.05 12:02:16