groovy – 创建所有用户的电子邮件列表
发布时间:2020-12-14 16:24:56 所属栏目:大数据 来源:网络整理
导读:有时我需要通过电子邮件向所有Jenkins用户发送电子邮件,例如警告他们Jenkins将离线进行维护.下面的脚本为我提供了Jenkins知道的所有人的电子邮件地址,但它包括没有帐户的人,这些人已经提交了触发构建的更改.我想将它们从电子邮件列表中删除,即列表应该只包含
有时我需要通过电子邮件向所有Jenkins用户发送电子邮件,例如警告他们Jenkins将离线进行维护.下面的脚本为我提供了Jenkins知道的所有人的电子邮件地址,但它包括没有帐户的人,这些人已经提交了触发构建的更改.我想将它们从电子邮件列表中删除,即列表应该只包含您在securityRealm页面上看到的用户.我正在寻找修改脚本的帮助.谢谢.
import hudson.model.User import hudson.tasks.Mailer def users = User.getAll() for (User u : users) { def mailAddress = u.getProperty(Mailer.UserProperty.class).getAddress() print(mailAddress + "; ") } 解决方法
首先,您应该知道Jenkins并不总是能够告诉您用户是否存在.从
Jenkins’ javadoc开始:
我发现了两个解决方案 解决方案1
import hudson.model.User import hudson.tasks.Mailer import jenkins.model.Jenkins def realm = Jenkins.getInstance().getSecurityRealm() def users = realm.getAllUsers() for (User u : users) { def mailAddress = u.getProperty(Mailer.UserProperty.class).getAddress() print(mailAddress + "; ") } 注意:这取决于Jenkins配置,并且可能无法在使用另一个(不是HudsonPrivateSecurityRealm)安全领域的系统上运行. 解决方案2 如果用户存在,则返回用户详细信息,否则抛出UsernameNotFoundException: import hudson.model.User import hudson.tasks.Mailer import jenkins.model.Jenkins import org.acegisecurity.userdetails.UsernameNotFoundException def realm = Jenkins.getInstance().getSecurityRealm() def users = User.getAll() for (User u : users) { try { realm.loadUserByUsername(u.getId()) // throws UsernameNotFoundException def mailAddress = u.getProperty(Mailer.UserProperty.class).getAddress() print(mailAddress + "; ") } catch (UsernameNotFoundException e) { } } 这是棘手的,但应该适用于所有安全领域,因为我们使用顶级抽象类(SecurityRealm)中存在的方法. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |