从运行类jenkins获取Changeset()函数

从运行类jenkins获取Changeset()函数,jenkins,jenkins-plugins,Jenkins,Jenkins Plugins,我在Jenkins中实现了一个与工作流兼容的插件,这意味着我在实现SimpleBuildStep接口,它有一个执行方法,与使用AbstractBuild而不是Run的常规方法不同 AbstractBuild类有一个名为getChangeSet的函数,该函数在Run类中不可用。我需要这个函数从SCM获取更改。我试过所有类型的铸造。但它不起作用。如何在运行中获得此函数?我遇到了同样的问题,并通过循环运行父项的ItemGroup中的所有项来解决它。我的要求是从运行的变更集中获取最新的变更用户。下面是我

我在Jenkins中实现了一个与工作流兼容的插件,这意味着我在实现SimpleBuildStep接口,它有一个执行方法,与使用AbstractBuild而不是Run的常规方法不同


AbstractBuild类有一个名为getChangeSet的函数,该函数在Run类中不可用。我需要这个函数从SCM获取更改。我试过所有类型的铸造。但它不起作用。如何在运行中获得此函数?

我遇到了同样的问题,并通过循环运行父项的ItemGroup中的所有项来解决它。我的要求是从运行的变更集中获取最新的变更用户。下面是我是如何做到的,我希望它能帮助你解决你的问题

    private String getChangeUser(Run<?, ?> run) throws AbortException {
    log("Started getChangeUser()");
    String userName = null;
    UserIdCause user = (UserIdCause) run.getCause(Cause.UserIdCause.class);
    if (user != null && user.getUserName() != null) {
        log("Build initiated by: " + user.getUserName());
        if (!user.getUserName().contains("anonymous")) {
            userName = user.getUserName();
        }
    }
    if (userName == null) {
        log("Getting username from changelog for run: " + run.getFullDisplayName());
        log("Getting username from changelog for run.parent:" + run.getParent().getFullDisplayName());
        ItemGroup<?> ig = run.getParent().getParent();
        nextItem: for (Item item : ig.getItems()) {
            if (!item.getFullDisplayName().equals(run.getFullDisplayName())
                    && !item.getFullDisplayName().equals(run.getParent().getFullDisplayName())) {
                continue;
            }
            log("Item: " + item.getFullDisplayName());
            for (Job<?, ?> job : item.getAllJobs()) {
                if (job instanceof AbstractProject<?, ?>) {
                    //log("Job: " + job.getFullName());
                    AbstractProject<?, ?> p = (AbstractProject<?, ?>) job;
                    //log("Project: " + p.getFullName());
                    for (AbstractBuild<?, ?> b : p.getBuilds()) {
                        log("Build: " + b.getFullDisplayName());
                        for (Entry entry : b.getChangeSet()) {
                            if (entry.getAuthor() != null) {
                                log("entry.getAuthor().getId(): " + entry.getAuthor().getId());
                                log("entry.getAuthor().getDescription(): " + entry.getAuthor().getDescription());
                                log("Change user: " + entry.getAuthor().getFullName());
                                userName = entry.getAuthor().getFullName();
                                break nextItem;
                            }
                        }
                    }
                }
            }
        }
    }
    return userName;
}
私有字符串getChangeUser(运行)引发异常异常异常{
日志(“已启动getChangeUser()”;
字符串userName=null;
UserIdCause user=(UserIdCause)run.getCause(Cause.UserIdCause.class);
if(user!=null&&user.getUserName()!=null){
日志(“生成由:“+user.getUserName()启动”);
如果(!user.getUserName()包含(“匿名”)){
userName=user.getUserName();
}
}
如果(用户名==null){
日志(“从changelog获取用户名以便运行:+run.getFullDisplayName());
日志(“从changelog获取run.parent的用户名:+run.getParent().getFullDisplayName());
ItemGroup ig=run.getParent().getParent();
nextItem:for(项:ig.getItems()){
如果(!item.getFullDisplayName()等于(run.getFullDisplayName())
&&!item.getFullDisplayName().equals(运行.getParent().getFullDisplayName())){
继续;
}
日志(“项:+Item.getFullDisplayName());
for(作业:item.getAllJobs()){
if(抽象项目的作业实例){
//日志(“作业:+Job.getFullName());
AbstractProject p=(AbstractProject)作业;
//日志(“项目:+p.getFullName());
for(AbstractBuild b:p.getBuilds()){
日志(“构建:+b.getFullDisplayName());
for(条目:b.getChangeSet()){
if(entry.getAuthor()!=null){
日志(“entry.getAuthor().getId():”+entry.getAuthor().getId());
日志(“entry.getAuthor().getDescription():”+entry.getAuthor().getDescription());
日志(“更改用户:+entry.getAuthor().getFullName());
userName=entry.getAuthor().getFullName();
打破nextItem;
}
}
}
}
}
}
}
返回用户名;
}